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

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


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


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


==इतिहास==
==इतिहास==
Line 9: Line 9:


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


   एक्सप्र → एक्सप्र + टर्म
   एक्सप्र → एक्सप्र + टर्म
Line 18: Line 18:
   गुणनखंड → ''पूर्णांक''
   गुणनखंड → ''पूर्णांक''


व्याकरण में लिखी गई अभिव्यक्ति के परिणाम की गणना करने के लिए निम्नलिखित विशेषता व्याकरण का उपयोग किया जा सकता है। ध्यान दें कि यह व्याकरण केवल संश्लेषित मानों का उपयोग करता है, और इसलिए यह एक एस-गुणित व्याकरण है।
व्याकरण में लिखी गई अभिव्यक्ति के परिणाम की गणना करने के लिए निम्नलिखित विशेषता व्याकरण का उपयोग किया जा सकता है। ध्यान दें कि यह व्याकरण केवल संश्लेषित मानों का उपयोग करता है, और इसलिए यह एस-गुणित व्याकरण है।
   एक्सप्र<sub>1</sub>→ एक्सप्र<sub>2</sub>+ अवधि [एक्सप्र<sub>1</sub>.मूल्य = एक्सप्र<sub>2</sub>.मूल्य + अवधि.मूल्य ]
   एक्सप्र<sub>1</sub>→ एक्सप्र<sub>2</sub>+ अवधि [एक्सप्र<sub>1</sub>.मूल्य = एक्सप्र<sub>2</sub>.मूल्य + अवधि.मूल्य ]
   एक्सप्र → टर्म [ एक्सप्र.वैल्यू = टर्म.वैल्यू ]
   एक्सप्र → टर्म [ एक्सप्र.वैल्यू = टर्म.वैल्यू ]
Line 27: Line 27:


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


* <math>V_n</math> गैर टर्मिनल प्रतीकों का सेट है
* <math>V_n</math> गैर टर्मिनल प्रतीकों का सेट है
Line 34: Line 34:
* <math>S</math> विशिष्ट, या प्रारंभ, प्रतीक है
* <math>S</math> विशिष्ट, या प्रारंभ, प्रतीक है


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


* <math>A \rightarrow \alpha \in P</math> (अर्थात। <math>A \rightarrow \alpha</math> व्याकरण के नियमों में से एक है)
* <math>A \rightarrow \alpha \in P</math> (अर्थात। <math>A \rightarrow \alpha</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>\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> नियम के मुख्य भाग में प्रतीकों से कुछ मानों पर लागू)
*<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> नियम के मुख्य भाग में प्रतीकों से कुछ मानों पर लागू)


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


: एस → एबीसी
: एस → एबीसी
Line 48: Line 48:


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


==यह भी देखें==
==यह भी देखें==

Revision as of 09:57, 4 August 2023

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

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

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

इतिहास

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

उदाहरण

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

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

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

 एक्सप्र1→ एक्सप्र2+ अवधि [एक्सप्र1.मूल्य = एक्सप्र2.मूल्य + अवधि.मूल्य ]
 एक्सप्र → टर्म [ एक्सप्र.वैल्यू = टर्म.वैल्यू ]
 अवधि1→ अवधि2* कारक [अवधि1.मूल्य = अवधि2.मूल्य * कारक.मूल्य ]
 पद → गुणनखंड [अवधि.मूल्य = गुणनखंड.मूल्य]
 फ़ैक्टर → (एक्सप्र) [फैक्टर.वैल्यू = एक्सप्र.वैल्यू]
 गुणनखंड → पूर्णांक [ Factor.value = strToInt(पूर्णांक.str) ]

संश्लेषित गुण

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

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

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

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

विरासत में मिले गुण

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

एस → एबीसी

जहां 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.


बाहरी संबंध