गुण व्याकरण: Difference between revisions

From Vigyanwiki
(Created page with "एक विशेषता व्याकरण औपचारिक व्याकरण को शब्दार्थ सूचना प्रसंस्कर...")
 
No edit summary
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
एक विशेषता व्याकरण [[औपचारिक व्याकरण]] को शब्दार्थ सूचना प्रसंस्करण के साथ पूरक करने का एक औपचारिक तरीका है। सिमेंटिक जानकारी व्याकरण के [[टर्मिनल और नॉनटर्मिनल प्रतीक]]ों से जुड़े एट्रिब्यूट (कंप्यूटिंग) में संग्रहीत होती है। विशेषताओं के मान व्याकरण के निर्माण से जुड़े विशेषता मूल्यांकन नियमों का परिणाम हैं। विशेषताएँ अमूर्त सिंटैक्स ट्री में कहीं से भी जानकारी को नियंत्रित और औपचारिक तरीके से स्थानांतरित करने की अनुमति देती हैं।{{Sfn|Knuth|1968|p=134}}
'''एट्रिब्यूटेड ग्रामर [[औपचारिक व्याकरण|फॉर्मल ग्रामर]]''' को शब्दार्थ सूचना प्रसंस्करण के साथ पूरक करने की फॉर्मल विधि है। इस प्रकार से सिमेंटिक जानकारी ग्रामर के [[टर्मिनल और नॉनटर्मिनल प्रतीक|टर्मिनल और नॉनटर्मिनल सिम्बल्स]] से जुड़े एट्रिब्यूट (कंप्यूटिंग) में स्टोर्ड करती है। और विशेषताओं के मान ग्रामर के निर्माण से जुड़े विशेषता मूल्यांकन नियमों का परिणाम हैं। अतः विशेषताएँ एब्स्ट्रेक्ट सिंटैक्स ट्री में कहीं से भी जानकारी को नियंत्रित और फॉर्मल विधि से स्थानांतरित करने की अनुमति देती हैं।{{Sfn|Knuth|1968|p=134}}


प्रत्येक सिमेंटिक फ़ंक्शन केवल एक उत्पादन नियम में होने वाले प्रतीकों की विशेषताओं से संबंधित है: सिमेंटिक फ़ंक्शन पैरामीटर और उसके परिणाम दोनों एक विशेष नियम से प्रतीकों की विशेषताएं हैं। जब कोई सिमेंटिक फ़ंक्शन नियम के बाईं ओर प्रतीक की किसी विशेषता के मूल्य को परिभाषित करता है, तो विशेषता को संश्लेषित कहा जाता है; अन्यथा इसे वंशानुगत कहा जाता है।{{Sfn|Knuth|1968|p=132}} इस प्रकार, संश्लेषित विशेषताएँ सिमेंटिक जानकारी को पार्स ट्री तक पारित करने का काम करती हैं, जबकि विरासत में मिली विशेषताएँ मूल नोड्स से नीचे और सिंटैक्स ट्री के पार मानों को पारित करने की अनुमति देती हैं।
प्रत्येक सिमेंटिक फ़ंक्शन केवल उत्पादन नियम में होने वाले सिम्बल्स की विशेषताओं से संबंधित है: सिमेंटिक फ़ंक्शन पैरामीटर और उसके परिणाम दोनों विशेष नियम से सिम्बल्स की विशेषताएं हैं। जब कोई सिमेंटिक फ़ंक्शन नियम के बाईं ओर सिम्बल्स की किसी विशेषता के मान को परिभाषित करता है, तो विशेषता को संश्लेषित कहा जाता है; अन्यथा इसे इनहेरिटेड कहा जाता है।{{Sfn|Knuth|1968|p=132}} इस प्रकार, संश्लेषित विशेषताएँ सिमेंटिक जानकारी को पार्स ट्री तक पारित करने का कार्य करती हैं, जबकि इनहेरिटेड में मिली विशेषताएँ मूल नोड्स से नीचे और सिंटैक्स ट्री के पार मानों को पारित करने की अनुमति देती हैं।


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


==इतिहास==
==इतिहास==
विशेषता व्याकरण का आविष्कार [[डोनाल्ड नुथ]] और [[पीटर वेगनर]] द्वारा किया गया था।<ref name="genesis">D. E. Knuth: [http://www.cs.miami.edu/home/odelia/teaching/csc419_spring17/syllabus/Knuth_AttributeHistory.pdf The genesis of attribute grammars]. ''Proceedings of the international conference on Attribute grammars and their applications'' (1990), LNCS, [https://doi.org/10.1007%2F3-540-53101-7 vol. 461], 1–12.</ref> जबकि समग्र अवधारणा के लिए डोनाल्ड नुथ को श्रेय दिया जाता है, पीटर वेगनर ने नुथ के साथ बातचीत के दौरान विरासत में मिली विशेषताओं का आविष्कार किया। कुछ भ्रूणीय विचार पीछे छिपे हैं<ref name="genesis"/>एडगर टी. नेड आयरन्स के कार्य के लिए,<ref>{{Cite web|url=http://zzcad.com/ned.htm|title=Main}}</ref> आईएमपी (प्रोग्रामिंग भाषा) के लेखक।
अतः एट्रिब्यूटेड ग्रामर का आविष्कार [[डोनाल्ड नुथ]] और [[पीटर वेगनर]] द्वारा किया गया था।<ref name="genesis">D. E. Knuth: [http://www.cs.miami.edu/home/odelia/teaching/csc419_spring17/syllabus/Knuth_AttributeHistory.pdf The genesis of attribute grammars]. ''Proceedings of the international conference on Attribute grammars and their applications'' (1990), LNCS, [https://doi.org/10.1007%2F3-540-53101-7 vol. 461], 1–12.</ref> जबकि समग्र अवधारणा के लिए डोनाल्ड नुथ को श्रेय दिया जाता है, किन्तु पीटर वेगनर ने नुथ के साथ वार्तालाप के समय इनहेरिटेड में मिली विशेषताओं का आविष्कार किया गया था। कुछ भ्रूणीय विचार पीछे छिपे हैं<ref name="genesis"/> और लेखक एडगर टी. नेड आयरन्स के कार्य के लिए,<ref>{{Cite web|url=http://zzcad.com/ned.htm|title=Main}}</ref> आईएमपी (प्रोग्रामिंग लैंग्वेज) मिलते हैं।


==उदाहरण==
==उदाहरण==
निम्नलिखित एक सरल [[संदर्भ-मुक्त व्याकरण]] है जो पूर्णांकों के गुणन और योग से बनी भाषा का वर्णन कर सकता है।
निम्नलिखित सरल [[संदर्भ-मुक्त व्याकरण|कॉन्टेक्स्ट-मुक्त ग्रामर]] है जो की पूर्णांकों के एट्रिब्यूटेडन और योग से बनी लैंग्वेज का वर्णन कर सकता है।<syntaxhighlight lang="abl">
Expr → Expr + Term                                                                                                           
Expr → Term                                                                                                       
Term → Term * Factor                                                                                                                                                             
Term → Factor
Factor → "(" Expr ")"
Factor → integer
</syntaxhighlight>इस प्रकार से ग्रामर में लिखी गई अभिव्यक्ति के परिणाम की गणना करने के लिए निम्नलिखित विशेषता ग्रामर का उपयोग किया जा सकता है। अतः ध्यान दें कि यह ग्रामर केवल संश्लेषित मानों का उपयोग करता है, और इसलिए यह एस-एट्रिब्यूटेडित ग्रामर है।<syntaxhighlight>
Expr1 → Expr2 + Term [ Expr1.value = Expr2.value + Term.value ]
Expr → Term [ Expr.value = Term.value ]
Term1 → Term2 * Factor [ Term1.value = Term2.value * Factor.value ]
Term → Factor [ Term.value = Factor.value ]
Factor → "(" Expr ")" [ Factor.value =  Expr.value ]
Factor → integer [ Factor.value = strToInt(integer.str) ]
</syntaxhighlight>


  एक्सप्र → एक्सप्र + टर्म
==संश्लेषित एट्रिब्यूटेड==
  एक्सप्र → अवधि
एक संश्लेषित विशेषता की गणना चाइल्ड की विशेषताओं के वैल्यू से की जाती है। चूँकि चाइल्ड के वैल्यू की गणना पहले की जानी चाहिए, यह नीचे से ऊपर की ओर प्रसार का उदाहरण है।{{Sfn|Knuth|1968|p=130}} संश्लेषित विशेषता को फॉर्मल रूप से परिभाषित करने के लिए <math>G= \langle V_n,V_t,P,S \rangle</math>, आइए फॉर्मल ग्रामर होने दें, जहाँ
  पद → पद * कारक
  पद → कारक
  फ़ैक्टर → (एक्सपीआर)
  गुणनखंड → ''पूर्णांक''


व्याकरण में लिखी गई अभिव्यक्ति के परिणाम की गणना करने के लिए निम्नलिखित विशेषता व्याकरण का उपयोग किया जा सकता है। ध्यान दें कि यह व्याकरण केवल संश्लेषित मानों का उपयोग करता है, और इसलिए यह एक एस-गुणित व्याकरण है।
* <math>V_n</math> गैर टर्मिनल सिम्बल्स का सेट है
  एक्सप्र<sub>1</sub>→ एक्सप्र<sub>2</sub>+ अवधि [एक्सप्र<sub>1</sub>.मूल्य = एक्सप्र<sub>2</sub>.मूल्य + अवधि.मूल्य ]
* <math>V_t</math> टर्मिनल सिम्बल्स का सेट है
  एक्सप्र → टर्म [ एक्सप्र.वैल्यू = टर्म.वैल्यू ]
* <math>P</math> फॉर्मल प्रोडक्शंस का सेट है
  अवधि<sub>1</sub>→ अवधि<sub>2</sub>* कारक [अवधि<sub>1</sub>.मूल्य = अवधि<sub>2</sub>.मूल्य * कारक.मूल्य ]
* <math>S</math> डिस्टिंगुइशेड, या प्रारंभ, सिम्बल्स है
  पद → गुणनखंड [अवधि.मूल्य = गुणनखंड.मूल्य]
  फ़ैक्टर → (एक्सप्र) [फैक्टर.वैल्यू = एक्सप्र.वैल्यू]
  गुणनखंड → ''पूर्णांक'' [ Factor.value = strToInt(''पूर्णांक''.str) ]


==संश्लेषित गुण==
पुनः, नॉनटर्मिनल सिम्बल्स <math>A</math> की श्रृंखला दी गई और विशेषता नाम <math>a</math>, <math>A.a</math> यदि ये तीनों नियम पूर्ण होते हैं तो यह संश्लेषित विशेषता है:
एक संश्लेषित विशेषता की गणना बच्चों की विशेषताओं के मूल्यों से की जाती है। चूँकि बच्चों के मूल्यों की गणना पहले की जानी चाहिए, यह नीचे से ऊपर की ओर प्रसार का एक उदाहरण है।{{Sfn|Knuth|1968|p=130}} एक संश्लेषित विशेषता को औपचारिक रूप से परिभाषित करने के लिए, आइए <math>G= \langle V_n,V_t,P,S \rangle</math> एक औपचारिक व्याकरण हो, जहां


* <math>V_n</math> गैर टर्मिनल प्रतीकों का सेट है
* <math>A \rightarrow \alpha \in P</math> (अर्थात। <math>A \rightarrow \alpha</math> ग्रामर के नियमों में से है)
* <math>V_t</math> टर्मिनल प्रतीकों का सेट है
*<math>\alpha = \alpha_1 \ldots \alpha_n, \forall i, 1 \leq i \leq n: \alpha_i \in (V_n \cup V_t)</math> (अर्थात नियम के मुख्य भाग में प्रत्येक सिम्बल्स या तो नॉनटर्मिनल या टर्मिनल है)
* <math>P</math> औपचारिक व्याकरण का सेट है# व्याकरण का वाक्य-विन्यास
*<math>A.a = f(\alpha_{j_1}.a_1, \ldots ,\alpha_{j_m}.a_m)                                                                                                                            </math>, जहाँ <math>\{\alpha_{j_1}, \ldots ,\alpha_{j_m}\} \subseteq \{\alpha_1, \ldots ,\alpha_n\}                                                                                            </math> (अर्थात विशेषता का मान फ़ंक्शन <math>f</math> है नियम के मुख्य भाग में सिम्बल्स से कुछ मानों पर प्रयुक्त होता है)
* <math>S</math> विशिष्ट, या प्रारंभ, प्रतीक है


फिर, नॉनटर्मिनल प्रतीकों की एक श्रृंखला दी गई <math>A</math> और एक विशेषता नाम <math>a</math>, <math>A.a</math> यदि ये तीनों शर्तें पूरी होती हैं तो यह एक संश्लेषित विशेषता है:
==इनहेरिटेड एट्रिब्यूटेड==
इस प्रकार से पार्स ट्री में नोड पर इनहेरिटेड में मिली विशेषता को मूल या सिबलिंग्स में विशेषता मानों का उपयोग करके परिभाषित किया गया है। किसी प्रोग्रामिंग लैंग्वेज निर्माण की उस कॉन्टेक्स्ट पर निर्भरता व्यक्त करने के लिए इनहेरिटेड में मिली विशेषताएँ सुविधाजनक होती हैं जिसमें वह प्रकट होती है। उदाहरण के लिए, हम इनहेरिटेड में मिली विशेषता का उपयोग यह ट्रैक करने के लिए कर सकते हैं कि कोई पहचानकर्ता असाइनमेंट के बाईं या दाईं ओर दिखाई देता है या नहीं, यह तय करने के लिए कि पहचानकर्ता के पते या मान की आवश्यकता है या नहीं। संश्लेषित विशेषताओं के विपरीत, इनहेरिटेड में मिली विशेषताएँ मूल और/या सिबलिंग्सों से मान ले सकती हैं। जैसा कि निम्नलिखित उत्पादन में है,


* <math>A \rightarrow \alpha \in P</math> (अर्थात। <math>A \rightarrow \alpha</math> व्याकरण के नियमों में से एक है)
: S → ABC
*<math>\alpha = \alpha_1 \ldots \alpha_n, \forall i, 1 \leq i \leq n: \alpha_i \in (V_n \cup V_t)</math> (अर्थात नियम के मुख्य भाग में प्रत्येक प्रतीक या तो नॉनटर्मिनल है या टर्मिनल)
*<math>A.a = f(\alpha_{j_1}.a_1, \ldots ,\alpha_{j_m}.a_m)</math>, कहाँ <math>\{\alpha_{j_1}, \ldots ,\alpha_{j_m}\} \subseteq \{\alpha_1, \ldots ,\alpha_n\}</math> (अर्थात विशेषता का मान एक फ़ंक्शन है <math>f</math> नियम के मुख्य भाग में प्रतीकों से कुछ मानों पर लागू)


==विरासत में मिले गुण==
जहां A, S, B और C से मान प्राप्त कर सकता है। चूंकि B, S, A और C से मान ले सकता है। इसी प्रकार, C, S, A और B से मान ले सकता है।
पार्स ट्री में एक नोड पर विरासत में मिली विशेषता को माता-पिता या भाई-बहन में विशेषता मानों का उपयोग करके परिभाषित किया गया है। किसी प्रोग्रामिंग भाषा निर्माण की उस संदर्भ पर निर्भरता व्यक्त करने के लिए विरासत में मिली विशेषताएँ सुविधाजनक होती हैं जिसमें वह प्रकट होती है। उदाहरण के लिए, हम विरासत में मिली विशेषता का उपयोग यह ट्रैक करने के लिए कर सकते हैं कि कोई पहचानकर्ता असाइनमेंट के बाईं या दाईं ओर दिखाई देता है या नहीं, यह तय करने के लिए कि पहचानकर्ता के पते या मूल्य की आवश्यकता है या नहीं। संश्लेषित विशेषताओं के विपरीत, विरासत में मिली विशेषताएँ माता-पिता और/या भाई-बहनों से मूल्य ले सकती हैं। जैसा कि निम्नलिखित उत्पादन में है,


: एस → एबीसी
==विशेष प्रकार के एट्रिब्यूटेड ग्रामर==
 
* [[एल-विशेषीकृत व्याकरण|एल-एट्रिब्यूटेड ग्रामर]]: इनहेरिटेड में मिली विशेषताओं का मूल्यांकन एब्स्ट्रेक्ट सिंटैक्स ट्री के बाएं से दाएं ट्रैवर्सल में किया जा सकता है
जहां A, S, B और C से मान प्राप्त कर सकता है। B, S, A और C से मान ले सकता है। इसी तरह, C, S, A और B से मान ले सकता है।
* [[ईसीएलआर-विशेषीकृत व्याकरण|ईसीएलआर-एट्रिब्यूटेड ग्रामर]]: एल-एट्रिब्यूटेड ग्रामर जिसकी इनहेरिटेड में मिली विशेषताओं का मूल्यांकन [[नीचे से ऊपर का विश्लेषण|बॉटम-अप पार्सिंग]] में भी किया जा सकता है।
 
* ईसी[[एलआर-विशेषीकृत व्याकरण|एलआर-एट्रिब्यूटेड ग्रामर]]: एलआर-एट्रिब्यूटेड ग्रामरों का उपसमूह जहां इनहेरिटेड में मिली विशेषताओं के मूल्यांकन को अनुकूलित करने के लिए समतुल्य वर्गों का उपयोग किया जा सकता है।
==विशेष प्रकार के गुण व्याकरण==
* एस-विशेषता ग्रामर: सरल प्रकार का विशेषता ग्रामर, केवल संश्लेषित विशेषताओं का उपयोग करता है, किन्तु कोई इनहेरिटेड में मिली विशेषताएँ नहीं है।
* [[एल-विशेषीकृत व्याकरण]]: विरासत में मिली विशेषताओं का मूल्यांकन अमूर्त सिंटैक्स ट्री के एक बाएं से दाएं ट्रैवर्सल में किया जा सकता है
* [[ईसीएलआर-विशेषीकृत व्याकरण]]: एक एल-एट्रिब्यूटेड व्याकरण जिसकी विरासत में मिली विशेषताओं का मूल्यांकन [[नीचे से ऊपर का विश्लेषण]] में भी किया जा सकता है।
* ईसी[[एलआर-विशेषीकृत व्याकरण]]: एलआर-विशेषीकृत व्याकरणों का एक उपसमूह जहां विरासत में मिली विशेषताओं के मूल्यांकन को अनुकूलित करने के लिए समतुल्य वर्गों का उपयोग किया जा सकता है।
* एस-विशेषता व्याकरण: एक सरल प्रकार का विशेषता व्याकरण, केवल संश्लेषित विशेषताओं का उपयोग करता है, लेकिन कोई विरासत में मिली विशेषताएँ नहीं


==यह भी देखें==
==यह भी देखें==
* व्याकरण जोड़ें
* ग्रामर एफ्फिक्स
* [[वान विजनगार्डन व्याकरण]] व्याकरण
* [[वान विजनगार्डन व्याकरण|वान विजनगार्डन ग्रामर]]
* [[सिंटैक्स-निर्देशित अनुवाद]]
* [[सिंटैक्स-निर्देशित अनुवाद|सिंटैक्स-डिरेक्टेड ट्रांसलेशन]]  


==संदर्भ==
==कॉन्टेक्स्ट==
{{Reflist}}
{{Reflist}}
* Original paper introducing attributed grammars: {{Cite journal
* Original paper introducing attributed grammars: {{Cite journal
Line 82: Line 81:
* Ox is an attribute grammar compiling system that augments [[Lex (software)|Lex]] and [[Yacc]] specifications with definitions of synthesized and inherited attributes written in a combination of Ox and [[C (programming language)|C]]/[[C++]] syntax. From these specifications, Ox generates ordinary Lex and Yacc specifications that build and decorate an attributed [[parse tree]]. Ox works with the Lex and Yacc versions distributed in the [[Unix]] and [[Oracle Solaris|Solaris]] operating systems, [[Flex (lexical analyser generator)|Flex]], [[RE/flex]], [[GNU Bison|Bison]], [[Berkeley Yacc|BYacc]], [[Btyacc|BtYacc]] and [https://github.com/dino-lang/dino/tree/master/MSTA MSTA (in the DINO GitHub repository)]. (See the [https://sourceforge.net/projects/ox-attribute-grammar-compiler/ SourceForge repository].)
* Ox is an attribute grammar compiling system that augments [[Lex (software)|Lex]] and [[Yacc]] specifications with definitions of synthesized and inherited attributes written in a combination of Ox and [[C (programming language)|C]]/[[C++]] syntax. From these specifications, Ox generates ordinary Lex and Yacc specifications that build and decorate an attributed [[parse tree]]. Ox works with the Lex and Yacc versions distributed in the [[Unix]] and [[Oracle Solaris|Solaris]] operating systems, [[Flex (lexical analyser generator)|Flex]], [[RE/flex]], [[GNU Bison|Bison]], [[Berkeley Yacc|BYacc]], [[Btyacc|BtYacc]] and [https://github.com/dino-lang/dino/tree/master/MSTA MSTA (in the DINO GitHub repository)]. (See the [https://sourceforge.net/projects/ox-attribute-grammar-compiler/ SourceForge repository].)
* [http://melt.cs.umn.edu/silver/ Silver] is an extensible attribute grammar specification language and system from University of Minnesota. (See also the [https://github.com/melt-umn/silver GitHub repository].)
* [http://melt.cs.umn.edu/silver/ Silver] is an extensible attribute grammar specification language and system from University of Minnesota. (See also the [https://github.com/melt-umn/silver GitHub repository].)
[[Category: औपचारिक भाषाएँ]] [[Category: संकलक निर्माण]] [[Category: पदच्छेद]]


[[Category: Machine Translated Page]]
[[Category:Created On 26/07/2023]]
[[Category:Created On 26/07/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Pages with syntax highlighting errors]]
[[Category:Templates Vigyan Ready]]
[[Category:औपचारिक भाषाएँ]]
[[Category:पदच्छेद]]
[[Category:संकलक निर्माण]]

Latest revision as of 16:39, 8 August 2023

एट्रिब्यूटेड ग्रामर फॉर्मल ग्रामर को शब्दार्थ सूचना प्रसंस्करण के साथ पूरक करने की फॉर्मल विधि है। इस प्रकार से सिमेंटिक जानकारी ग्रामर के टर्मिनल और नॉनटर्मिनल सिम्बल्स से जुड़े एट्रिब्यूट (कंप्यूटिंग) में स्टोर्ड करती है। और विशेषताओं के मान ग्रामर के निर्माण से जुड़े विशेषता मूल्यांकन नियमों का परिणाम हैं। अतः विशेषताएँ एब्स्ट्रेक्ट सिंटैक्स ट्री में कहीं से भी जानकारी को नियंत्रित और फॉर्मल विधि से स्थानांतरित करने की अनुमति देती हैं।[1]

प्रत्येक सिमेंटिक फ़ंक्शन केवल उत्पादन नियम में होने वाले सिम्बल्स की विशेषताओं से संबंधित है: सिमेंटिक फ़ंक्शन पैरामीटर और उसके परिणाम दोनों विशेष नियम से सिम्बल्स की विशेषताएं हैं। जब कोई सिमेंटिक फ़ंक्शन नियम के बाईं ओर सिम्बल्स की किसी विशेषता के मान को परिभाषित करता है, तो विशेषता को संश्लेषित कहा जाता है; अन्यथा इसे इनहेरिटेड कहा जाता है।[2] इस प्रकार, संश्लेषित विशेषताएँ सिमेंटिक जानकारी को पार्स ट्री तक पारित करने का कार्य करती हैं, जबकि इनहेरिटेड में मिली विशेषताएँ मूल नोड्स से नीचे और सिंटैक्स ट्री के पार मानों को पारित करने की अनुमति देती हैं।

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

इतिहास

अतः एट्रिब्यूटेड ग्रामर का आविष्कार डोनाल्ड नुथ और पीटर वेगनर द्वारा किया गया था।[3] जबकि समग्र अवधारणा के लिए डोनाल्ड नुथ को श्रेय दिया जाता है, किन्तु पीटर वेगनर ने नुथ के साथ वार्तालाप के समय इनहेरिटेड में मिली विशेषताओं का आविष्कार किया गया था। कुछ भ्रूणीय विचार पीछे छिपे हैं[3] और लेखक एडगर टी. नेड आयरन्स के कार्य के लिए,[4] आईएमपी (प्रोग्रामिंग लैंग्वेज) मिलते हैं।

उदाहरण

निम्नलिखित सरल कॉन्टेक्स्ट-मुक्त ग्रामर है जो की पूर्णांकों के एट्रिब्यूटेडन और योग से बनी लैंग्वेज का वर्णन कर सकता है।

 Expr  Expr + Term                                                                                                            
 Expr  Term                                                                                                         
 Term  Term * Factor                                                                                                                                                              
 Term  Factor
 Factor  "(" Expr ")"
 Factor  integer

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

Expr1 → Expr2 + Term [ Expr1.value = Expr2.value + Term.value ]
 Expr → Term [ Expr.value = Term.value ]
 Term1 → Term2 * Factor [ Term1.value = Term2.value * Factor.value ]
 Term → Factor [ Term.value = Factor.value ]
 Factor → "(" Expr ")" [ Factor.value =  Expr.value ]
 Factor → integer [ Factor.value = strToInt(integer.str) ]

संश्लेषित एट्रिब्यूटेड

एक संश्लेषित विशेषता की गणना चाइल्ड की विशेषताओं के वैल्यू से की जाती है। चूँकि चाइल्ड के वैल्यू की गणना पहले की जानी चाहिए, यह नीचे से ऊपर की ओर प्रसार का उदाहरण है।[5] संश्लेषित विशेषता को फॉर्मल रूप से परिभाषित करने के लिए , आइए फॉर्मल ग्रामर होने दें, जहाँ

  • गैर टर्मिनल सिम्बल्स का सेट है
  • टर्मिनल सिम्बल्स का सेट है
  • फॉर्मल प्रोडक्शंस का सेट है
  • डिस्टिंगुइशेड, या प्रारंभ, सिम्बल्स है

पुनः, नॉनटर्मिनल सिम्बल्स की श्रृंखला दी गई और विशेषता नाम , यदि ये तीनों नियम पूर्ण होते हैं तो यह संश्लेषित विशेषता है:

  • (अर्थात। ग्रामर के नियमों में से है)
  • (अर्थात नियम के मुख्य भाग में प्रत्येक सिम्बल्स या तो नॉनटर्मिनल या टर्मिनल है)
  • , जहाँ (अर्थात विशेषता का मान फ़ंक्शन है नियम के मुख्य भाग में सिम्बल्स से कुछ मानों पर प्रयुक्त होता है)

इनहेरिटेड एट्रिब्यूटेड

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

S → ABC

जहां A, S, B और C से मान प्राप्त कर सकता है। चूंकि B, S, A और C से मान ले सकता है। इसी प्रकार, C, S, A और B से मान ले सकता है।

विशेष प्रकार के एट्रिब्यूटेड ग्रामर

  • एल-एट्रिब्यूटेड ग्रामर: इनहेरिटेड में मिली विशेषताओं का मूल्यांकन एब्स्ट्रेक्ट सिंटैक्स ट्री के बाएं से दाएं ट्रैवर्सल में किया जा सकता है
  • ईसीएलआर-एट्रिब्यूटेड ग्रामर: एल-एट्रिब्यूटेड ग्रामर जिसकी इनहेरिटेड में मिली विशेषताओं का मूल्यांकन बॉटम-अप पार्सिंग में भी किया जा सकता है।
  • ईसीएलआर-एट्रिब्यूटेड ग्रामर: एलआर-एट्रिब्यूटेड ग्रामरों का उपसमूह जहां इनहेरिटेड में मिली विशेषताओं के मूल्यांकन को अनुकूलित करने के लिए समतुल्य वर्गों का उपयोग किया जा सकता है।
  • एस-विशेषता ग्रामर: सरल प्रकार का विशेषता ग्रामर, केवल संश्लेषित विशेषताओं का उपयोग करता है, किन्तु कोई इनहेरिटेड में मिली विशेषताएँ नहीं है।

यह भी देखें

कॉन्टेक्स्ट

  1. Knuth 1968, p. 134.
  2. Knuth 1968, p. 132.
  3. 3.0 3.1 D. E. Knuth: The genesis of attribute grammars. Proceedings of the international conference on Attribute grammars and their applications (1990), LNCS, vol. 461, 1–12.
  4. "Main".
  5. Knuth 1968, p. 130.


बाहरी संबंध