गुण व्याकरण

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

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

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

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

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

एक्सप्र → एक्सप्र + टर्म एक्सप्र → अवधि पद → पद * कारक पद → कारक फ़ैक्टर → (एक्सपीआर) गुणनखंड → पूर्णांक

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

संश्लेषित गुण
एक संश्लेषित विशेषता की गणना बच्चों की विशेषताओं के मूल्यों से की जाती है। चूँकि बच्चों के मूल्यों की गणना पहले की जानी चाहिए, यह नीचे से ऊपर की ओर प्रसार का एक उदाहरण है। एक संश्लेषित विशेषता को औपचारिक रूप से परिभाषित करने के लिए, आइए $$G= \langle V_n,V_t,P,S \rangle$$ एक औपचारिक व्याकरण हो, जहां


 * $$V_n$$ गैर टर्मिनल प्रतीकों का सेट है
 * $$V_t$$ टर्मिनल प्रतीकों का सेट है
 * $$P$$ औपचारिक व्याकरण का सेट है# व्याकरण का वाक्य-विन्यास
 * $$S$$ विशिष्ट, या प्रारंभ, प्रतीक है

फिर, नॉनटर्मिनल प्रतीकों की एक श्रृंखला दी गई $$A$$ और एक विशेषता नाम $$a$$, $$A.a$$ यदि ये तीनों शर्तें पूरी होती हैं तो यह एक संश्लेषित विशेषता है:


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

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


 * एस → एबीसी

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

विशेष प्रकार के गुण व्याकरण

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

यह भी देखें

 * व्याकरण जोड़ें
 * वान विजनगार्डन व्याकरण व्याकरण
 * सिंटैक्स-निर्देशित अनुवाद

संदर्भ

 * Original paper introducing attributed grammars:, backup

बाहरी संबंध

 * Why Attribute Grammars Matter, The Monad Reader, Issue 4, July 5, 2005. (This article narrates on how the formalism of attribute grammars brings aspect-oriented programming to functional programming by helping writing catamorphisms compositionally. It refers to the Utrecht University Attribute Grammar system (see also Lrc: A Purely Functional, Higher-Order Attribute Grammar based System) as the implementation used in the examples.)
 * Attribute grammar in relation to Haskell and functional programming.
 * Jukka Paakki: Attribute grammar paradigms—a high-level methodology in language implementation. ACM Computing Surveys 27:2 (June 1995), 196–255.
 * Ox is an attribute grammar compiling system that augments Lex and Yacc specifications with definitions of synthesized and inherited attributes written in a combination of Ox and 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 Solaris operating systems, Flex, RE/flex, Bison, BYacc, BtYacc and MSTA (in the DINO GitHub repository). (See the SourceForge repository.)
 * Silver is an extensible attribute grammar specification language and system from University of Minnesota. (See also the GitHub repository.)