只识别 antlr4 语法中的一个标记
Only recognizing one token in antlr4 grammar
我希望我的语法能够识别以下表达式 &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' ;
这给出了错误:
mismatched input '[1]' expecting '['
只有当我在 [
和 ]
之间用空格写 &COL[ 0]
时才有效
我稍微更改了语法以使其足够完整 运行。文本 &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]
现在解析得很好。
我希望我的语法能够识别以下表达式 &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' ;
这给出了错误:
mismatched input '[1]' expecting '['
只有当我在 [
和 ]
&COL[ 0]
时才有效
我稍微更改了语法以使其足够完整 运行。文本 &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]
现在解析得很好。