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