2010-10-31 109 views
0

我是yacc/lex的新手,我正在研究其他人編寫的解析器。我注意到,當找到一個未定義的標記時,解析器返回一個錯誤並停止。有沒有一種簡單的方法可以讓它完全忽略它無法解析的線條,而只是轉向下一個線條呢?忽略yacc/lex中的錯誤

回答

1

只需添加一個規則,看起來像

. { 
    // do nothing 
} 

在所有規則的底部,它會忽略它涉及跨一切不符合任何以前的規則。

編輯:如果您有多個狀態,那麼一個包羅萬象的,在任何狀態下工作會那麼看起來像:

<*>. { 

} 
+0

謝謝,但我仍然不能完全肯定這個地方應該去 - 我試着把它放在我的lex和parser文件中 - 當我試圖把它放在lex文件中時,yacc返回了一個錯誤,它只是沒有做任何事情。你能詳細說明一下嗎?謝謝。 – Udi 2010-10-31 16:34:50

+0

它只是低於你有的任何其他規則;例如,如果你只有兩個令牌可以識別,並且你想忽略其他所有的東西,那麼你會有兩條規則,然後把所有的東西放在同一個塊中,但只要確保它低於其他規則,因此它具有最低優先級。 – AwesomeJosh 2010-10-31 17:34:13

+0

期間只匹配任何單個字符,並且如果代碼塊爲空,它將只匹配與其他規則不匹配的所有內容,然後執行代碼塊中的內容(即沒有任何內容)。 – AwesomeJosh 2010-10-31 17:36:17