用于运行时语言更改的解析技术

时间:2010-11-29 08:04:46

标签: parsing compiler-construction dynamic-languages perl6

看看Rakudo Perl6我想知道是否有解析和词法分析的技术允许改变/扩展语言的语法,这种技术既有效又不难实现。

2 个答案:

答案 0 :(得分:1)

“否”。 [编辑:截至问题的时间]如果问题是关于lexing /解析Perl,那很难。我们(见“我们的生物”)有一个Perl5词法分析器。我们有非常好的词法生成器工具(Unicode,多状态,正则表达式,内置“not regexp ”)。 Perl lexer是一个皇家头痛的建设;我们最终得到了50个词法模式(每个模式都有自己的一组标记定义)来处理lexing部分。

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

答案 1 :(得分:1)

看看PEGs。有些语言基于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很可能是以这种方式实现的。)