簡體   English   中英

byacc/j 和 jflex 中的錯誤恢復使用 yacc 中的錯誤標記

[英]error recovery in byacc/j and jflex using error token like in yacc

我正在使用 byacc/j 和 jflex 為一種小型語言編寫編譯器。 我在給定的輸入文件中找到第一個錯誤沒有問題。 問題是我找不到更多錯誤。 首先,我曾經使用 yacc 和 lex,我在一些內置於 yacc 的語法規則的末尾使用了特殊符號“錯誤”標記,我可以使用“yyerrok”來簡單地繼續解析並找到更多錯誤,但是在 byacc/ji找不到類似的東西,yyerrok 不起作用,byacc/j 不承認這一點。 有什么建議可以在 byacc/j 中找到多個錯誤? 或者 byacc/j 中是否有“錯誤”和“yyerrok”?

yyerrok唯一做的就是重置自上次錯誤通知以來的令牌計數。 Yacc 解析器在錯誤恢復后抑制前三個標記中的錯誤消息,以防止級聯錯誤消息。

使用yyerrok -- 或將yyerrflag設置為 0 -- 表示錯誤恢復成功並且現在應該生成錯誤消息。 它沒有任何其他效果:無論有沒有yyerrok ,解析都將繼續。

yyerrok是一個 C 宏,而 Java 沒有宏。 所以顯然它是從 Java 接口中刪除的。 但是yyerrflag作為解析器 class 成員存在,您應該能夠在解析器操作中將其設置為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM