只识别antlr4语法中的一个标记

时间:2017-06-15 19:21:17

标签: java antlr antlr4

我希望我的语法识别以下表达式&COL[0]。我已经构建了以下语法:

array:  
ARRAY_NAME L_RIGHT_PAR (ARRAY_DIGIT|STRING) R_RIGHT_PAR;

ARRAY_DIGIT:DIGIT+; 

ARRAY_NAME: '&''COL';

STRING  : QUOT ('\\"' | ~'"')* QUOT
    ;
L_RIGHT_PAR : '[' ;
R_RIGHT_PAR : ']' ;

fragment
DIGIT : '0'..'9' ;

这给出了错误:

  

不匹配的输入'[1]'期待'['

仅当我在&COL[ 0][

之间添加空格]时,它才有效

1 个答案:

答案 0 :(得分:3)

我稍微改变了语法,使其足以完成运行。文本&COL[0]使用这种修正后的语法很好。

grammar test1;  // different name for my test rig
test1: ARRAY_NAME L_RIGHT_PAR (ARRAY_DIGIT|STRING) R_RIGHT_PAR;
ARRAY_DIGIT:DIGIT+; 
ARRAY_NAME: '&''COL';
STRING  : QUOT ('\\"' | ~'"')* QUOT
    ;
QUOT: '"'; // assumed this
L_RIGHT_PAR : '[' ;
R_RIGHT_PAR : ']' ;
fragment
DIGIT : '0'..'9' ;
WS : [ \t\r\n] -> skip;  // added whitespace just so I could add \r\n

这是标记化的输出:

[@0,0:3='&COL',<ARRAY_NAME>,1:0]
[@1,4:4='[',<'['>,1:4]
[@2,5:5='0',<ARRAY_DIGIT>,1:5]
[@3,6:6=']',<']'>,1:6]
[@4,9:8='<EOF>',<EOF>,2:0]

所以这回答了你问的问题,但我仍然不确定你对STRING的定义。但&COL[0]现在解析得很好。