2010-03-22 42 views
0

我使用野牛發展解析器......在我的語法我收到此錯誤「不管」沒有聲明的類型

這裏是一個代碼

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'沒有聲明的類型

+0

在線後多出現Parser.y 1302(至少10行左右),以便更清楚地表明你正在嘗試做什麼。 – 2010-03-23 21:33:04

回答

2

這意味着第一項(終端或非終端)在parser.y的1302行的Expression規則的RHS上沒有聲明類型fo它。如果它是一個終端,則需要爲它添加%token聲明,如果它是非終端,則需要爲其添加一個%type聲明。當你這樣做(可能要麼$type <nodePtr>%token <nodePtr>),您將訪問值只是$1(無.nodePtr後綴)

編輯

聽起來像線1302應該是$$ = $1;%type <nodePtr> XXX應該放在第一部分,其中XXX是此規則的非終端。當您在.y文件中使用%union時,聯合中聲明的標籤應僅用於%type%token聲明中 - 它們不應出現在.y文件中的任何操作中

+0

line at 1302 is $$。nodePtr = $ 1.nodePtr; .... in%union { NodePtr nodePtr; } NodePtr是結構... – 2010-03-22 18:09:12

+0

你的意思是,如果nodePtr是Structure NodePtr類型,那麼它應該是%類型 NodePtr? – 2010-03-23 05:18:42

+0

不,'%type'用於聲明'%union'的哪個成員與語法中給定的非終端關聯。既然你沒有發佈任何你的語法,我不知道那會是什麼。 – 2010-03-23 21:31:43