我想解析像"TOM*", "TOM", "*TOM", "TOM", "*"和所有这些没有引号的字符串。我创建了2条规则name_with_quotes &不带引号的名称,但带引号的字符串给出预期的标记:
我在lexer中有以下标记。g4文件
ID : [a-zA-Z0-9-_]+ ;
WILDCARD_STARTS_WITH_STRING: ID'*';
WILDCARD_ENDS_WITH_STRING: '*'ID;
WILDCARD_CONTAINS_STRING : '*'ID'*' ;
STRING : ('"' | ''') ( ( (~('"' | '\' | 'r' | 'n') | '\'('"' ) )*) | ) ('"' | ''');
QUOTED_ID : ('"' | ''') (((STAR)? ID (STAR)?) | ID | STAR) ('"' | ''');
在我的解析器文件中有以下规则:
name_without_quotes : ID | WILDCARD_STARTS_WITH_STRING | WILDCARD_ENDS_WITH_STRING | WILDCARD_CONTAINS_STRING | STAR ;
name_with_quotes : QUOTED_ID;
name : name_with_quotes | name_without_quotes;
我还尝试使用以下规则:
WITHOUT_QUOTES : '"' (ID | ID'*' | '*'ID | '*'ID'*' ) '"';
WITH_QUOTES : ID | WILDCARD_STARTS_WITH_STRING | WILDCARD_ENDS_WITH_STRING | WILDCARD_CONTAINS_STRING | STAR ;
但是运气不好。知道我哪里做错了吗?多谢。
找到解决方案了。http://www.antlr3.org/pipermail/antlr-interest/2012-March/044273.html。只要改变一下顺序就行了