gpt4 book ai didi

c++ - 野牛语法 : yylval is embedded in yyparse

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:25 25 4
gpt4 key购买 nike

难怪我无法从我的 flex 文件链接到它。我检查了这个并取出声明“YYSTYPE yylval;”从 yyparse 开始,它按预期工作。这肯定不是使用 bison 和 flex 的正确方法吗?有人可以告诉我另一种方式吗?谢谢。

最佳答案

在bison输出的y.tab.c文件中声明和定义yylval是正常的。它也在 y.tab.h 文件中声明(作为 extern),因此如果将其包含在词法分析器中,则可以将 yylval 作为全局变量访问。这是 flex/bison 工作的正常方式,应该不需要编辑文件来删除东西——它应该“正常工作”

如果你想在一个程序中有多个解析器,或者想在不同线程(或同时)使用多个解析器,那么使用全局变量会导致问题。 Bison 提供了一种通过 %define api.pure 避免这种情况的方法,它摆脱了 yylval 作为全局变量——解析器将使用 YYSTYPE(指针)和词法分析器的地址调用 yylex应该将 token 值放在那里而不是在 yylval 中。如果您使用的是 flex,则需要在 flex 文件顶部使用 #define YY_DECL int yylex(YYSTYPE *val) 来更改它用于 yylex 的声明。

关于c++ - 野牛语法 : yylval is embedded in yyparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com