जब तक मैं प्रोग्रामिंग कर रहा हूं (केवल 5 साल) के लिए मुझे कंपाइलर/दुभाषिया डिजाइन/कार्यान्वयन में दिलचस्पी है और यह हमेशा उन दृश्यों के पीछे "जादू" जैसा प्रतीत होता है जो कोई भी वास्तव में बात नहीं करता (मुझे पता है ऑपरेटिंग सिस्टम के विकास के लिए कम से कम 2 मंच, लेकिन मैं कंपाइलर/दुभाषिया/भाषा विकास के लिए किसी भी समुदाय के बारे में नहीं जानता)। वैसे भी, मैंने हाल ही में प्रोग्रामिंग के अपने ज्ञान को विस्तारित करने की उम्मीद में, अपने आप पर काम करना शुरू करने का फैसला किया है (और हे, यह बहुत मजेदार है :)। इसलिए, मेरे पास सीमित मात्रा में पढ़ने वाली सामग्री के आधार पर, और विकिपीडिया, मैंने कंपेलर/दुभाषिया के लिए घटकों की इस अवधारणा को विकसित किया है:एक सार सिंटेक्स वृक्ष क्या है/क्या इसकी आवश्यकता है?
स्रोत कोड -> लेक्सिकल विश्लेषण -> सार सिंटेक्स ट्री -> सिंटेक्टिक विश्लेषण -> अर्थात् विश्लेषण -> कोड जनरेशन -> निष्पादन योग्य कोड।
(मुझे पता है कि अधिक उत्पादन और निष्पादन योग्य कोड कोड करने के लिए है, लेकिन मुझे लगता है कि अब तक अभी तक नहीं मिला है :)
और उस ज्ञान के साथ, मैं एक बहुत ही बुनियादी lexer बना लिया है (जावा में) लेने के लिए स्रोत फ़ाइल से इनपुट, और टोकन को दूसरी फ़ाइल में आउटपुट करें। एक नमूना इनपुट/आउटपुट इस प्रकार दिखाई देगा:
इनपुट: (lexer से)
int a := 2
if(a = 3) then
print "Yay!"
endif
आउटपुट:
INTEGER
A
ASSIGN
2
IF
L_PAR
A
COMP
3
R_PAR
THEN
PRINT
YAY!
ENDIF
व्यक्तिगत रूप से, मुझे लगता है कि यह वास्तव में करने के लिए वहां से जाने के लिए आसान होगा वाक्य रचनात्मक/अर्थात् विश्लेषण, और संभवतः यहां तक कि कोड जनरेशन, जो मुझे प्रश्न पूछता है: एएसटी का उपयोग क्यों करें, जब ऐसा लगता है कि मेरा लेक्सर उतना ही अच्छा काम कर रहा है? हालांकि, मेरे स्रोतों का 100% मैं इस विषय पर शोध करने के लिए उपयोग करता हूं, सभी अशिष्ट लगते हैं कि यह किसी भी कंपाइलर/दुभाषिया का एक आवश्यक हिस्सा है। क्या मैं वास्तव में एक एएसटी क्या है (एक पेड़ जो एक कार्यक्रम के तार्किक प्रवाह को दिखाता है) का मुद्दा याद कर रहा हूं?
टीएल; डीआर: वर्तमान में एक कंपाइलर विकसित करने के मार्ग में, लेक्सर समाप्त हुआ, ऐसा लगता है कि उत्पादन एएसटी करने के बजाए आसान वाक्य रचनात्मक विश्लेषण/अर्थपूर्ण विश्लेषण के लिए होगा। तो एक का उपयोग क्यों करें? क्या मैं एक बिंदु खो रहा हूँ?
धन्यवाद!
कई कंपाइलर- और भाषा उन्मुख संसाधन हैं। Http://lambda-the-ultimate.org/ से शुरू करें –