'什么'没有声明的类型

时间:2010-03-22 17:55:23

标签: compiler-construction parsing bison

我正在使用bison开发解析器...在我的语法中我得到了这个错误

这是一个代码

extern NodePtr  CreateNode(NodeType, ...);
extern NodePtr  ReplaceNode(NodeType, NodePtr); 
extern NodePtr  MergeSubTrees(NodeType, ...); 


            ...................


NodePtr   rootNodePtr = NULL; /* pointer to the root of the parse tree */
NodePtr   nodePtr = NULL; /* pointer to an error node */


                         ...........................

NodePtr   mainMethodDecNodePtr = NULL;

                   ................

/* YYSTYPE */

%union {
 NodePtr nodePtr;
}

每当我使用$$。nodePtr或$ 1.nodePtr时,我都会收到此错误...我正在获取Parser.y:1302.32-33:$ Expressi的$ 1 on'没有声明的类型

1 个答案:

答案 0 :(得分:2)

这意味着parser.y第1302行的Expression规则的RHS上的第一个项目(终端或非终端)没有为其声明类型。如果是终端,则需要为其添加%token声明,如果是非终端,则需要为其添加%type声明。当您这样做时(可能是$type <nodePtr>%token <nodePtr>),您将只访问$1(无.nodePtr后缀)

修改

听起来像第1302行应该是$$ = $1;%type <nodePtr> XXX应该放在第一部分,其中XXX是此规则的非终端。在.y文件中使用%union时,联合中声明的标记只应在%type%token声明中使用 - 它们不应出现在.y中的任何操作中文件