2015-03-09 6 views
6

लेक्सिंग शेल कमांड भाषा लेक्सिंग और पार्सिंग के बीच तंग युग्मन के कारण मोटे तौर पर पार्स करना आसान नहीं है।शैल कमांड भाषा को पार्स करने के लिए उपयुक्त अभिव्यक्ति व्याकरण पार्सिंग कर रहे हैं?

हालांकि, पार्सिंग अभिव्यक्ति व्याकरण (पीईजी) अक्सर स्कैनरलेस होते हैं। लेक्सिंग और पार्सिंग के संयोजन से, ऐसा लगता है कि मैं इन समस्याओं से बच सकता हूं। जिस भाषा का मैं उपयोग कर रहा हूं (जंग) में अच्छी तरह से बनाए रखा पीईजी पुस्तकालय है। हालांकि, मैं तीन कठिनाइयों है कि यह अव्यावहारिक इस लाइब्रेरी का उपयोग करने के लिए कर सकता है के बारे में पता:

  • शेल लाइन द्वारा लाइन विभाजित करने, पंक्ति के अंत अतीत पात्रों पढ़ नहीं सक्षम होना चाहिए।
  • उपनाम विशुद्ध शाब्दिक रहे हैं, और एक टोकन कुछ स्थितियों
  • शैल आरक्षित शब्दों को कुछ विशिष्ट स्थितियों

में पहचाने जाते हैं में अन्य टोकन के किसी भी क्रम से प्रतिस्थापित किया जा करने के लिए पैदा कर सकता है एक पेग पार्स करने के लिए अनुकूल है शैल कमांड भाषा इन आवश्यकताओं को दी गई है, या एक हाथ से लिखित रिकर्सिव-वंश पार्सर अधिक उपयुक्त है?

+0

एफडब्ल्यूआईडब्ल्यू, बैश एक बेहद जटिल हस्तलिखित लेजर का उपयोग करता है, जो बेहद जटिल हस्तलिखित लेजर के साथ संयुक्त होता है। मुझे नहीं पता कि पीईजी कितनी अच्छी तरह काम करेगी, लेकिन यदि आप इसे आज़माते हैं, तो हमें बताएं। – rici

+5

तीन कारण: यह जीपीएल है जबकि मेरा खोल एमआईटी/अपाचे 2 के तहत है, यह सी में है जबकि मेरा खोल जंग में है, और मैं इससे कुछ नहीं सीखूंगा। – Demi

+0

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

उत्तर

3

हां, एक पीईजी का उपयोग किया जा सकता है, और आपके द्वारा नोट किए गए किसी भी मुद्दे को कोई समस्या नहीं होनी चाहिए। विशेष रूप से:

1) लाइन द्वारा लाइनिंग पार्सिंग: अधिकांश पीईजी उपकरण में कोई अंतर्निहित व्हाइट-स्पेस स्किपिंग नहीं होगी। न्यूलाइन समेत सभी सफेद जगहों को स्पष्ट रूप से आपके द्वारा संभाला जाना चाहिए, जिसका अर्थ है कि आप किसी भी तरह की नई लाइन को संभाल सकते हैं।

2) आपको पीईजी से अपने एएसटी के रूप में पार्स पेड़ का उपयोग नहीं करना चाहिए। इसके बजाय आपको पार्स पेड़ उतरना चाहिए और एएसटी बनाना चाहिए। उपनामों के लिए, पार्स पूरा होने के बाद और आप अपना एएसटी बना रहे हैं, आप उपनाम का पता लगा सकते हैं और इसके बजाय उपनाम के लिए उपयुक्त विस्तार सम्मिलित कर सकते हैं।

3) आरक्षित शब्द आरक्षित नहीं हैं जब तक कि आप उन्हें आरक्षित न करें। यही है, यदि आपके पास एक संदर्भ है जहां या तो एक आरक्षित शब्द या कोई अन्य अल्फान्यूमेरिक प्रतीक हो सकता है, तो आपको पहले आरक्षित शब्दों को स्पष्ट रूप से जांचना होगा, फिर मनमाने ढंग से अल्फान्यूमेरिक प्रतीक, क्योंकि एक बार पीईजी निर्णय लेता है कि यह एक मैच है, जो वापस नहीं आएगा -धावन पथ। कहीं भी एक आरक्षित शब्द की अनुमति नहीं है, बस इसके लिए जांच न करें, और इसके सामान्यीकृत अल्फान्यूमेरिक प्रतीक नियम इसके बजाय सफल होंगे।

+0

मैं अपने मैदान से थोड़ी दूर हूं, लेकिन मैंने "उपनाम" शब्द को "पैरामीटर रहित मैक्रो" के रूप में पढ़ा है। कौन कहता है कि एक मैक्रो विस्तार को आपके द्वारा प्रदान किए गए व्याकरण में एक वाक्यांश बनाना है? यदि ऐसा नहीं होता है, तो आप केवल "पेड़ प्रतिस्थापन" नहीं कर सकते हैं। (स्पष्ट रूप से, इन्हें आसानी से विस्तारित करके आसानी से संभाला जाता है जब लेक्सर उन्हें मुठभेड़ करता है)। –

+0

@Ira: पारंपरिक शैल उपनाम मूल रूप से पाठ्यचर्या प्रतिस्थापन हैं - आमंत्रण पर किसी भी निम्नलिखित पाठ को विस्तार के हिस्से के रूप में पार्स किया गया है। तो जब आप जो कहते हैं वह अन्य भाषाओं में उपनामों के बारे में सच हो सकता है, या अधिक उन्नत शैल में, एक पाठ प्रतिस्थापन लगभग हमेशा सही होगा। आगे: एएसटी एक पार्स पेड़ नहीं है, जैसा कि मैंने पहले ही कहा है।आप जो कुछ भी प्रतिस्थापन सही उपनाम semantics बनाता है। – cliffordheath

+0

"लगभग हमेशा?" स्ट्रिंग को दिया गया है "अगर (पीकेआर एबीसी" पीकेआर के साथ "ए> बी" का उपनाम है, तो आप स्ट्रिंग को पार्स कैसे कर सकते हैं और फिर बाद में उपनाम को प्रतिस्थापित कर सकते हैं? –

संबंधित मुद्दे

 संबंधित मुद्दे