私は宿題をしています。私はbisonファイルにいくつかのエラーがあります。 'blabla'に宣言された型がないようなエラーが出ました。私のコードとエラーは以下の通りです。私は型チェッカーをしようとしている、私はヘッダー、フレックスとバイソンファイルがあります。私が必要とするトークンを返すFlex。私は属性を作成する関数を書いた後、2つの属性の型が同じかどうかを調べます。同じでない場合はエラー出力を行いますが、コンパイルするとこれらのエラーが発生します。私はそれを理解しませんでした。私は何を間違えたのですか?エラーが発生しました。bisonに宣言された型はありません
AttrNode * makeATTR(char * v, AttrType t);
%union
{
ValType val;
char *text;
AttrNode *attrPtr;
}
%token <text> tOPEN tCLOSE tSELF tLEND tCOURSE tCLASS ....continue
day_type: tMON { $$ = makeATTR ($1,DAY);}
| tTUE { $$ = makeATTR ($1,DAY);}
| tWED { $$ = makeATTR ($1,DAY);}
| tTHU { $$ = makeATTR ($1,DAY);}
| tFRI { $$ = makeATTR ($1,DAY);}
;
attr_val: tSTRING {$$= makeATTR($1,STRING);}
| tNUM {$$= makeATTR($2,NUMBER);}
| tTIME {$$ = makeATTR($3,TIME);}
| day_type { $$ = makeATTR ($1,DAY);}
;
attr_name: tNAME {$$= makeATTR($1,STRING);}
| tCODE {$$= makeATTR($1,STRING);}
| tTYPE {$$= makeATTR($1,STRING);}
| tCRN {$$= makeATTR($2,NUMBER);}
| tSECTION {$$= makeATTR($1,STRING);}
| tCAPACITY {$$= makeATTR($2,NUMBER);}
| tSTART {$$ = makeATTR($3,TIME);}
| tEND {$$ = makeATTR($3,TIME);}
| tDAY { $$ = makeATTR ($1,DAY);}
;
attribute: attr_name attr_val {if($1.type!=$2.type)
printf("Mismatch error");}
....
AttrNode * makeATTR(char * v, AttrType t)
{
AttrNode * ret = (AttrNode*) malloc(sizeof(AttrNode));
result->thisNodeType = Attr;
result->attrNodePtr = (AttrNode*)malloc(sizeof(AttrNode));
result->attrNodePtr->AttrNode.value=v;
result->attrNodePtr->AttrNode.type=t;
return (result);
}
typedef enum {Attr,Tree } NodeType;
typedef enum {STRING,NUMBER,TIME,DAY} AttrType;
//For String
typedef struct AttrNode
{
char * value;
AttrType * type;
}AttrNode;
typedef struct TreeNode
{
NodeType thisNodeType;
AttrNode *attrNodePtr;
}TreeNode;
AttrNode * makeATTR(char * v, AttrType t);
.hファイル内のエラー
hw4.y:25.24から25:バイソンファイルで
`DAY_TYPE」の$$を宣言したノータイプ
hw4.y:26.27-28: `day_type 'の$$には宣言された型がありません
hw4.y: 27.27-28: `day_type 'の$$には宣言型がありません
hw4.y:28.27-28:` day_type'の$$には宣言型がありません
hw4.y:29.27-28: `day_type 'の$$ 31.26から27:: `attr_valの$$は、 ':32.26から27:何も宣言された型
hw4.yを持っていない` attr_valの$$' には宣言された型
hw4.yを持っています。no宣言された型
hw4.yを持っていません32.39-40:整数が範囲外です: `$ 2 '
hw4.y:33.26-27:` attr_val'の$$は宣言された型がありません
hw4.y:33.40-41:整数が範囲外です: '$ 3'
hw4.y:34.30-31: `attr_val 'の$$には宣言された型がありません
hw4.y:34.45-46: `attr_val 'の$ 1に宣言型がありません
hw4.y:36.24-25:` attr_name'の$$には宣言型がありません
hw4.y:37.26-27:$$ `ATTR_NAMEの ':38.32から33:何も宣言された型
hw4.yを持っていない` ATTR_NAMEの$$は、':39.26から27:何も宣言された型
hw4.yを持っていない `ATTR_NAME」の$$には宣言された型
を持っていませんhw4.y:40.25-26: `attr_name 'の$$に宣言型がありません
hw4.y:40.38-39:整数が範囲外です:` $ 2'
hw4.y:41.29-30:$$の ` attr_name 'には宣言された型がありません
hw4.y:42.30-31: `attr_name'の$$には宣言された型がありません'$ 2'
hw4.y:43.27-28: `attr_name 'の$$には宣言された型がありません
hw4.y:43.41-42:整数out `$ 3'
hw4.y:44.25から26:` ATTR_NAMEの$$は、」:44.39から40:範囲外の整数: `$ 3'
hw4.y:なし宣言された型
hw4.yを持っていない範囲の45.26-27: `attr_name 'の$$には宣言型がありません
hw4.y:47.41-42:` attribute'の$ 1に宣言型がありません
hw4.y:47.50-51: `attribute 'の$ 2にはno宣言型
ありがとうございます!私は、%タイプが必要であることを知らなかった。今それは働いている! –