【问题标题】:Parsing techniques for runtime language alteration运行时语言更改的解析技术
【发布时间】:2011-05-17 03:42:57
【问题描述】:

看看 Rakudo Perl6,我想知道是否有用于解析和词法分析的技术,这些技术允许更改/扩展语言的语法,并且高效且不难实现。

【问题讨论】:

    标签: parsing compiler-construction raku dynamic-languages


    【解决方案1】:

    看看 PEG。有一些基于 PEG (http://en.wikipedia.org/wiki/Parsing_expression_grammar) 的语言是可扩展的,例如:

    http://www.chrisseaton.com/katahdin/

    http://www.meta-alternative.net/mbase.html

    Perl5 和 Perl6 语法可以很容易地以 PEG 形式定义(我可能错了,但当前的 Perl6 很可能是这样实现的)。

    【讨论】:

      【解决方案2】:

      “不”。 [编辑:截至问题的时间]如果问题是关于词法分析/解析 Perl,它非常难。我们(请参阅我的简历中的“我们”)有一个 Perl5 词法分析器。我们有非常好的词法生成器工具(Unicode、多状态、正则表达式,内置“not regexp”)。 Perl 词法分析器是一个令人头疼的问题。我们最终得到了类似 50 种词法模式(每种都有自己的一组标记定义)来处理词法分析部分。

      我们正盯着解析部分,今天我们很幸运,没有直接需要这样做,所以到目前为止我们已经避免了这个。显然,根据各种标识符的动态定义,该语言是模棱两可的,因此您在某一时刻如何解释(解析)一个短语并不是静态可决定的。我们认为我们可以使用处理歧义的 GLR 解析器来做到这一点,并且只需简单地将歧义保留为可能的运行时替代方案。几个月后我会告诉你的。

      【讨论】:

      • 这个答案是关于 Perl 5。问题是关于 Perl 6。后者的答案是肯定的。要了解这有多深入,请查看最近的博客文章,讨论到目前为止的弯曲 P6 语法 you could trivially embed SQL inside P6 inside HTML inside P6
      • @raiph:是的,你是对的。在写这篇文章的时候,Perl6 似乎更加模糊,所以答案是从“Perl6 之外”的角度来写的。我建议您添加您的评论作为答案。 [这证明关于 SO 的答案不是永久性的;他们变得陈旧]。
      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 2011-03-13
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多