Parsing 运行时语言转换的解析技术

Parsing 运行时语言转换的解析技术,parsing,compiler-construction,raku,dynamic-languages,Parsing,Compiler Construction,Raku,Dynamic Languages,看看Rakudo Perl6,我想知道是否有语法分析和词法分析的技术可以改变/扩展语言的语法,并且是有效的并且不难实现。[编辑:截至发问时]如果问题是关于对Perl进行词法分析/解析,那就相当难了。我们(见我的个人简历中的“我们”)有一个Perl5 lexer。我们有非常好的lexer生成器工具(Unicode、多状态、带有内置“not regexp”的regexp)。Perl lexer的构建是一个令人头疼的问题;我们最终得到了大约50个词法模式(每个都有自己的一组标记定义)来处理词法分析部分

看看Rakudo Perl6,我想知道是否有语法分析和词法分析的技术可以改变/扩展语言的语法,并且是有效的并且不难实现。[编辑:截至发问时]如果问题是关于对Perl进行词法分析/解析,那就相当难了。我们(见我的个人简历中的“我们”)有一个Perl5 lexer。我们有非常好的lexer生成器工具(Unicode、多状态、带有内置“not regexp”的regexp)。Perl lexer的构建是一个令人头疼的问题;我们最终得到了大约50个词法模式(每个都有自己的一组标记定义)来处理词法分析部分


我们正在关注解析部分,今天我们很幸运,没有直接的需求,所以我们到目前为止已经避免了这一点。很明显,根据各种标识符的动态定义,这种语言是不明确的,因此您在某一时刻如何解释(解析)一个短语并不是静态的。我们认为,我们可以使用处理歧义的GLR解析器来实现这一点,而只需将歧义作为可能的运行时替代方案。几个月后我会告诉你的。

看看钉子。有一些基于PEGs()的语言是可扩展的,例如:


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

这个答案是关于Perl5的。问题是关于Perl6的。后者的答案是肯定的。要想知道这有多深,请查看最近一篇讨论P6语法的博文。@raiph:是的,你是对的。在写这篇文章的时候,Perl6似乎更加模糊,所以答案是从“Perl6之外”的角度写的。我建议你加上你的评论作为回答。[这证明了答案不是永久性的,而是过时的]。