疑惑,关于bison语法分析的错误处理!

发布于 2022-09-19 13:50:02 字数 1545 浏览 11 评论 0

statement
                : K_for '(' lpvalue '=' expression ';' expression ';'
          error ')' statement
                { $$ = 0;
                  yyerror(@1, "error: Error in for loop step assignment.");
                }
        | K_for '(' lpvalue '=' expression ';' error ';'
          lpvalue '=' expression ')' statement
                { $$ = 0;
                  yyerror(@1, "error: Error in for loop condition expression.");
                }
        | K_for '(' error ')' statement
                { $$ = 0;
                  yyerror(@1, "error: Incomprehensible for loop.");
                }

请问:
    1.这里的error的检测是由词法分析完成的?
    2.语法分析中这里'error'会否同时压入语法分析栈。即'error'会否作为移入或归约操作的一部分?
    3.语法分析中会否产生'error'?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

那小子欠揍 2022-09-26 13:50:02

我想,如果把这里的error换成A,你会想的更明白一点吧

彩扇题诗 2022-09-26 13:50:02

但对错误恢复机制还不是非常清楚。
另外,看来error由词法或语法分析出。如果出了error,分析器是如何做错误处理。是一直丢弃直到看到‘error’后的语法元素吗。
比如

| K_for '(' lpvalue '=' expression ';' error ';'
          lpvalue '=' expression ')' statement

这里error,那么就一直丢弃直到看到了

';'

无名指的心愿 2022-09-26 13:50:02

通常会一直丢弃直到碰到FIRST集合或FOLLOW集合的符号,前一种重新开始分析当前非终结符,后一种直接进入分析下一个符号

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文