我有标识词词法规则:
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。有人能帮我解决这个问题吗?
发布于 2014-09-08 19:28:53
有两个潜在的问题在发挥作用。首先,ANTLR 3不支持ANTLR 4引入的字符类语法。您的Or片段实际上与输入[Oo][Rr]匹配;它不匹配OR、or或oR。这同样适用于您的And片段。您需要这样写规则:
fragment
Or
: ('O' | 'o') ('R' | 'r')
;如果这不能解决您的问题,则需要确保您的LogicalOr和LogicalAnd规则位于语法中的Identifier规则之前。首先出现的规则将确定为此输入序列分配了何种令牌类型。
https://stackoverflow.com/questions/25731642
复制相似问题