我對ANTLR和EBNF語法是完全陌生的,因此這可能是我根本不理解的一個基本問題。簡單語法上的ANTLR MismatchedTokenException
我有一個規則,如:
version_line : WS? 'VERS' WS? '=' WS? '1.0' WS? EOL ;
WS : ' '+ ;
EOL : '\r' | '\n' | '\r\n' | '\n\r' ;
符合我的輸入文件中的聲明看起來像這樣(帶有可選的空格):
VERSION = 1.0
與規則的形式上面,我我得到一個成功的比賽,雖然我得到這種形式的例外:
version_line : WS? 'VERS' WS? '=' WS? '1' '.0' WS? EOL ;
or this form:
version_line : WS? 'VERS' WS? '=' WS? DIGIT '.0' WS? EOL ;
DIGIT : '1' ;
這是爲什麼不同?我發現試圖更加分解規則時這個問題,希望有這樣的事情結束了:
version_line : WS? 'VERS' WS? '=' WS? DIGIT '.' DIGIT WS? EOL ;
DIGIT : '0'..'9' ;
嗯,你說得對。這必須是文件中其他地方衝突的問題。但是,您給了我一個關於如何調試的好主意(儘管從一條規則開始,然後慢慢展開)。 – jjkparker 2010-03-09 21:25:46
@jjkparker,是的,我也是這麼做的:寫一些規則,測試它。寫更多的規則,測試它等。 – 2010-03-09 21:34:12