2016-10-13 21 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ファイル:私は理解して

error: unknown type name ‘TREE’

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

%union { 
    int value; 
    TREE token; 
} 

Yaccの(またはC)が私にこのエラーが発生しますこれは私の最後の間違いである可能性が高いと私は非常にすべての助けに感謝します。

+0

注:**決して** 'typedef'ポインタはありません!そして[ask]を読んで、**すべての**必要な情報を提供してください。 **正確な**エラーメッセージを指定することは問題ではありません。 – Olaf

+0

yaccまたはCがエラーを出していますか? (ヒント:エラーが発生したときには、どのコマンドが実行されていましたか?)そして、Cの場合は、yacc/bisonが生成したファイルまたはlexが生成したファイルに関するエラーですか? (ヒント:エラーメッセージの横にはファイル名が付きます) – rici

+0

また、[mcve]。提示されたコードは正しくコンパイルされます。 – rici

答えて

1

#include "y.tab.h"を持つ他のソースファイル(パーサーファイルではない)をコンパイルしようとすると、このエラーが発生する可能性があります。問題は、%unionst.hで定義されたタイプを使用しているため、後者を含めるすべてのファイルで常に#include "st.h" BEFORE #include "y.tab.h"にする必要があるという問題です。