Bison之%code

Posted QzZq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bison之%code相关的知识,希望对你有一定的参考价值。

%code [qualifier] { code_seg }

这个选项就是用来指定代码段code_seg放在什么位置。其中qualifier可以为空、requires、provides、top或者imports。%code { code_seg }
qualifier为空。此时代码段可以为C/C++,也可以是JAVA。基本等价于原来的%{ … %}。

%code requires { code_seg }

qualifier为requires。此时代码段code_seg只能是C/C++,将被放在声明文件(也就是--defines生成的文件)和实现文件(也就是--output生成的文件)中定义YYSTYPE、YYLTYPE之前。可以将包含的头文件放在这里。这也就是我说的解决方案。

%code provides { code_seg }

qualifier为provides。此时代码段code_seg只能是C/C++,将被放在声明文件和实现文件中定义YYSTYPE、YYLTYPE之后。这里可以放其他文件会用到的一些变量或函数的声明。比如yylex的声明。

%code top { code_seg }

qualifier为top。此时代码段code_seg只能是C/C++,将被放在实现文件的最开头。可以用来……我也不知道用来放什么。官方文档说,偶尔会需要放一写宏定义什么的。

%code imports { code_seg }

qualifier为imports。此时代码段code_seg只能是JAVA,将被放在JAVA文件中。用来放JAVA代码(这不废话嘛)。

原文链接:https://blog.csdn.net/qq_44844115/article/details/102570654

以上是关于Bison之%code的主要内容,如果未能解决你的问题,请参考以下文章

SQLite3源程序分析之Lemon分析器生成工具

如何用flex+bison写语法分析器

windows 下运行bison总是出错,请大神帮忙啊!!!

windows下bison的安装与入门

flex bison

Linux From Scratch(LFS11.0)构建 LFS 系统 - Bison-3.7.6