कैसे पारसर्स का निर्माण करने के प्रश्न के मानक जवाब (कि ASTs निर्माण), संकलन पर मानक ग्रंथों को पढ़ने के लिए है। अहो और उलमैन की "ड्रैगन" कंपाइलर पुस्तक बहुत क्लासिक है। यदि आपको सर्वोत्तम संदर्भ सामग्री प्राप्त करने के लिए धैर्य नहीं मिला है, तो आपको अधिक परेशानी होगी, क्योंकि वे सिद्धांत प्रदान करते हैं और सूक्ष्मता की जांच करते हैं। लेकिन here is my answer जल्दी में लोगों के लिए, रिकर्सिव वंश पार्सर्स का निर्माण।
कोई अंतर्निहित त्रुटि पुनर्प्राप्ति के साथ पार्सर्स बना सकता है। इस तरह की चीज पर कई कागजात हैं, 1 9 80 के दशक में एक गर्म विषय। "विद्वान त्रुटि सुधार" के लिए शिकार, Google विद्वान देखें। मूल विचार यह है कि पार्सर, एक पार्सिंग त्रुटि का सामना करने पर, कुछ प्रसिद्ध बीकन (";" एक कथन डेलीमीटर के लिए छोड़ देता है, सी-जैसी भाषाओं के लिए बहुत लोकप्रिय है, यही कारण है कि अगर आपकी भाषा में आपकी टिप्पणी है कथन टर्मिनेटर), या सिंटैक्स त्रुटि के बिंदु पर चढ़ने के लिए विभिन्न इनपुट स्ट्रीम हटाना या सम्मिलन का प्रस्ताव है। ऐसी योजनाओं की निचली विविधता आश्चर्यजनक है। मुख्य विचार आमतौर पर जितना संभव हो सके त्रुटि के बारे में अधिक जानकारी लेना है। मैंने कभी देखा है कि सबसे दिलचस्प विचारों में से एक दो पार्सर्स, एक दूसरे से आगे एन टोकन चल रहा है, सिंटैक्स-त्रुटि भूमि-खानों की तलाश में है, और दूसरे पार्सर को इससे पहले मुकाबले में उपलब्ध एन टोकन के आधार पर फ़ीड त्रुटि मरम्मत की जा रही है वाक्यविन्यास त्रुटि। इससे दूसरे पार्सर सिंटैक्स त्रुटि पर पहुंचने से पहले अलग-अलग कार्य करने की सुविधा देता है। यदि आपके पास यह नहीं है, तो अधिकांश पार्सर बाएं संदर्भ को फेंक देते हैं और इस प्रकार मरम्मत की क्षमता खो देते हैं। (मैं इस तरह के एक योजना लागू नहीं।)
चीजें डालने के लिए का चयन अक्सर पार्सर का निर्माण करने के लिए इस्तेमाल जानकारी से प्राप्त किया जा सकता है पहली जगह में (अक्सर पहले और सेट का पालन करें)। यह एल (एएल) आर पार्सर्स के साथ अपेक्षाकृत आसान है, क्योंकि पार्स टेबल में आवश्यक जानकारी होती है और उस बिंदु पर पार्सर पर उपलब्ध होती है जहां इसे एक त्रुटि होती है। यदि आप को यह समझने के लिए को समझना चाहते हैं, तो आपको सिद्धांतों को समझने की आवश्यकता है (ओह, फिर उस कंपाइलर पुस्तक को फिर से) पार्सर्स का निर्माण कैसे किया जाता है। (मैंने इस योजना को सफलतापूर्वक कई बार लागू किया है)।
चाहे आप जो भी करते हैं, सिंटैक्स त्रुटि की मरम्मत बहुत मदद नहीं करती है, क्योंकि अनुमान लगाने के लिए लगभग असंभव है कि वास्तव में विश्लेषण किए गए दस्तावेज़ के लेखक क्या हैं। इससे पता चलता है कि फैंसी योजनाएं वास्तव में सहायक नहीं होंगी। मैं सरल लोगों के साथ चिपक जाता हूँ; लोगों को एक त्रुटि रिपोर्ट और पार्सिंग की कुछ अर्ध-सुंदर निरंतरता प्राप्त करने में प्रसन्नता हो रही है।
वास्तविक भाषा के लिए अपने स्वयं के पार्सर को घुमाने के साथ एक वास्तविक समस्या यह है कि वास्तविक भाषाएं गंदा गन्दा चीजें हैं; वास्तविक कार्यान्वयन के लोग जो मौजूदा कोड अड्डों के कारण पत्थर में गलत और जमे हुए हैं, या भाषा को झुकाव/सुधारने पर जोर देते हैं (मानकों के लिए हैं, उपहार बिक्री के लिए हैं) क्योंकि यह अच्छा है। वास्तविक कोड की ग्राउंड सच्चाई के मुकाबले व्याकरण क्या है, उसे फिर से कैलिब्रेट करने में बहुत समय व्यतीत करने की अपेक्षा करें। एक सामान्य नियम के रूप में, यदि आप एक कामकाजी पार्सर चाहते हैं, तो इसे पाने के बजाए ट्रैक रिकॉर्ड रखने वाले व्यक्ति को बेहतर तरीके से प्राप्त करें।
एक पाठ जो एक पार्सर बनाने के लिए नरक नहीं है, वह यह है कि अगर वे कुछ भी पार्स परिणाम या पेड़ के साथ उपयोगी करना चाहते हैं, तो उन्हें बहुत अधिक बुनियादी मशीनरी की आवश्यकता होगी बस पार्सर। "जीवन के बाद जीवन" के लिए मेरे जैव की जांच करें।
एएसटी हमेशा अर्थपूर्ण त्रुटियों की अनुमति देते हैं, यह एक वाक्यविन्यास त्रुटि है। – harold
प्रश्न में त्रुटि का निश्चित प्रकार। धन्यवाद) – Medvedev
क्या आपकी भाषा में बयान को सीमित करने का कोई तरीका है? –