2016-10-13 113 views
0

我有這個問題,我的YACC文件似乎無法訪問我的頭文件中定義的類型。結構類型上的Yacc聯合

如果我用%code requires{ }替換我的頭文件它確實認出它但那不是我真正想要的。

我st.h頭文件:

struct node { 
    int item; 
    int identifier; 
    struct node *left; 
    struct node *middle; 
    struct node *right; 
}; 

typedef struct node NODE; 
typedef NODE *TREE; 

我parser.y文件:

%{ 
#include <stdio.h> 
#include <stdlib.h> 
#include "st.h" 
%} 

%union { 
    int value; 
    TREE token; 
} 

的Yacc(或C)給了我這個錯誤:

error: unknown type name ‘TREE’

我明白這很可能是我的錯誤,我非常感謝任何幫助。

+0

注意:**從來沒有**'typedef'指針!並閱讀[問],提供**所有**所需的信息。指定**精確**錯誤消息應該沒有問題,它來自哪裏以及它出現在哪裏。 – Olaf

+0

是yacc還是C給出錯誤? (提示:產生錯誤時運行哪個命令?)如果是C,那麼錯誤是與yacc/bison生成的文件還是(f)lex生成的文件有關? (提示:錯誤信息旁邊會有一個文件名。) – rici

+0

另外:[mcve]。所提供的代碼編譯正確。 – rici

回答

1

當試圖編譯其中有一個#include "y.tab.h"的其他源文件(不是您的解析器文件)時,您可能(很可能)得到此錯誤。問題在於,由於您的%union使用的是st.h中定義的類型,因此您需要在每個要包含後者的文件中始終使用#include "st.h"之前的。