Ich mache meine Hausaufgabe und ich habe einige Fehler in der Bison-Datei. Ich habe Fehler wie "Blabla" hat keinen Typ deklariert. Mein Code und Fehler sind unten. Ich versuche eine Art Checker zu machen, ich habe einen Header, Flex und eine Bison-Datei. Flex gibt die Tokens zurück, die ich brauche. Ich habe eine Funktion geschrieben, um ein Attribut zu erstellen, und dann überprüfe ich, ob die beiden Attributtypen gleich sind oder nicht. Wenn nicht gleich, gebe ich eine Fehlerausgabe, aber wenn ich es kompiliere, habe ich diese Fehler bekommen. Ich habe es nicht herausgefunden. Was habe ich falsch gemacht?Fehler erhalten keine Angabe in bison
In Bison-Datei:
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);
}
In .h-Datei
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);
Fehler
hw4.y: 25,24-25: $$ von `day_type‘ nicht erklärt hat, type
hw4.y: 26.27-28: $$ von `day_type 'hat keinen deklarierten Typ
hw4.y: 27.27-28: $$ von `day_type 'hat keinen deklarierten Typ
hw4.y: 28.27-28: $$ von` day_type' hat keinen deklarierten Typ
hw4.y: 29.27-28: $$ von `day_type ' hat kein Typ
hw4.y erklärt: 31,26-27: $$ von `attr_val 'hat keinen deklarierten Typ
hw4.y: 32,26-27: $$ von` attr_val' hat keinen deklarierten Typ
hw4.y: 32.39-40: Ganzzahl außerhalb des Bereichs: `$ 2 '
hw4.y: 33.26-27: $$ von' attr_val 'hat keinen deklarierten Typ
hw4.y: 33.40-41: Ganzzahl außerhalb des zulässigen Bereichs:` $ 3'
hw4.y: 34.30-31: $$ von `attr_val 'hat keinen deklarierten Typ
hw4.y: 34,45-46: $ 1 von `attr_val 'hat keinen deklarierten Typ
hw4.y: 36,24-25: $$ von` attr_name' hat keinen deklarierten Typ
hw4.y: 37,26-27: $$ von `attr_name 'hat keinen deklarierten Typ
hw4.y: 38,32-33: $$ von` attr_name' hat keinen deklarierten Typ
hw4.y: 39,26-27: $$ von `attr_name‘ hat keinen deklarierten Typ
hw4.y: 40.25-26: $$ von `attr_name 'hat keinen deklarierten Typ
hw4.y: 40.38-39: Ganzzahl außerhalb des gültigen Bereichs:` $ 2'
hw4.y: 41.29-30: $$ of ` attr_name 'hat keinen deklarierten Typ
hw4.y: 42.30-31: $$ von `attr_name' hat keinen deklarierten Typ
hw4.y: 42,43-44: integer außerhalb des Bereichs: `$ 2'
hw4.y: 43,27-28: $$ von` attr_name‘hat keinen deklarierten Typ
hw4.y: 43,41-42: integer out Reichweite: `$ 3'
hw4.y: 44,25-26: $$ von` attr_name‘hat keinen deklarierten Typ
hw4.y: 44,39-40: integer außerhalb des Bereichs:` $ 3'
hw4.y: 45.26-27: $$ von `attr_name 'hat keinen deklarierten Typ
hw4.y: 47.41-42: $ 1 von' Attribut 'hat keinen deklarierten Typ
hw4.y: 47.50-51: $ 2 von' Attribut 'hat keine Typ
Danke! Ich wusste nicht, dass der% -Typ notwendig ist. Jetzt geht es! –