【发布时间】:2011-09-11 23:58:54
【问题描述】:
我几乎在网上搜索了所有材料。但我仍然很困惑为什么词法分析器无法识别 yylval。
情况如下:
我在node.h中定义了一堆ADT并在node.c中实现它们,我的目的是在这些结构正确存储后生成一个AST。但我被野牛文件困住了。
首先,我将%union 更改为union YYSTYPE {...}; 和typedef union YYSTYPE YYSTYPE;,我不需要这样做,网上发布的其他一些文件似乎与%uinion 配合得很好。
然后,我被yylval 的东西困住了。我已经完成了bison -d 的事情,并且已经在parser.c 中检查了它(我已经指定了野牛输出),所以我认为extern YYSTYPE yylval; 应该可以工作。但事实并非如此。所以我想知道是否有另一种方法可以解决 yylval 未声明的问题。
我只使用YYSTYPE这两种结构,int和char *,我可以将联合YYSYTPE和结构分开用于AST吗?这意味着,非终结符将没有关联的类型。大家还有什么想法吗?
【问题讨论】:
-
我仍然想知道您的意思是“将联合
YYSTYPE和 AST 的结构分开”,我认为没有必要。在bison 中使用%union和%type时遇到问题了吗? -
@neuront 是的,我同意你的看法。我们不需要在 bison 中明确指定 YYSTYPE。但问题是如果不这样做,我就无法通过它。换句话说,虽然
%union和%union YYSTYPE的工作方式相同,但是,就我而言,我必须选择后者。我不知道为什么?对于%union和%type,我知道它们之间的关系。我只知道如何使用YYSTYPE undefined解决错误。上网一搜,发现是个通病。
标签: gcc bison flex-lexer compiler-construction