我正在使用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'没有声明的类型
答案 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中的任何操作中文件