不能使用"。"作为antlr4中的分隔符

时间:2015-06-23 10:12:22

标签: java antlr4

我正在编写一个解析器来解析像aaa.bb = "ccc@ddd.com"

这样的字符串

antlr4语法文件如下:

    DOT : [\-\_\.\@\>]+ ; 
    fragment CHAR: [a-zA-Z_0-9];
    fragment CHAR2:[\-\_\.\@];
    DECIMAL : '-'?[0-9]+('.'[0-9]+)? ;
    ATTR_ID : CHAR+;
    VALUE_ID: ATTR_ID+ (CHAR2? ATTR_ID)*;
    attribute
    :
    (attrGroup DOT attrKey) | attrKey;
    value :  DECIMAL | VALUE_ID | DATE;

现在的问题是,当我删除VALUE_ID lexer def时,该属性可以解析为:

attrGroup: aaa
attrKey: bbb

如果我添加VALUE_ID def,则会给出错误:

  

属性:1:0:不匹配
  输入' aaa.bb'期待ATTR_ID

注意:如果输入字符串为:aaa>bbb = "ccc@ddd.com"

,则它有效

我犯了什么错误吗?

1 个答案:

答案 0 :(得分:0)

我建议对ValueID使用Parser规则。这将允许词法分析器匹配ATTR_ID,但随后确定标记应形成value_id

DECIMAL : '-'?[0-9]+('.'[0-9]+)? ;
DOT : [\-\_\.\@\>]+ ;
ATTR_ID : [a-zA-Z0-9]+;


value_id: ATTR_ID+ (DOT? ATTR_ID)*;