2017-06-15 30 views
-1

我想讓我的語法識別下列表達式&COL[0]。我已經建立了以下語法:只識別antlr4語法中的一個標記

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][]

+0

什麼?請編輯這個以清楚說明實際問題。我很不清楚你在找什麼。 –

+0

如果我的回答對你有幫助,請「接受」它,以便它也可以幫助別人。 – TomServo

回答

2

我改變了語法有點之間的空間工作使其完成足夠的運行。文本&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]現在解析得很好。