java - Antlr4:防止规则和 token 冲突

标签 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: ( ' ' | '\t' | '\r' | '\n' )+ -> skip;

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

最佳答案

要消除冲突并保留预期的 token 类型:

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

关于java - Antlr4:防止规则和 token 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48286505/

相关文章:

c# - 当我尝试使用 ANTLR4 生成 C# 时出现的这些奇怪错误是什么?

java - 使用 dex2jar 将 .dex 文件转换为 .jar 文件

java - 如何生成 CIDOC CRM 格式的 RDF 文件

antlr - 使用 ANTLR 解析字母范围

java - ANTLR 不会在无效输入上抛出错误

java - 如何修复与语义谓词一起使用的左递归中的错误?

java - 使用 Java 使用 Selenium WebDriver 捕获浏览器日志

java - 在输入中包含条件

java - 如何在 ANTLR 3 树解析器中表达多个节点

compiler-construction - 使用 Antlr 创建语言