【问题标题】:antlr4 - conflicting rules, how to fixantlr4 - 冲突的规则,如何解决
【发布时间】:2014-11-01 17:50:03
【问题描述】:

我有以下规则:

property   : NAME;
value      : STRING | NUMBER;

NUMBER     : ('0'..'9')+;
NAME       : ('a'..'z' | 'A'..'Z' | '0'..'9' | '-' | '_')+;
STRING     : '"' (~'"')* '"';

当一个属性是一个数字时,ANTLR 说:

line 1:14 mismatched input '5' expecting NAME

我明白为什么会这样。 NUMBER 规则在 NAME 规则之前提到,因此它具有优先权。该号码由NUMBER 规则识别。

在 ANTLR 中处理此问题的常用方法是什么?我可以重写property 规则如下,但我真的不知道这是否是一个好主意,因为我正在引入冗余。

property   : NAME | NUMBER;

重新排序NUMBERNAME 也不是一个好主意,因为它会破坏value 数字规则(同样的问题)。

重要提示:我对 ANTLR 还很陌生,仍在学习中。

【问题讨论】:

    标签: antlr antlr4


    【解决方案1】:

    是的,property : NAME | NUMBER; 就是这样做的方法。

    【讨论】:

    • 谢谢!我必须习惯定义冗余右侧(NUMBERNAME 的子集)是首选。
    猜你喜欢
    • 2015-09-08
    • 2017-06-08
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    相关资源
    最近更新 更多