Compiler construction ';不管怎样';没有声明的类型

Compiler construction ';不管怎样';没有声明的类型,compiler-construction,parsing,bison,Compiler Construction,Parsing,Bison,我正在使用bison开发解析器…在我的语法中,我得到了这个错误 这是一个密码 extern NodePtr CreateNode(NodeType, ...); extern NodePtr ReplaceNode(NodeType, NodePtr); extern NodePtr MergeSubTrees(NodeType, ...); ................... NodePtr rootNodePtr = NULL; /* poi

我正在使用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,我都会遇到此错误。。。我得到了语法分析器。y:1302.32-33:$1个'Expressi'
on'没有声明类型

,这意味着解析器.y第1302行的
表达式
规则的RHS上的第一项(终端或非终端)没有为其声明类型。如果是终端,则需要为其添加
%token
声明;如果是非终端,则需要为其添加
%type
声明。当您这样做时(可能是
$type
%token
),您将以
$1
(无
.nodePtr
后缀)的形式访问该值

编辑


听起来第1302行应该是
$$=$1
%type XXX
应位于第一部分,其中XXX是该规则的非终端。当您在.y文件中使用
%union
时,union中声明的标记只应在
%type
%token
声明中使用--它们不应出现在.y文件的任何操作中,1302处的行为$$。nodePtr=$1.nodePtr;。。。。在%union{NodePtr NodePtr;}NodePtr是structure…您的意思是如果NodePtr是structure NodePtr类型,那么它应该是%type NodePtr?否,
%type
用于声明
%union
的哪个成员与语法中给定的非终结符相关联。由于您还没有发布任何语法,我不知道会是什么。请在第1302行(至少10行左右)周围发布更多Parser.y,以便更清楚地了解您要做的事情。