如何在野牛中取消定义yyparse()?

时间:2017-08-03 15:55:13

标签: bison

Bison公开曝光{{{7| ====Hands==== : {{{7}}} }}} 功能。有没有办法阻止它这样做?我希望在它周围公开我自己的包装器,从而初始化一些变量。

1 个答案:

答案 0 :(得分:0)

除非您使用yyparse%name-prefix指定不同的全局符号前缀,否则Bison肯定会生成入口点%define api.prefix。 (如果更改前缀,则会更改多个符号的名称,包括yytextyyleng,因此可能会带来不便。)

但除了符号存在且因此可以被调用的事实之外,它看起来并不令人讨厌。如果要使用不同的函数包装解析器,可以这样做并在代码中使用该函数的名称。野牛生成的代码本身并不会调用yyparse。 (它由main中的默认liby函数调用,但不建议使用该库。如果您确实要从编译对象中删除符号的定义,则可以执行此操作所以使用链接描述文件,至少在实现链接描述文件的系统上。

如果您确实想要更改yyparse函数的名称而不修改全局符号名称前缀,则可以插入

%define yyparse some_other_name

进入序言代码。理想情况下,您可以将其放在%code top块中。