Antlr4:防止规则和令牌冲突



给定以下语法:

grammar minimal;
rule: '(' rule_name body ')';
rule_name : NAME;
body : '(' AT NAME ')';
AT : 'at';
NAME: LETTER ANY_CHAR*;
fragment LETTER: 'a' .. 'z' | 'A' .. 'Z';
fragment ANY_CHAR: LETTER | '0' .. '9' | '-' | '_';
WHITESPACE: ( ' ' | 't' | 'r' | 'n' )+ -> skip;

如何在不重新排列语法的情况下将 at 与 at 匹配(at (at bar((作为有效的函数名称,而不会与正文中的 AT 令牌发生冲突?

要消除冲突并保留预期的令牌类型,请执行以下操作:

rule_name : ( NAME | AT ) -> type(NAME) ;

最新更新