最近,我学习了ANTRL4,但我不明白为什么“.”是否匹配ID词法规则?

发布于 2022-06-14 13:28:35
因为当您在语法中添加文字标记(如'...' )时,此'...'令牌将转换为真正的lexer规则。
例如,如果语法如下所示:
grammar T;
parse : '...';
ID : '.'+;ANTLR将将其视为下列语法:
grammar T;
parse : T__1;
T__1 : '...';
ID : '.'+;正因为如此,像"..."这样的输入总是被标记为T__1令牌,而不是ID令牌。
ANTLR的lexer遵循两个简单的规则:
如果2(或更多)规则匹配相同的字符,则
。
这就是为什么"..."成为T__1令牌(规则2适用),输入(如"...." )成为ID令牌(规则1适用)的原因。
我完全同意迈克的评论:
附加说明:由于这一问题和类似的问题,强烈建议只使用显式的词法规则,而不是解析器语法中的
'...'那样的隐式规则。
https://stackoverflow.com/questions/72616663
复制相似问题