我想为 tatsu 使用不同的词法分析器,但使用 tatsu 的解析器。这可能吗?例如,在语法中:
expr = NUM | ID | (expr '+' expr) ;
是否可以使用替代词法分析器来提供NUM和ID?
我想为 tatsu 使用不同的词法分析器,但使用 tatsu 的解析器。这可能吗?例如,在语法中:
expr = NUM | ID | (expr '+' expr) ;
是否可以使用替代词法分析器来提供NUM和ID?
通常,PEG 解析器不使用单独的词法分析器,因为它们不需要。可以使用相同的语法语言来指定词法元素。
TatSu 是一个 PEG 解析器生成器,也不支持单独的词法分析器,但Buffer该类提供了避免文字标记的部分匹配和使用正则表达式指定词法元素的工具:
expr = num | id | (expr '+' expr) ;
num = /\d+/ ;
id = /[a-zA-Z_]\w*/ ;
最近版本的 TatSu 允许使用不同的词法分析器(Tokenizer在 Tatsu 中称为)。
解析器可能不得不依靠语义动作来验证对应于标记的语法规则。
我在帮助 Python PEG 解析器的工作中有一些未完成的实验,位于https://github.com/neogeny/pygl。