我真正的語法比較複雜,但我可以去掉我的問題。因此,這是語法:ANTLR AST語法問題不匹配令牌例外
grammar test2;
options {language=CSharp3;}
@parser::namespace { Test.Parser }
@lexer::namespace { Test.Parser }
start : 'VERSION' INT INT project;
project : START 'project' NAME TEXT END 'project';
START: '/begin';
END: '/end';
WS : (' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
INT : '0'..'9'+;
NAME: ('a'..'z' | 'A'..'Z')+;
TEXT : '"' ('\\' (.) |'"''"' |~('\\' | '"' | '\n' | '\r'))* '"';
STARTA
: '/begin hello';
我要分析此(例如):
VERSION 1 1
/begin project
testproject "description goes here"
/end
project
現在,它不會像這樣(不匹配的令牌除外)工作。如果我刪除了最後一個Token STARTA,它就可以工作。但爲什麼?我不明白。
幫助真的很感激。 謝謝。
你知道Antlr4是否會解決這個問題?否則,我將不得不重新思考我的語法不好的大部分。 – metacircle
@metacircle,不,我不知道。但是如果真的這樣,在穩定的v4發佈之前(AFAIK)可能還需要一段時間。 –
@metacircle,但是將多個id「合併」成一個單獨的標記通常是一個糟糕的主意:這樣的事情通常應該更好地在解析器規則中處理。 –