我已經設置了一個可以通過yyparse運行和解析並且可以在repl類型系統內使用的flex/bison系統。當用戶進入某種狀態(說:定義一個方法),並且發生了一個systax錯誤時,我正在尋找一種方式來處理這種情況,野牛可以像用戶從未進入線路。手動保存並恢復解析器狀態
例如:
1> class foo { <enter>
2> a = 1; <enter>
3> asfasdfa <enter>
在這種情況下,解析器應該返回到之前閱讀的最後一行是狀態。現在,它會觸發一個語法錯誤並倒回整個堆棧。我知道bisons yyparse()函數有一些本地堆棧狀態值(yyvsp,yyssp和yylsp),用於狀態跟蹤,但似乎沒有辦法修改這些標準功能以外的內容,如YYERROR等。
我的問題是:是否可以在野牛中完成這些保存/恢復狀態,如果不能,處理這些錯誤的最佳方法是什麼?
我不是100%確定,如果正確的方式來實現repl是我建議的方式。例如,我只能檢測從用戶行開始直到錯誤的狀態。但是如果有一個yystate_copy()接口,那麼線上的其他規則實際上可能成功(例如:「i = 1; b =;」) – JayTaph