Java 无法使用"&引用;antlr4中的as分离器
我正在编写一个解析器来解析字符串,如Java 无法使用"&引用;antlr4中的as分离器,java,antlr4,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)*;
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\u ID
lexer def时,该属性可以解析为:
attrGroup: aaa
attrKey: bbb
如果我加回VALUE\u ID
def,它会给出错误:
属性:1:0:不匹配输入'aaa.bb'应为属性ID 注意:如果输入字符串为:
aaa>bbb=”则该选项有效ccc@ddd.com“
我犯了什么错误吗 我建议对ValueID使用解析器规则。这将允许lexer匹配ATTR_ID,但随后确定令牌应形成一个value_ID
DECIMAL : '-'?[0-9]+('.'[0-9]+)? ;
DOT : [\-\_\.\@\>]+ ;
ATTR_ID : [a-zA-Z0-9]+;
value_id: ATTR_ID+ (DOT? ATTR_ID)*;