java - ANTLR 语法中的歧义

标签 java antlr grammar

AntlrWorks 表示输入 {'AND','OR'..'XOR'} 可以通过两个替代项进行匹配。即使有图形显示,我也无法弄清楚比赛是如何发生的! 下面的语法到底是如何出现歧义的,有没有办法消除它?

grammar testg;

rul :  contains_expr    ;

contains_expr: 'CONTAINS' contains_expression
                  //'CONTAINS' contains_or
        ;

contains_expression :  primary  (('OR'|'AND'|'XOR') primary)*
       ;

primary options{backtrack = true;}
 : '(' contains_expression ')'
 | class_expression
 ;


class_expression :   simple_class_expr 
           | '(' simple_class_expr contains_expr ')'
           |( simple_class_expr contains_expr) 
        ;

simple_class_expr: identifier               // RM_TYPE_NAME
               | identifier identifier      // RM_TYPE_NAME variable
               | archetype_class_expr
         | versioned_class_expression
         | version_class_expression 
         // | identified_obj_expression     // need to be used once VersionedClassExpr is removed
        ;

identifier
    :   ID
    ;

archetype_class_expr
    :   '.ace'
    ;

versioned_class_expression
    :   '.vce'
    ;

version_class_expression
    :   '.vnce'
    ;

temp    :   
        ;


ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

最佳答案

您希望您的语法如何解析CONTAINS foo bar baz

contains_exprCONTAINS 匹配。

contains_expression“调用”primary

primary“调用”class_expression

class_expression“调用”simple_class_expr

simple_class_expr 可以匹配:identifieridentifier 标识符

因此我可以在这里看到几种可能的解析;我已将各个 simple_class_expr 匹配放入括号中:

CONTAINS (foo bar) (baz)
CONTAINS (foo) (bar) (baz)
CONTAINS (foo) (bar baz)

很抱歉,我对解析工具还很陌生,除了想知道 identifier 标识符 可能意味着什么之外,没有关于如何修复这个问题的建议。 。

关于java - ANTLR 语法中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8766388/

相关文章:

java - 这个简单程序的运行时间——时间复杂度

java - 像语法、设计模式一样解析 SQL

java - 如何为 NetBeans 创建自定义语言解析器?

yacc 中的 Lisp 语法

java - 毫秒的数据类型

java - 选择枚举类型时好的方法设计?

python - 具有相同标签的多个备选方案,只有最后一个获得分配给它的任何东西

parsing - 用于先计算和后计算的工具/应用程序

c++ - 如何解释 C++ 语法中的 decl-specifier

java - java中如何导入文件