疑惑,关于bison语法分析的错误处理!
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我想,如果把这里的error换成A,你会想的更明白一点吧
但对错误恢复机制还不是非常清楚。
另外,看来error由词法或语法分析出。如果出了error,分析器是如何做错误处理。是一直丢弃直到看到‘error’后的语法元素吗。
比如
这里error,那么就一直丢弃直到看到了
。
通常会一直丢弃直到碰到FIRST集合或FOLLOW集合的符号,前一种重新开始分析当前非终结符,后一种直接进入分析下一个符号