首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bison错误恢复

bison错误恢复
EN

Stack Overflow用户
提问于 2012-10-27 11:06:46
回答 1查看 3.4K关注 0票数 3

我发现我可以在语法规则中使用' error‘作为一种错误恢复机制。因此,如果出现错误,解析器必须丢弃当前行,并从下一行继续解析。野牛手册中实现这一点的示例可能是这样的:

代码语言:javascript
复制
stmts:
      exp
      |stmts exp
      | error '\n'

但是我不能使用它;因为我必须让flex在我的scannar中忽略'\n‘,这样一个表达式就不会被限制在一行中表达。如何才能使解析器-when遇到错误-继续解析到下一行,假设没有特殊字符(即分号)来指示表达式结束,也没有“换行符”标记?

谢谢..

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-27 12:07:42

由于您已经删除了示例中使用的标记,因此您必须使用特技才能获得相同的效果。

我认为你可以使用这个:

代码语言:javascript
复制
stmts:
      exp
    | stmts exp
    | error { eat_to_newline(); }

其中,eat_to_newline()是扫描器(源文件)中的一个函数,它安排丢弃所有保存的标记并读取到下一个换行符。

代码语言:javascript
复制
extern void eat_to_newline(void);

void eat_to_newline(void)
{
    int c;
    while ((c = getchar()) != EOF && c != '\n')
        ;
}

它可能需要比这更复杂一点,但不会比这复杂得多。在调用eat_to_newline()之后,您可能需要使用yyerrok; (注释提醒我,还需要使用yyclearin; )。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13096879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档