Antlr4 ANTLR匹配错误的令牌

Antlr4 ANTLR匹配错误的令牌,antlr4,Antlr4,mytest.g4 lexer grammar mytest; fragment HEX: '0' [xX] [0-9a-fA-F]+; fragment INT: [0-9]+; fragment WS: [\t ]+; fragment NL: WS? ('\r'* '\n')+; INFO: 'InfoFromDb' -> mode(INFO_MODE); ID: 'ID from database' -> mode(ID_MODE); mode INFO_MODE; I

mytest.g4

lexer grammar mytest;

fragment HEX: '0' [xX] [0-9a-fA-F]+;
fragment INT: [0-9]+;
fragment WS: [\t ]+;
fragment NL: WS? ('\r'* '\n')+;

INFO: 'InfoFromDb' -> mode(INFO_MODE);
ID: 'ID from database' -> mode(ID_MODE);

mode INFO_MODE;
INFO_INTERMEDIATE: ':' WS*;// -> channel(HIDDEN);
//INFO_DATA: ~[\r\n]+; //(~('\r' | '\n'))+;
INFO_DATA: HEX ',' WS* [A-Za-z]+ WS* INT; //line 24:13 token recognition error at: '0xF8, F'
INFO_END: NL -> mode(DEFAULT_MODE);

mode ID_MODE;
ID_INTERMEDIATE: ':' WS* -> channel(HIDDEN);
ID_DATA: ~[\r\n]+;
// let's throw away the next token, but also use it to exit this mode
ID_END: NL -> skip, pushMode(DEFAULT_MODE);
第g4部分

parser grammar pars;
options {
  tokenVocab=mytest;
}

the_id: ID ID_DATA;
info: INFO INFO_INTERMEDIATE INFO_DATA INFO_END;
输入

当我用输入测试解析器规则
时,\u id
。。。它将生成以下内容的解析树:

  • InfoFromDb
  • 0xF8,FooData 3
  • \n
  • 来自数据库的ID
这毫无意义

同样难以理解的是,
info
解析器规则产生:

  • InfoFromDb
  • :0xF8,FooData 3
  • \n

这是怎么回事?lexer规则是可选的并且被忽略了吗?我是否误用了
模式
内容?

第二行是来自数据库的
ID:0x3,Blah ID:0,Meta ID:0,MetaB:1
。。。它以
ID
开头,当然还有
InfoFromDb
!=<代码>数据库中的ID那么为什么会匹配?@BartKiers抱歉,它仍然不匹配sense@BartKiers你的答案和我对它的评论被删除了。。。我没有删除它
InfoFromDb: 0xF8, FooData 3
ID from database: 0x3, Blah ID: 0, Meta ID: 0, MetaB: 1