0
我的完整語法導致了可怕的「沒有可行的替代方案」的化身,但無論如何,也許解決我看到的這個修剪版本的問題可以幫助我理解發生了什麼。令牌識別順序
grammar NOVIA;
WS : [ \t\r\n]+ -> skip ; // whitespace rule -> toss it out
T_INITIALIZE : 'INITIALIZE' ;
T_REPLACING : 'REPLACING' ;
T_ALPHABETIC : 'ALPHABETIC' ;
T_ALPHANUMERIC : 'ALPHANUMERIC' ;
T_BY : 'BY' ;
IdWord : IdLetter IdSeparatorAndLetter* ;
IdLetter : [a-zA-Z0-9];
IdSeparatorAndLetter : ([\-]* [_]* [A-Za-z0-9]+);
FigurativeConstant :
'ZEROES' | 'ZERO' | 'SPACES' | 'SPACE'
;
statement : initStatement ;
initStatement : T_INITIALIZE identifier+ T_REPLACING (T_ALPHABETIC | T_ALPHANUMERIC) T_BY (literal | identifier) ;
literal : FigurativeConstant ;
identifier : IdWord ;
和下面的輸入
INITIALIZE ABC REPLACING ALPHANUMERIC BY SPACES
結果
(statement (initStatement INITIALIZE (identifier ABC) REPLACING ALPHANUMERIC BY (identifier SPACES)))
我本來期望看到空間被認定爲 「文字」,而不是 「標識符」。
任何和所有的指針大爲讚賞,
TIA - 亞歷
謝謝 - 我現在覺得很愚蠢嗎?冒着積極的猜測,你不會錯的。 在我瘋狂的嘗試重現NoViableAlt問題時,我只是沒有對它的風格給予足夠的關注,對不起'布特那。 我只交換了「文字」和「標識符」規則,但不是詞法分析規則。 我會試圖將這個歸因於我昨天的溫度爲35°C的油炸腦袋cos,我們昨天有過 ,並希望我能逃脫它;-) 所以回到繪圖板,因爲這沒有(和不能)用完整的語法解決我的NoViableAlt。 –