2012-12-06 50 views
0

假設我想將錯誤恢復生成添加到我的語法中 - 我知道它是什麼,我看到了一些例子。YACC/Bison錯誤恢復產品的要求/限制是什麼?

但是我沒有發現任何更正式的東西,例如這樣的生產應該是什麼樣的,什麼是可能的,什麼是禁止的?

Bison error recovery documentation

現在我只能通過試驗&錯誤檢查,如果這樣的作品是有效的:

A := error B 
B := num 

A := (error ; error) 

當然審判&錯誤是無效的,所以我想閱讀錯誤恢復製作的規則。

回答

1

您指向的文檔很舊,「真實」的文檔在這裏:http://www.gnu.org/software/bison/manual/html_node/Error-Recovery.html。但這些問題上的差異很小。

我不認爲你會發現更多關於這個話題。除了提供示例的文檔部分:http://www.gnu.org/software/bison/manual/html_node/Simple-Error-Recovery.html

唯一要記住的是,對於Bison來說,找到何時停止彈出堆棧以及何時停止放棄輸入應該是「不太難」。有一個「終結者」,如「;」對於某些規則或者大括號(在你的例子中是「(」和「)」)通常是最好的選擇。否則,你可能會引入新的衝突。

HTH。