How to put header file to .tab.h in Bison?

夙愿已清 提交于 2019-12-01 21:16:54

问题


I wrote bison code header:

%{
#include "foo.h"
%}

And I defined a struct named 'Foo' in header. I'd like to use it as token type in Bison.

%define api.value.type union
%token <Foo*> bar

Then I use -d option to generate bison.tab.h file.

bison -d bison.y

But there is no #include foo.h in bison.tab.h, and it use struct Foo to define the union YYSTYPE.

//bison.tab.h
union YYSTPE {
    Foo* bar;
    ...
};

It caused error when compile this program: error: ‘Foo’ does not name a type

Is there a way to include header file in bison.tab.h or another solution of this case?


回答1:


For includes that should appear in both the .c and the .h file (before the definition for the %union), you should use %code requires { ... }. %{ ... } inserts code in the .c file only.

For more information on the various %code options, you can look at the "Prologue Alternatives" chapter of the Bison docs.



来源:https://stackoverflow.com/questions/47726404/how-to-put-header-file-to-tab-h-in-bison

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!