0
我是yacc/lex的新手,我正在研究其他人編寫的解析器。我注意到,當找到一個未定義的標記時,解析器返回一個錯誤並停止。有沒有一種簡單的方法可以讓它完全忽略它無法解析的線條,而只是轉向下一個線條呢?忽略yacc/lex中的錯誤
我是yacc/lex的新手,我正在研究其他人編寫的解析器。我注意到,當找到一個未定義的標記時,解析器返回一個錯誤並停止。有沒有一種簡單的方法可以讓它完全忽略它無法解析的線條,而只是轉向下一個線條呢?忽略yacc/lex中的錯誤
只需添加一個規則,看起來像
. {
// do nothing
}
在所有規則的底部,它會忽略它涉及跨一切不符合任何以前的規則。
編輯:如果您有多個狀態,那麼一個包羅萬象的,在任何狀態下工作會那麼看起來像:
<*>. {
}
謝謝,但我仍然不能完全肯定這個地方應該去 - 我試着把它放在我的lex和parser文件中 - 當我試圖把它放在lex文件中時,yacc返回了一個錯誤,它只是沒有做任何事情。你能詳細說明一下嗎?謝謝。 – Udi 2010-10-31 16:34:50
它只是低於你有的任何其他規則;例如,如果你只有兩個令牌可以識別,並且你想忽略其他所有的東西,那麼你會有兩條規則,然後把所有的東西放在同一個塊中,但只要確保它低於其他規則,因此它具有最低優先級。 – AwesomeJosh 2010-10-31 17:34:13
期間只匹配任何單個字符,並且如果代碼塊爲空,它將只匹配與其他規則不匹配的所有內容,然後執行代碼塊中的內容(即沒有任何內容)。 – AwesomeJosh 2010-10-31 17:36:17