Ev ödevi görevimi yapıyorum ve bison dosyasında bazı hatalar yaşıyorum. 'Blabla' türü bildirilmemiş gibi bir hata var. Kodum ve hatalarım aşağıda. Ben bir tip denetleyicisi yapmaya çalışıyorum, bir başlık, esnek ve bir bison dosyası var. İhtiyacım olan jetonları geri getiren Flex. Bir özellik oluşturmak için bir işlev yazdım, sonra iki öznitelik türünün aynı olup olmadığını kontrol ediyorum. Aynı değilse, bir hata çıkışı vereceğim, ancak derlediğimde bu hataları aldım. Ben anlamadım. Neyi yanlış yaptım? Hata alma bizde bildirilen tür yok
hw4.y
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); }
yılında .h dosyası
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);
Hatalar: 25,24-25: `day_type' arasında $$ hiçbir ilan etti bizon dosyasında
hw4.y: 26.27-28: $$ 'day_type', bildirilen bir tür yok
hw4.y: 27.27-28: $$ 'day_type' türü bildirilmemiş tip
10 hw4.y: 28.27-28: $$ 'day_type' bildirilen bir tür yok
hw4.y: 29.27-28: $$ 'day_type' 31.26-27: tip
hw4.y ilan hayır etti arasında $$ `attr_val ': 32.26-27: hayır beyan tip
hw4.y sahiptir attr_val` arasında $$' hayır bildirilmiş bir tür
hw4.y etti: 32.39-40: aralık dışı tamsayı: $ 2 '
hw4.y: 33.26-27: "attr_val"' nin $$, bildirilen bir tür yok.
hw4.y: 33.40-41: tam aralık dışında: `$ 3 '
hw4.y: 34.30-31: $$ 'attr_val', bildirilen tür yok
hw4.y: 34.45-46: 'attr_val' 1 $ hw4.y'de yok: 36.24-25: 'attr_name' $$ 'nin bildirilen bir türü yok
hw4.y: 37.26-27: $$ 39.26-27: hayır bildirilmiş bir tür
hw4.y sahiptir `attr_name ait ': 38.32-33` attr_name ait $$ hiçbir beyan tip
hw4.y bulunur `attr_name' arasında $$ hiçbir beyan türü vardır
hw4.y: 40.25-26: $$ 'attr_name' bildirilen bir tür yok
hw4.y: 40.38-39: tam aralık dışı tamsayı: `$ 2 '
hw4.y: 41.29-30: $$ attr_name 'bildirilen bir tür yok
hw4.y: 42.30-31: $$' attr_name 'bildirilen bir tür yok
hw4.y: 42,43-44: `$ 2' : aralık dışında tamsayı
hw4.y: 43,27-28:` attr_name ait $$': 43.41-42: tamsayı çıkış yok beyan tip
hw4.y vardır aralığın: `3' $
hw4.y: 44,25-26: attr_name` ait $$' `3' $
hw4.y: 44,39-40: aralık dışında tamsayı hiçbir beyan tip
hw4.y vardır: 45.26-27: $$ 'attr_name', bildirilen bir tür yok
hw4.y: 47.41-42: $ özniteliği '1' bildirilen bir tür yok bildirilen türü yok
hw4.y: 47.50-51: $ 2 'özniteliği' yok bildirilen tür
Teşekkürler! % Türünün gerekli olduğunu bilmiyordum. Şimdi çalışıyor! –