antlr4中带引号字符串正则表达式的问题



我想解析像"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。只要改变一下顺序就行了

相关内容

  • 没有找到相关文章

最新更新