Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Antlr4:防止规则和令牌冲突_Java_Antlr_Antlr4 - Fatal编程技术网

Java Antlr4:防止规则和令牌冲突

Java Antlr4:防止规则和令牌冲突,java,antlr,antlr4,Java,Antlr,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: ( ' ' | '\

鉴于以下语法:

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 bar))与at作为有效函数名进行匹配,而不会与正文中的at标记发生冲突,而不会重新排列语法

要删除冲突并保留预期的令牌类型:

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

您要求的不是
规则:'('(NAME | AT))
,还是允许的?是的,最初AT标记与其他规则进行了某种深度嵌套的匹配,但是在规则部分,应该可以在匹配名称时写入AT,因为validI认为
NAME | AT
是您想要的。如果您的需求中有禁止这样做的内容,那么我不确定它是什么。您可能需要澄清您的问题。谢谢您的澄清。我再想一想,你可以在处执行
规则_name:name |,对吗?或者这会破坏其他东西吗?仅供参考,您正在尝试的通常被称为非保留关键字。