我已经在网上搜索了几乎所有的资料,但是我仍然不明白为什么词法分析器无法识别yylval。
这里是情况:
我在node.h
中定义了一堆ADT,并在node.c
中实现它们,我的目的是在这些结构被正确存储后生成AST。但我卡在bison文件中了。
首先,我将%union
改为union YYSTYPE {...};
和typedef union YYSTYPE YYSTYPE;
,我不知道为什么要这样做,网上发布的一些其他文件似乎可以很好地使用%uinion
。
然后,我卡在了yylval
的问题上。我已经执行了bison -d
命令,并且在parser.c
中检查了它(我已经指定了bison输出),所以我认为extern YYSTYPE yylval;
应该可以工作。但事实并非如此。因此,我想知道是否有另一种方法来解决yylval未声明的问题。
我只使用了两种类型的YYSTYPE
结构,即int
和char *
,我能否将联合YYSYTPE
和AST结构分开?这意味着非终端将没有关联的类型。你们有其他想法吗?
YYSTYPE
和AST结构分开”,而且我认为这并不必要。你在使用bison中的%union
和%type
时遇到了问题吗? - neuront%union
和%union YYSTYPE
的作用相同,但在我的情况下,我必须选择后者。我不知道为什么?对于%union
和%type
,我知道它们之间的关系。我只知道如何解决“YYSTYPE未定义”的错误。当我在网上搜索时,发现这是一个常见的问题。 - chenrui