Bison:打印名称错误的堆栈
如何在 yyerror 函数中显示堆栈上的项目?我找到了 yy_stack_print 但它只打印数字并且需要 2 个参数,我不知道如何获取。
How can I display items on stack in yyerror function? I've found yy_stack_print
but it only prints numbers and requires 2 arguments which I don't how how to obtain.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不幸的是,没有公共 API 来打印当前堆栈内容。如果您不害怕使用可能更改的内部结构,则可以通过 yyss(最顶层)和 yyssp(当前项)变量访问解析器状态堆栈,值堆栈由 yyvs 和 yyvsp 变量表示。这两个变量都是 yyparse 函数的变量,如果允许解析器按需增长堆栈,则将它们存储在解析器启动处可能还不够。
您需要注意,这些变量不能保证存在于使用其他版本的 bison 生成的解析器中,而且它们可能会在未来的 bison 版本中更改其功能。
如果您只想避免这些低质量的“语法错误”消息,可以在文件顶部添加
%error-verbose
,这使得 bison 能够生成更加用户友好的错误消息。Unfortunately there is no public API to print the current stack contents. If you are not afraid to use possible-changing internals, you can access the parser state stack via the yyss(topmost) and yyssp(current item) variables, the value stack is represented by the yyvs and yyvsp variables. Both variables are variables of the yyparse function, and storing them at the parser start might not be sufficient if the parser is allowed to grow the stacks on demand.
You need to be aware that these variables are not guaranteed to exist in parsers which are generated with other versions of bison, and also that they might change their function in future bison versions.
If you only want to avoid these low quality "syntax error" messages, you can add
%error-verbose
at the top of the file, which makes bison to generate more user-friendly error messages.