我已经设置了一个 flex/bison 系统,它可以通过 yyparse 运行和解析,并且能够在 repl 类型的系统中使用。当用户进入某个状态(例如:定义一个方法),并且出现系统税错误时,我正在寻找一种方法来处理这个问题,该野牛可以像用户从未进入过线。
例如:
1> class foo { <enter>
2> a = 1; <enter>
3> asfasdfa <enter>
在这种情况下,解析器应该返回到读取最后一行之前的状态。现在,它将触发语法错误并倒回整个堆栈。
我知道野牛 yyparse() 函数有一些用于状态跟踪的本地堆栈状态值(yyvsp、yyssp 和 yylsp),但似乎没有办法在 YYERROR 等标准功能之外修改这些值。
我的问题是:在野牛中是否可以远程执行这些保存/恢复状态,如果没有,处理此类错误的最佳方法是什么。