parsing - Bison语法错误处理

标签 parsing syntax-error 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之间存在 token ,并且对丢失的STOP token 的处理欠佳,将产生不幸的后果。 (理想的解决方案是也重新同步START token ,但随后您必须安排扫描仪再次发送START token ,这很丑陋。)

关于parsing - Bison语法错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51739556/

相关文章:

java - 如何递归解析带有嵌套括号的逗号分隔字符串

c++ - 忽略使用 'warn_unused_result' 属性声明的函数的返回值

c - #line 指令和实际用法

c++ - Windows 上的 LALR(1) 或 GLR - 当前的 Bison++/Flex++ 替代品?

c++ - Bison 解析器无法识别 "New"关键字

java - 使用 java 对表达式进行标记

Java HTML解析NullpointerException

parsing - Elasticsearch无法使用自定义格式解析日期

python - Python : Making a Magic 8 Ball game, why do i keep getting syntax errors? Here's the code, test it if you want

php - 检查是否安装了memcached?