我希望我的语法识别以下表达式&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]
和[
]
时,它才有效
答案 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]
现在解析得很好。