/ / फ्लेक्स और बाइसन का उपयोग करने में समस्या - बाइसन, फ्लेक्स-लेक्सर

फ्लेक्स और बाइसन - बाइसन, फ्लेक्स-लेक्सर का उपयोग करने में समस्या

क्या किसी ने फ्लेक्स और बाइसन पर काम किया ??

मेरे पास उनका एक उदाहरण है। मैं इसे चलाता हूं लेकिन यह बिना बायसन के दिखाता है,

उदाहरण के लिए: फ्लेक्स इन .l फ़ाइल में मैंने id परिभाषित की और इसके लिए printf {"id"} डाला।

और बायसन में मैंने कुछ इस तरह से परिभाषित किया:

  id_list       :   ID          {printf("id-list::=idn");}
|   id_list   ","   ID      {printf("id-list::=<id-list>,idn");}

लेकिन जब मैं मुख्य। मुझे पता है कि मैं अच्छी तरह से समझा नहीं, अगर कुछ याद आ रही है तो कृपया मुझे कहें या मुझे कोड डालने के लिए कहें।

उत्तर:

उत्तर № 1 के लिए 1

कुछ चीजें हैं जो गलत हो सकती हैं। पहला जो गलत है वह है प्रिंटफ। Printf% s गायब है इसलिए यह केवल आपके टेक्स्ट को प्रिंट करेगा। Heres कैसे मैं यह कर सकता हूँ

id_list:
ID        { $$ = id_list( 0, $1); }
| id_list "," ID        { $$ = id_list($1, $2); }

आपकी सी फ़ाइल में

IdList* id_list(IdList*p, ID*pp) {
//pp == yylval in this case a c-string from strdup
printf("id_list: %X %s", p, pp); //i rather set a breakpoint instead
if(p==0) p=new IdList;
p->deque.push_back(pp);
return p;
}

lex फ़ाइल में

//makes a copy bc yytext will be reused for other things
....        { yylval=strdup(yytext); return ID; }