Bison 语法错误处理

Bison syntax error handling

我最近开始研究 bison 解析器, 下面是解析器文件的一部分,将在循环中执行。

      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; }

这不是很复杂;特别是,如果在 STARTSTOP 之间有令牌,并且对丢失的 STOP 令牌的处理不是最优的,将会产生不幸的后果。 (理想的解决方案是在 START 令牌上也重新同步,但是你必须安排扫描器再次发送 START 令牌,这很丑陋。)