我正在编写一个解析器来解析像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"
我犯了什么错误吗?
答案 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)*;