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'|'_')*
;
答案 0 :(得分:2)
您希望语法如何解析CONTAINS foo bar baz
?
contains_expr
匹配CONTAINS
。
contains_expression
“致电”primary
。
primary
“致电”class_expression
。
class_expression
“致电”simple_class_expr
。
simple_class_expr
可以匹配:identifier
或identifier identifier
。
因此,我可以在这里看到几种可能的解析;我将个别simple_class_expr
匹配放入括号中:
CONTAINS (foo bar) (baz)
CONTAINS (foo) (bar) (baz)
CONTAINS (foo) (bar baz)
我很遗憾地说我已经足够新解析工具而没有建议如何修复除了想知道identifier identifier
可能意味着什么