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_expr
与 CONTAINS
匹配。
contains_expression
“调用”primary
。
primary
“调用”class_expression
。
class_expression
“调用”simple_class_expr
。
simple_class_expr
可以匹配:identifier
或 identifier 标识符
。
因此我可以在这里看到几种可能的解析;我已将各个 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/