यह सी कोड है लेकिन मुझे लगता है कि यह सी ++ के लिए भी एक संकेतक मामला होगा।
जब हम विश्वविद्यालय में एक संकलक करना था कि हम एक .l
फ़ाइल इस तरह में YY_DECL को परिभाषित करने के लिए किया था:
#define YY_DECL int alpha_yylex(yylval_) void *yylval_;
int alpha_yylex(yylval_)
समारोह है और void *yylval
पैरामीटर प्रकार है।
स्पष्ट रूप से, आपको यह जानने की ज़रूरत है कि पार्सर को यह पता होना चाहिए कि उर्फ से कहां से शुरू करना है, जिस पर काम करना चाहिए।
आपको अपने .y
फ़ाइल में इस फ़ंक्शन प्रोटोटाइप (extern int alpha_yylex(void *yylval_);
) को भी बाहर करने की आवश्यकता है।
उसके बाद फ्लेक्स/बाइसन उपयोगिताओं आपके लिए प्रासंगिक .c
फ़ाइलों को स्वत: उत्पन्न कर देंगे।
सामान्य रूप से, .l
शब्दावली नियमों के लिए है और .y
व्याकरण नियमों के लिए है। इसलिए यदि आप मूल्य प्राप्त करने के लिए कहीं से आप इस तरह .y
(एक उदाहरण) में एक संघ को परिभाषित करना होगा की जरूरत है:
%union {
union {
int Integer;
double Double;
char Character;
char* String;
} value;
}
फिर, अपने वाक्य और नियमों के आधार पर आप yylval.value.String = strdup(yytext)
अपने .l file
में कर सकते हैं और, आपके व्याकरण नियमों के आधार पर, $$.Double = $1.Double + $3.Double
आपके .y
फ़ाइल में।
मैं एक बहुत याद नहीं है के बाद से यह एक समय है कि मुझे लगता है कि किया है लेकिन मुझे लगता है कि तुम कोशिश कर सकते हैं और आप दस्तावेज़ देखें या यहाँ पूछना :) सकते हो गया है
पुनश्च: एक (मैं था अच्छा एफएक्यू कहीं और यह याद नहीं कर सकता कि यह बिल्ली कहां है -> बाद में पोस्ट करेगा यदि मैं इसे खोजने के लिए भाग्यशाली हूं xD: D xD)
धन्यवाद अर्नेस्ट .. अभी भी संघर्ष कर रहा हूं लेकिन उम्मीद है कि मैं वहां जाऊंगा। मेरे पास वास्तव में मेरे लेक्सर में yylex() नहीं है - फ्लेक्स एक डिफ़ॉल्ट बनाता है जो शायद getchar() करता है। मुझे लगता है मुझे लेक्सर या कुछ में अपना खुद लिखना होगा। – ale