当前位置: 首页 > 知识库问答 >
问题:

ANTLR4缺少规则定义

郎河
2023-03-14
Identifier: Letter (Letter | Digit | Und)+;
Keyword   : Letter+;
Param: Number | Identifier;
Statement: Keyword Lpr Param+ Rpr;
Block: Lbc Statement+ Rbc;
fragment Digit: '0'..'9';
fragment Letter: ('A'..'Z');
Und: '_';
Lpr: '(';
Rpr: ')';

共有1个答案

邢皓
2023-03-14

ANTLR只(真正)使用明确的语法。允许某些左递归,谓词和lexer模式可以用来处理/避免歧义。

但是,ANTLR将允许具有可能相同结果的多个定义

它总是通过选择第一个这样的冲突规则来做到这一点。剩下的相互冲突的规则被隐藏起来,这意味着从所有实际目的来看,它们都不存在。几乎可以肯定,一个非常不受欢迎的结果。

 类似资料:
  • 我的语法允许以下操作: 我从其他语法中抓了几个东西来玩。我的主要问题是我的expr规则。给定以下输入:,我期望解析树会找到..规则,但它将解释0。并不正确解析其余部分。 如果在我的0后面加上一个空格,就可以了: 谢了!

  • null null 以下是我的(不完整和不成功的)尝试: 如果不能在lexer中解决这个问题,我可以使用标记、、、、、和自行编写解析器规则。

  • 我刚刚开始学习ANTLR4 lexer规则。我的目标是为Java属性文件创建一个简单的语法。以下是我目前掌握的信息:

  • 我正在构建一个ANTLR4语法来解析数据源中的字符串--类似于StringTemplate(如果不是非常相似的话),只是我不喜欢这种语法,所以我正在编写自己的语法(也只是为了好玩和学习,因为这是我第一次使用/ANTLR)。我的语法现在看起来像这样(这是从我的实际情况中简化出来的,但我已经验证了它是一个“好例子”,并且展示了我所问的相同的问题): 这个语法工作得很好,允许我执行替换,例如: 结果是:

  • 我刚刚切换到使用Xcode 5。我去更改了我的应用程序的名称和一些我需要更改的其他设置,但是当我这样做时,我注意到我的“常规”选项卡丢失了。有人知道为什么会发生这种事吗?

  • 我正在尝试为maven设置enforcer插件,以强制执行最低Java版本。但是,每当我尝试运行,我都会得到: 目标组织的参数“规则”。阿帕奇。专家插件:maven enforcer插件:1.3.1:enforce缺失或无效 以下是我的pom文件的相关部分: 我还尝试替换