Compiler construction ';不管怎样';没有声明的类型
我正在使用bison开发解析器…在我的语法中,我得到了这个错误 这是一个密码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
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,以便更清楚地了解您要做的事情。