ANTLR的一個常見誤區(qū)

剛剛解決了一個問題,在 StackOverFlow 上的提問被標注為重復,有人給了一個答案:antlr4 - ANTLR 4.5 - Mismatched Input 'x' expecting 'x' - Stack Overflow

來總結(jié)記錄一下。

ANTLR 生成的 lexer 和 parser 是幾乎獨立工作的,parser 無法影響 lexer 的行為(這里不考慮內(nèi)嵌動作和 setmode 之類)。

因此 ANTLR 生成的 lexer 將簡單的按照最長匹配的原則,如果兩條詞法規(guī)則都可以最長匹配,那么按照在 grammar 文件中出現(xiàn)的順序匹配。

所以如果一條詞法規(guī)則是另一條詞法規(guī)則的子集,應盡量放到前面,如果這不能解決問題(或者引入可其他問題),那就只能另尋方案了,通??梢允褂脙?nèi)嵌動作的辦法解決。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容