我有标识符词法规则:
Identifier
: ( 'a'..'z' | 'A'..'Z' | '_' ) ( 'a'..'z' | 'A'..'Z' | '_' | '0'..'9' )*
;
LogicalOr和LogicalAnd规则:
LogicalOr : '| ' | '||' | OR;
LogicalAnd : '&' | '&&' | AND;
fragment Or : '[Oo][Rr]';
fragment And : '[Aa][Nn][Dd]';
字符串"和"和"或"被识别为标识符,而不是logicalAnd和logicalOr。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
有两个潜在的问题在起作用。首先,ANTLR 3不支持ANTLR 4引入的字符类语法。您的Or
片段字面上匹配输入[Oo][Rr]
;它与OR
,or
或oR
不匹配。这同样适用于您的And
片段。你需要写这样的规则:
fragment
Or
: ('O' | 'o') ('R' | 'r')
;
如果这不能解决您的问题,那么您需要确保LogicalOr
和LogicalAnd
规则位于语法中的Identifier
规则之前。首先出现的规则将确定为此输入序列分配的令牌类型。