我最近开始研究野牛解析器,
以下是解析器文件的一部分,该文件将在循环中执行。
Program: Start statement Stop
{
...
...
...
}
如果发生语法错误,如何跳过当前案例的执行
在声明部分?并再次使用循环继续执行?
Program: Start statement Stop
{
I want to skip execution of this part ..if any syntax error occurs in
any of the rule section ( Start, statement and Stop)
}
我尝试添加如下所示的错误规则,但无法正常工作。
Program: Start statement Stop
{
....
...
...
}
| Program error Stop (// skip until Stop)
{
yyerrok;
}
在这种情况下处理语法错误的正确方法是什么?并继续解析?
这里需要帮助。
最佳答案
我不确定我是否真的了解您的需求,但是类似以下的内容应该可以工作:
test_cases : %empty
| test_cases test_case
test_case : START statements STOP
| error STOP { yyerrok; }
那不是很复杂。特别是,如果
START
和STOP
之间存在 token ,并且对丢失的STOP
token 的处理欠佳,将产生不幸的后果。 (理想的解决方案是也重新同步START
token ,但随后您必须安排扫描仪再次发送START
token ,这很丑陋。)
关于parsing - Bison语法错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51739556/