在編譯器的詞法分析階段,如果遇到錯誤的標記,詞法分析器將進入錯誤恢復模式,假設它放棄標記,直到看到下一個分號並再次開始分析。那麼生成的整個令牌傳遞給解析器?如果詞法分析器可以將不良標記傳遞給解析器?
我的意思是說,如果詞法分析器遇到錯誤,那麼編譯停止在這一點,或者它繼續並進入解析階段?
在編譯器的詞法分析階段,如果遇到錯誤的標記,詞法分析器將進入錯誤恢復模式,假設它放棄標記,直到看到下一個分號並再次開始分析。那麼生成的整個令牌傳遞給解析器?如果詞法分析器可以將不良標記傳遞給解析器?
我的意思是說,如果詞法分析器遇到錯誤,那麼編譯停止在這一點,或者它繼續並進入解析階段?
期間,如果不好的令牌遇到那麼詞法分析器將進入故障恢復模式,假設說編譯器的詞法分析階段,它丟棄,直到下一個分號看到令牌並重新開始對其進行分析。
這只是一種方式,而不是最好的。
然後生成的整體令牌傳遞給解析器?
不,只有下一個合法的令牌。
我的意思是說,如果詞法分析器遇到錯誤,那麼編譯在這一點停止,否則它會繼續並進入解析階段?
它繼續。
但幾十年來,我一直在練習相反。而不是讓詞法分析器嘗試自己的錯誤恢復,我只是將違規的字符返回給解析器。由於解析器通常具有更好的錯誤恢復能力,因此會導致更多的容錯解析。
樣品法/柔性實現:
. return yytext[0];
其他語言如何做到這一點。你也可以告訴我,在編譯期間我們看到的錯誤是他們在編譯的每個階段中檢測到的錯誤的錯誤混合,還是隻是編譯階段的錯誤? – user1313623
它與語言無關。它是詞法分析器/解析器對的一個屬性。我也不明白你的新問題。 – EJP
好吧,我從你的回答中得到了我想問的問題。忽略我的新問題。你的回答清除了我的懷疑。非常感謝 – user1313623
這取決於你所使用的解析器/詞法和配置。是否有你想知道的具體解析器/詞法分析器組合? – CoronA