मेरे पास स्कूल के लिए एक परियोजना है जहां हमें फ्लेक्स और बाइसन का उपयोग करने की आवश्यकता है। मैं सी ++ का उपयोग करना चाहता हूं ताकि मेरे पास एसटीएल और मेरे स्वयं के वर्गों तक पहुंच हो। हम निम्नलिखित Makefile के साथ प्रदान किया गया:मैं फ्लेक्स और बाइसन में सी ++ का उपयोग कैसे करूं?
CC = gcc
CFLAGS = -g
OBJs = parse.tab.o symtab.o attr.o lex.yy.o
default: parser
parser: ${OBJs}
${CC} ${CFLAGS} ${OBJs} -o parser -lfl
lex.yy.c: scan.l parse.tab.h attr.h
flex -i scan.l
parse.tab.c: parse.y attr.h symtab.h
bison -dv parse.y
parse.tab.h: parse.tab.c
clean:
rm -f parser lex.yy.c *.o parse.tab.[ch] parse.output
depend:
makedepend -I. *.c
scan.l और parse.y कुछ प्रारंभिक फ्लेक्स/जंगली भैंसों सामान स्कैनर और पार्सर उत्पन्न करने के लिए किया है। मुझे अपनी फाइलों को उन फाइलों में जोड़ना होगा। symtab। {एच, सी} प्रतीक तालिका का कार्यान्वयन माना जाता है। attr। {एच, सी} कुछ विशेषता जादू के लिए हैं। मैं symtab.c a .cc फ़ाइल बनाना चाहता हूं ताकि मैं एसटीएल का उपयोग कर सकूं। मेरे पास C++ का उपयोग करने के इच्छुक अन्य कारण भी हैं।
मैंने एक parse.ypp फ़ाइल का उपयोग करने की कोशिश की, ताकि एक .cpp फ़ाइल जेनरेट की जाएगी। लेकिन समस्या यह है कि मुझे सही नहीं मिल रहा है। एच फाइल। मैं इस तरह देखने के लिए Makefile बदल दिया है:
CC = g++ # Change gcc to g++
CFLAGS = -g
OBJs = lex.yy.o parse.tab.o symtab.o attr.o
default: lex.yy.c parser # added lex.yy.c so I could just keep lex stuff in C since I don't really need C++ there
parser: ${OBJs}
${CC} ${CFLAGS} ${OBJs} -o parser -lfl
lex.yy.o: scan.l parse.tab.h attr.h # added this rule to use gcc instead of g++
gcc -c -o lex.yy.o lex.yy.c
lex.yy.c: scan.l parse.tab.h attr.h
flex -i scan.l
parse.tab.cpp: parse.ypp attr.h symtab.h
bison -dv parse.ypp
parse.tab.h: parse.tab.cpp # I want a parse.tab.h but I get parse.tab.hpp
clean:
rm -f parser lex.yy.c *.o parse.tab.cpp parse.tab.h parse.output
depend:
makedepend -I. *.c
कोई मुझे बता सकते हैं कि मैं क्या जोड़ सकते हैं या सी ++ काम कर पाने के लिए क्या करना चाहिए? यह ध्यान दिया जाना चाहिए कि मैंने सी से सी ++ में जाने के साथ निपटने के लिए .y (या .ypp) फ़ाइल में कुछ सामान जोड़ा। विशेष रूप से, मुझे कुछ सामान बाहरी के रूप में घोषित करना पड़ा। मेरी मुख्य समस्या यह है कि जब मैं चलाता हूं, scan.l में वाक्यविन्यास त्रुटियों का एक गुच्छा है, और ऐसा लगता है क्योंकि इसमें parse.tab.h शामिल नहीं हो सकता है (क्योंकि यह कभी उत्पन्न नहीं होता है)।
रिकॉर्ड के लिए, फ्लेक्स में + या - सी ++ कमांड लाइन झंडे सी के बजाय सी ++ लेक्सर उत्पन्न करने के लिए हैं। उस पर ध्यान देने पर विचार करें, हालांकि मुझे नहीं लगता कि यह इस मामले में आपकी समस्या है। –