यह एक महान व्यक्तिगत परियोजना की तरह लगता है। आप एक कंपाइलर के बुनियादी हिस्सों के काम के बारे में बहुत कुछ सीखेंगे। मैं एक पार्सर जेनरेटर का उपयोग करने की कोशिश छोड़ दूंगा; यदि यह आपके स्वयं के संपादन के लिए है, तो आप इसे सब कुछ स्क्रैच से करके सीखेंगे।
इस तरह के सिस्टम काम करने का तरीका औपचारिकरण है कि हम प्राकृतिक भाषाओं को कैसे समझते हैं। अगर मैं आपको एक वाक्य देता हूं: "कुत्ते, रोवर ने अपना खाना खा लिया।", सबसे पहले आप इसे शब्दों और विराम चिह्न में तोड़ देते हैं। "द", "स्पेस", "कुत्ता", "कॉम्मा", "स्पेस", "रोवर", ... यह "टोकनिंग" या "लेक्सिंग" है।
अगली चीज आप टोकन स्ट्रीम का विश्लेषण करने के लिए करते हैं यह देखने के लिए कि वाक्य व्याकरणिक है या नहीं। अंग्रेजी का व्याकरण बेहद जटिल है, लेकिन यह वाक्य बहुत सरल है। विषय-appositive-क्रिया-वस्तु। यह "पार्सिंग" है।
एक बार जब आप जानते हैं कि वाक्य व्याकरणिक है, तो आप वाक्य का विश्लेषण वास्तव में इसके अर्थ से प्राप्त कर सकते हैं। उदाहरण के लिए, आप देख सकते हैं कि इस वाक्य के तीन भाग हैं - विषय, अपरिपक्व, और वस्तु में "उसका" - यह सब एक ही इकाई, अर्थात् कुत्ते को संदर्भित करता है। आप यह पता लगा सकते हैं कि कुत्ता खाने की बात है, और खाना खाया जा रहा है। यह अर्थपूर्ण विश्लेषण चरण है।
कंपाइलर्स के पास चौथा चरण होता है जो मनुष्य नहीं करते हैं, जो वे भाषा उत्पन्न करते हैं जो भाषा में वर्णित कार्यों का प्रतिनिधित्व करते हैं।
तो, यह सब करें। अपनी भाषा के टोकन को परिभाषित करके शुरू करें, बेस क्लास टोकन को परिभाषित करें और प्रत्येक के लिए व्युत्पन्न कक्षाओं का एक समूह परिभाषित करें। (आइडेंटिफायर टोकन, ऑर्टोकन, एंड टोकन, इम्प्लाइज टोकन, राइटपेरन टोकन ...)। फिर एक विधि लिखें जो एक स्ट्रिंग लेती है और एक आईनेमरेबल 'देता है। यह तुम्हारा लेक्सर है।
दूसरा, पता लगाएं कि आपकी भाषा का व्याकरण क्या है, और एक पुनरावर्ती मूल पार्सर लिखना जो एक अमूर्त वाक्य को एक अमूर्त वाक्यविन्यास पेड़ में तोड़ देता है जो आपकी भाषा में व्याकरणिक संस्थाओं का प्रतिनिधित्व करता है।
फिर उस विश्लेषक को लिखें जो उस पेड़ और आंकड़ों को देखता है, जैसे "मेरे पास कितने अलग-अलग मुक्त चर हैं?"
फिर कोड जनरेटर लिखें जो सत्य तालिकाओं का मूल्यांकन करने के लिए आवश्यक कोड को थकाता है। स्पिटिंग आईएल ओवरकिल की तरह लगता है, लेकिन अगर आप वास्तव में बफ बनना चाहते हैं, तो आप कर सकते हैं। अभिव्यक्ति वृक्ष पुस्तकालय आपके लिए ऐसा करना आसान हो सकता है; आप अपने पार्स पेड़ को एक अभिव्यक्ति पेड़ में बदल सकते हैं, और उसके बाद अभिव्यक्ति वृक्ष को एक प्रतिनिधि में बदल सकते हैं, और प्रतिनिधि का मूल्यांकन कर सकते हैं।
शुभकामनाएं!
नियमित अभिव्यक्तियां अनियंत्रित संख्याओं के कारण काम नहीं करतीं। आपको कुछ प्रकार के पार्सर जनरेटर का उपयोग करने की आवश्यकता होगी। –
मुझे लगता है, इन स्रोत कोड (http://mrieppel.net/prog/truthtable.html) उपयोगी हैं। – yv4