यदि आप संदर्भ मुक्त व्याकरण में पैरामीटर जोड़ते हैं तो आपको क्या मिलेगा?


13

मैं अभद्र-संवेदनशील भाषाओं के लिए व्याकरण के बारे में सोच रहा था और ऐसा लग रहा है कि सीएफ व्याकरण अगर मापदंडों के साथ संयुक्त हो जाए तो यह चाल चलेगा। एक उदाहरण के रूप में, ANTLR जैसे प्रारूप में सरलीकृत अजगर व्याकरण के लिए इस टुकड़े पर विचार करें:

// on top-level the statements have empty indent
program  
    : statement('')+
    ;

// let's consider only one compound statement and one simple statement for now
statement(indent) 
    : ifStatement(indent)
    | passStatement(indent)
    ;

passStatement(indent)
    : indent 'pass' NEWLINE
    ;

// statements under if must have current indent plus 4 spaces
ifStatement(indent)
    : indent 'if' expression ':' NEWLINE (statement(indent '    ')+)
    ;

मेरा प्रश्न: क्या इस तरह के व्याकरण (मापदंडों के साथ सीएफजी) का कोई नाम है?

ऐसा लगता है कि इस व्याकरण के लिए एक पुनरावर्ती वंश पार्सर लिखना मुश्किल नहीं होगा (पैरामीटर मूल रूप से पार्सर होना चाहिए)। इस दृष्टिकोण के साथ क्या कठिनाइयाँ हो सकती हैं?

क्या मापदंडों के अतिरिक्त समर्थित भाषा वर्ग को संदर्भ-मुक्त से ऊपर उठाता है?


1
यदि मानों का सेट पैरामीटर ले सकता है तो वह परिमित है, फिर भी यह तुच्छ संदर्भ से मुक्त है (आप तब सभी मूल्यों पर पुनरावृति कर सकते हैं और इसे सभी को लिख सकते हैं)।
शाफ़्ट फ्राक

1
ध्यान देने योग्य है कि आपका प्रस्ताव नियत इंडेंटेशन वाली इंडेंटेशन-सेंसिटिव भाषाओं के लिए है। अजगर (और ऐसी अन्य भाषाएँ) इस तरह से प्रतिबंधित नहीं हैं; वे स्वीकार करते हैं कि उपयोगकर्ता को जो भी इंडेंटेशन चाहिए। यह पार्सबिलिटी को प्रभावित नहीं करता है (टैब वर्णों को छोड़कर) लेकिन यह आपके प्रस्ताव के साथ व्यक्त करना मुश्किल होगा, कम से कम जैसा कि मैं इसे समझता हूं।
रिसी


@HendrikJan, विशेषता व्याकरण शब्दार्थ क्रिया के साथ व्याकरण की व्याख्या करने का एक तरीका है, वे पार्सिंग को नियंत्रित नहीं करते हैं।
एपीग्रामग्राम

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

जवाबों:


14

Affix grammars (पैरामीटरेड संदर्भ-मुक्त व्याकरण) का प्रख्यात डच कंप्यूटर वैज्ञानिक कॉर्नेलिस हा कोस्टर द्वारा बड़े पैमाने पर अध्ययन किया गया , जिसकी शुरुआत उनके 1962 के पेपर "बेसिक इंग्लिश, इंग्लिश के एक हिस्से के लिए एक जेनेरिक व्याकरण", LGLT Meertens के साथ सह-लिखित है। 1970 में, उन्होंने अवधारणा की औपचारिकता तैयार की; एक उपयोगी अवलोकन उनके 1971 के पेपर " Affix Grammars for Programming Languages" में उपलब्ध है, जिसका एक संस्करण मुझे Citeseer पर मिला है

उस पत्र में, कोस्टर वान विजिन्गार्डन के दो-स्तरीय व्याकरणों के साथ अपने औपचारिकतावाद (और इसी तरह के एक अन्य) की तुलना करते हैं , और उन्हें बहुत समान पाते हैं।

पार्सिंग तकनीक के डिक ग्रून की अमूल्य एनोटेट की ग्रंथ सूची में बड़ी संख्या में अन्य उपयोगी संदर्भ शामिल हैं, जो कि रीमिक्स व्याकरण और अन्य गैर-चॉम्सकी औपचारिकताएं हैं। (ग्रंथ सूची का 18.2.6 खंड देखें, हालांकि अन्य खंडों में उपयोगी प्रश्नपत्र हैं।) ग्रुइन ने कुछ विशेष रूप से पार्सिंग तकनीकों के दूसरे संस्करण के .315.3.2 में संक्षिप्त रूप से व्याकरण को शामिल किया है : एक प्रैक्टिकल गाइड (और पहले संस्करण में और भी अधिक संक्षेप में। , ऑनलाइन उपलब्ध) इस तथ्य का उल्लेख करते हुए कि टॉप-डाउन (और अन्य) पार्सिंग तकनीकों को अनुकूलित करना आसान है।

anbncn

कॉस्टर, जो अल्गोल 68 रिपोर्ट के संपादक भी थे, कंपाइलर विवरण भाषा (सीडीएल) के मूल डेवलपर थे , जो कि रीमिक्स व्याकरण के बारे में उनके विचारों पर आधारित था। यह टूलकिट और उसके बाद के डेरिवेटिव का उपयोग कई वर्षों तक उत्पादन में किया गया था। यह पृष्ठ , जिसे मैंने Google खोज के साथ पाया था और जिसकी स्थायित्व की मैं गारंटी नहीं दे सकता, में CDL3 के लिए मैनुअल और डाउनलोड साइट के लिंक हैं।


मुझे लगता है कि सीडीएल भाषाएं विशेषता व्याकरण की तरह हैं : विशेषताओं के मूल्यों को बाह्य रूप से परिभाषित कार्यों द्वारा गणना की जा सकती है। मैं उन मामलों के लिए affix व्याकरण को आरक्षित करूंगा, जहां affixes (गुण) के मूल्यों के बीच संबंधों को औपचारिकता के भीतर परिभाषित किया गया है, जैसा कि विस्तारित Affix व्याकरण में है
रीयरियरपोस्ट

@reinierpost: आप निश्चित रूप से अपनी शब्दावली के हकदार हैं; विशेषाधिकार एंथ्रोपोमोर्फिक अंडे तक सीमित नहीं है। हालांकि, सीडीएल मैनुअल खुद दावा करता है कि "सीडीएल 3 एक कार्यान्वयन भाषा है जो कि रीमिक्स व्याकरण पर आधारित है," जो मुझे लगता है कि इसे ध्यान में रखा जाना चाहिए। (मैनुअल ftp.cs.kun.nl/pub/cdl3/cdl3-manual-1.2.7.pdf पर उपलब्ध है )। मैंने अपने उत्तर में यही दावा किया है: कि CDL, कॉमिकर के काम पर आधारित है। जैसा कि ग्रुन बताते हैं, प्रत्यय और विशेषता व्याकरण के बीच का अंतर मामूली है; उसका भेद यह है कि क्या प्रत्यय वाक्यगत वैधता तय करने के लिए उपयोग किए जाते हैं।
रिसी

(उद्धरण पुस्तिका के पहले पृष्ठ से है।)
रीसी

मुझे पता है ... और तुम सही हो। मेरी टिप्पणी आपको विरोधाभास करने के लिए नहीं थी।
रीइनियरियरपोस्ट

6

CFG के लिए पम्पिंग लेम्मा लें :

व्याकरण ले लो

S -> A("")
A(p) -> p 
      | p '\n' A(p"*") '\n' p 

यह एक त्रिभुज का वर्णन करता है:

*
**
***
**
*

uvwxy{uvnwxny|n>0}vx

इसका मतलब है कि स्टार त्रिकोण एक संदर्भ मुक्त भाषा नहीं है।

या एक सरल उदाहरण:

S-> B("")
B(p)-> p 'a' p 'a' p
     | B(p 'b')

{bnabnabn|n0}


3

मैंने कभी भी इस औपचारिकता को प्रस्तुत नहीं किया है (यहां तक ​​कि ग्रून की पार्सिंग तकनीकों जैसी कुछ भी ) में, इस बात पर निर्भर करता है कि आप वास्तव में "मापदंडों को मूल रूप से कैसे पार्सर होना चाहिए" के विवरण के आधार पर, यह वान विजेंगार्ड के दो स्तरीय व्याकरणों के लिए अनुपयुक्त दिखता है, जिनकी शक्ति समान है अप्रतिबंधित चरण संरचना व्याकरण (यानी संदर्भ के प्रति संवेदनशील से अधिक शक्तिशाली, आप एक VW व्याकरण लिख सकते हैं जो सभी हल कार्यक्रमों को देता है)।



कोस्टर और उनके समूह ने दो प्रकार के एफिक्स ग्रामर का अध्ययन किया, जहां तक ​​मुझे जानकारी है: 1) वान विजेंगार्डन व्याकरण के प्रतिबंधित रूप, आसान पहचान की अनुमति देने के लिए; 2) सीडीएल भाषाओं, व्यावहारिक संकलक विवरण भाषाओं में बिना किसी स्पष्ट परिमाण मूल्य हेरफेर के लेकिन लक्ष्य भाषा (जैसे कोडांतरक) में नियमों को परिभाषित करने के विकल्प के साथ, उन्हें पूरा करना।
रीइनियरियरपोस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.