片段 EXEC:( 'E' 'X' 'E' 'C');詞法規則終止而不匹配終止符號
片段 CMD:( 'C' 'M' 'D');
片段 BEGIN:( 'B' 'E' 'G' 'I' 'N');
片段 END:( 'E' 'N' 'd');
片段 SEMICOLON: ';';
ExecCommand: EXEC Whitespace CMD Whitespace BEGIN WhiteSpace? SEMICOLON (options {greedy = false;}:。)* END Whitespace EXEC;
開始:BEGIN;
END:END;
Exec的:EXEC;
,將execCommand規則終止於第一個「E」分號之後的掃描,然後失敗,如果下一個字符不是「END」。掃描只能在'END'結束,而不是'ELSE'或任何其他以'E'開頭的字符串。
掃描循環具有用於_LA(1)== 'E' 而不是匹配( 'END')進行測試。
Exec時,開始和結束,也象徵規則。 ExecCommand規則是詞法分析器語法中的第一條規則,因此它應該具有優先權。
如何生成的規則,將接受的開始和結束的符號之間的任意文本,而不是終止,直到結束符號被發現的?
我嘗試以下,並沒有成功地產生: 的execCommand: EXEC空白CMD空白 BEGIN空白符? SEMICOLON (options {greedy = false;}:〜(END WHITEpace EXEC))* END WHITEpace EXEC;