gpt4 book ai didi

parsing - Bison 错误恢复

转载 作者:行者123 更新时间:2023-12-01 10:58:47 25 4
gpt4 key购买 nike

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

stmts:
exp
|stmts exp
| error '\n'

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

谢谢..

最佳答案

由于您已经消除了示例中使用的标记,因此您将不得不表演特技来获得相同的效果。

我想你可以用这个:

stmts:
exp
| stmts exp
| error { eat_to_newline(); }

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

extern void eat_to_newline(void);

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

它可能需要比这复杂一点,但不会比这复杂很多。在调用 eat_to_newline() 之后,您可能需要使用 yyerrok;(正如评论提醒我的那样,还有 yyclearin;)。

关于parsing - Bison 错误恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com