क्यों अलग लेक्सिंग और पार्सिंग?


15

राज्य मशीन से एकल पास का उपयोग करके दस्तावेज़ को पार्स करना संभव है। दो पास होने का क्या फायदा, यानी। पाठ को टोकन में बदलने के लिए एक लेक्सर होना, और उन टोकन पर उत्पादन नियमों का परीक्षण करने के लिए एक पार्सर होना? एक भी पास क्यों नहीं है जो उत्पादन नियमों को सीधे पाठ पर लागू करता है?



2
यह पहले से ही सीएस पर चर्चा की गई है, स्टेक्सएक्सचेंज, लेक्सर + पार्सर की एक्सप्रेसिव पावर के जवाब में कई बहुत ही तकनीकी टिप्पणियों के साथ । लेकिन आगे के जवाब के लिए वहां जगह हो सकती है।
बबौ

मुझे आश्चर्य है कि अगर पाइपलाइन-शैली समानांतरवाद (अत्यधिक असंतुलित चरणों) के कारण एक पक्ष लाभ हो सकता है। निर्देश और डेटा कैश व्यवहार दोनों भी दिलचस्प हो सकते हैं। कितना (यदि सभी पर) ऐसा संकलन समय कम करेगा, तो यह विशिष्ट हार्डवेयर पर निर्भर करेगा।
पॉल ए। क्लेटन

एक काफी स्पष्ट (कम से कम मेरे लिए) कारण यह है कि आप फिर स्कैनर टूल का अलग से उपयोग कर सकते हैं। व्यवहार में, मैं अक्सर इनपुट को स्कैन करने के लिए फ्लेक्स का उपयोग करता हूं, लेकिन शायद ही कभी याक की पूरी शक्ति की आवश्यकता होती है।
jamesqf

जवाबों:


13

आपको उन्हें अलग नहीं करना है। लोग उन्हें स्कैनर रहित पार्सर में मिलाते हैं ।

स्केनरलेस पार्सर्स का मुख्य नुकसान यह प्रतीत होता है कि परिणामी व्याकरण जटिल नहीं हैं - लेक्सिंग करते हुए एक नियमित अभिव्यक्ति के संगत संयोजन की तुलना में अधिक जटिल और टोकन-स्ट्रीम पर एक संदर्भ-मुक्त व्याकरण कर रहे हैं। विशेष रूप से, स्कैनर रहित पार्सिंग के लिए व्याकरण अस्पष्टता की ओर जाता है। टोकन-स्ट्रीम पर काम करने वाले व्याकरणों के लिए अस्पष्टता को दूर करना आसान है।

एक समर्पित अपफ्रंट लेक्सिंग चरण का उपयोग करने का एक व्यावहारिक लाभ यह है कि आप बाद के पार्सर को लेक्सिकल विवरण के साथ नहीं जोड़ते हैं। यह प्रारंभिक प्रोग्रामिंग भाषा के विकास के दौरान उपयोगी है, जब लेक्सिकल और सिंटैक्टिक विवरण अभी भी अक्सर बदल रहे हैं।


1
टीपीपीपीटी

@ बबौ हां जो सही है। मुझे पता नहीं है कि एलएल (के) से बना फॉर्म रेगुलर-एक्सप्रेशन का कोई औपचारिक परिणाम एलएल (के) या उससे मिलता-जुलता है। इसके अलावा, लेक्सिंग आमतौर पर नियमित भाषाओं के साथ नहीं किया जाता है, लेकिन कुछ अधिक शक्तिशाली, अर्थात् नियमित भाषाओं को सबसे लंबे समय तक मिलान और कीवर्ड-पहली प्राथमिकताओं के साथ विस्तारित किया जाता है। मुझे यकीन नहीं है कि कौन सी सटीक भाषा वर्ग है और इसके क्लोजर गुण क्या हैं।
मार्टिन बर्गर

2
यदि आपके लुक-फॉरवर्ड में एक पहचानकर्ता पढ़ना शामिल है, तो रचना को बिना किसी लुक-फॉरवर्ड की आवश्यकता होगी, क्योंकि वहाँ (सिद्धांत रूप में) पहचानकर्ताओं की लंबाई पर कोई बाध्य नहीं है।
बबौ

@ बबौ मुझे यकीन नहीं है। यदि सबसे लंबा कीवर्ड 17 वर्ण लंबा है, तो कोई भी स्ट्रिंग जो अब पहचानकर्ता है, या लेक्सिकली अमान्य होनी चाहिए।
मार्टिन बर्गर

लेकिन आप पहचानकर्ता, या संभवतः एक स्ट्रिंग, संख्या या अन्य शाब्दिक, 17 व्यक्तिगत प्रतीकों से अधिक एक अनुक्रम है, जो आपको वास्तव में जरूरत पड़ने वाले टोकन से पहले खड़े हो सकते हैं। वह बड़ा रूपवान है, आगे-आगे है। आप एक गैर-निर्धारक भाषा के साथ समाप्त हो सकते हैं।
Babou
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.