स्पिरिट पार्सर फ्रेमवर्क: Difference between revisions

From Vigyanwiki
(Created page with "{{norefs|date=November 2012}} स्पिरिट पार्सर फ्रेमवर्क एक वस्तु के उन्मुख पुनराव...")
 
No edit summary
Line 1: Line 1:
{{norefs|date=November 2012}}
स्पिरिट पार्सर फ्रेमवर्क [[ वस्तु के उन्मुख |वस्तु के उन्मुख]] [[ पुनरावर्ती वंश पार्सर |पुनरावर्ती वंश पार्सर]] [[पार्सर जनरेटर]] फ्रेमवर्क है जिसे टेम्पलेट [[मेटाप्रोग्रामिंग]] तकनीकों का उपयोग करके कार्यान्वित किया जाता है। [[अभिव्यक्ति टेम्पलेट्स]] उपयोगकर्ताओं को विस्तारित बैकस-नौर फॉर्म (ईबीएनएफ) के सिंटैक्स को पूरी तरह से [[सी++]] में अनुमानित करने की अनुमति देते हैं। पार्सर ऑब्जेक्ट [[ऑपरेटर ओवरलोडिंग]] के माध्यम से बनाए जाते हैं और परिणाम बैकट्रैकिंग एलएल पार्सर|एलएल(∞) पार्सर होता है जो [[अस्पष्ट व्याकरण]] को पार्स करने में सक्षम होता है।
स्पिरिट पार्सर फ्रेमवर्क एक [[ वस्तु के उन्मुख ]] [[ पुनरावर्ती वंश पार्सर ]] [[पार्सर जनरेटर]] फ्रेमवर्क है जिसे टेम्पलेट [[मेटाप्रोग्रामिंग]] तकनीकों का उपयोग करके कार्यान्वित किया जाता है। [[अभिव्यक्ति टेम्पलेट्स]] उपयोगकर्ताओं को विस्तारित बैकस-नौर फॉर्म (ईबीएनएफ) के सिंटैक्स को पूरी तरह से [[सी++]] में अनुमानित करने की अनुमति देते हैं। पार्सर ऑब्जेक्ट [[ऑपरेटर ओवरलोडिंग]] के माध्यम से बनाए जाते हैं और परिणाम एक बैकट्रैकिंग एलएल पार्सर|एलएल(∞) पार्सर होता है जो [[अस्पष्ट व्याकरण]] को पार्स करने में सक्षम होता है।


स्पिरिट का उपयोग [[लेक्सिंग]] और पार्सिंग दोनों के लिए एक साथ या अलग-अलग किया जा सकता है।
स्पिरिट का उपयोग [[लेक्सिंग]] और पार्सिंग दोनों के लिए साथ या अलग-अलग किया जा सकता है।


यह फ्रेमवर्क बूस्ट C++ लाइब्रेरीज़ का हिस्सा है।
यह फ्रेमवर्क बूस्ट C++ लाइब्रेरीज़ का हिस्सा है।
Line 11: Line 10:


{|class="wikitable"
{|class="wikitable"
! syntax
! सिंटेक्स
! explanation
! व्याख्या
|-
|-
| <code>x >> y</code>
| <code>x >> y</code>
| Match x followed by y.
| x के पश्चात y को मैच करें।
|-
|-
| <code>x > y</code>
| <code>x > y</code>
| After matching x, expect y.
| x को मैच करने के पश्चात, y की अपेक्षा करें।
|-
|-
| <code>*x</code>
| <code>*x</code>
| Match x repeated zero or more times. This represents the [[Kleene star]]; C++ lacks an unary postfix [[Operator (programming)|operator]] *.
| मैच x को शून्य या अधिक बार दोहराया गया। यह [[Kleene star|क्लेन स्टार]] का प्रतिनिधित्व करता है; सी++ यूनरी पोस्टफ़िक्स [[Operator (programming)|ऑपरेटर]] का अभाव है।
|-
|-
| <code>x &#124; y</code>
| <code>x &#124; y</code>
| Match x.  If x does not match, try to match y.
| x को मैच करें। यदि x मैच नहीं करता है, तो y से मिलान करने का प्रयास करें।
|-
|-
| <code>+x</code>
| <code>+x</code>
| Match a series of one or more occurrences of x.
| x की एक या अधिक घटनाओं की श्रृंखला को मैच करें।
|-
|-
| <code>-x</code>
| <code>-x</code>
| Match x zero or one time.
| x शून्य या एक बार मैच करें।
|-
|-
| <code>x & y</code>
| <code>x & y</code>
| Match x and y.
| x और y को मैच करें।
|-
|-
| <code>x - y</code>
| <code>x - y</code>
| Match x but not y.
| x को मैच करें परंतु y का नहीं।
|-
|-
| <code>x ^ y</code>
| <code>x ^ y</code>
| Match x, or y, or both, in any order.
| किसी भी क्रम में x, या y, या दोनों को मैच करें।
|-
|-
| <code>x &#124;&#124; y</code>
| <code>x &#124;&#124; y</code>
| Match x, or y, or x followed by y.
| x, या y, या x के पश्चात y को मैच करें।
|-
|-
| <code>x [ ''function_expression'' ]</code>
| <code>x [ ''function_expression'' ]</code>
| Execute the function/functor returned by function_expression, if x matched.
| यदि x मैच करें, तो function_expression द्वारा रिटर्न किये गए फ़ंक्शन/फ़ंक्टर को निष्पादित करें।
|-
|-
| <code>( x )</code>
| <code>( x )</code>
| Match x (can be used for priority grouping)
| मैचिंग x (प्राथमिकता समूहीकरण के लिए उपयोग किया जा सकता है)
|-
|-
| <code>x % y</code>
| <code>x % y</code>
| Match one or more occurrences of x, separated by occurrences of y.
| x की एक या अधिक घटनाओं को y की घटनाओं से भिन्न करके मैच करें।
|-
|-
| <code>~x</code>
| <code>~x</code>
| Match anything but x (only with character classes such as ch_p or alnum_p)
| x के अतिरिक्त किसी भी चीज़ को मैच करें (केवल करैक्टर क्लासेज जैसे ch_p या alnum_p के साथ)
|}
|}



Revision as of 19:26, 3 August 2023

स्पिरिट पार्सर फ्रेमवर्क वस्तु के उन्मुख पुनरावर्ती वंश पार्सर पार्सर जनरेटर फ्रेमवर्क है जिसे टेम्पलेट मेटाप्रोग्रामिंग तकनीकों का उपयोग करके कार्यान्वित किया जाता है। अभिव्यक्ति टेम्पलेट्स उपयोगकर्ताओं को विस्तारित बैकस-नौर फॉर्म (ईबीएनएफ) के सिंटैक्स को पूरी तरह से सी++ में अनुमानित करने की अनुमति देते हैं। पार्सर ऑब्जेक्ट ऑपरेटर ओवरलोडिंग के माध्यम से बनाए जाते हैं और परिणाम बैकट्रैकिंग एलएल पार्सर|एलएल(∞) पार्सर होता है जो अस्पष्ट व्याकरण को पार्स करने में सक्षम होता है।

स्पिरिट का उपयोग लेक्सिंग और पार्सिंग दोनों के लिए साथ या अलग-अलग किया जा सकता है।

यह फ्रेमवर्क बूस्ट C++ लाइब्रेरीज़ का हिस्सा है।

संचालक

C++ भाषा की सीमाओं के कारण, स्पिरिट का सिंटैक्स C++ की ऑपरेटर प्राथमिकताओं के आसपास डिज़ाइन किया गया है, जबकि विस्तारित बैकस-नौर फॉर्म और नियमित अभिव्यक्ति दोनों के समान है।

सिंटेक्स व्याख्या
x >> y x के पश्चात y को मैच करें।
x > y x को मैच करने के पश्चात, y की अपेक्षा करें।
*x मैच x को शून्य या अधिक बार दोहराया गया। यह क्लेन स्टार का प्रतिनिधित्व करता है; सी++ यूनरी पोस्टफ़िक्स ऑपरेटर का अभाव है।
x | y x को मैच करें। यदि x मैच नहीं करता है, तो y से मिलान करने का प्रयास करें।
+x x की एक या अधिक घटनाओं की श्रृंखला को मैच करें।
-x x शून्य या एक बार मैच करें।
x & y x और y को मैच करें।
x - y x को मैच करें परंतु y का नहीं।
x ^ y किसी भी क्रम में x, या y, या दोनों को मैच करें।
x || y x, या y, या x के पश्चात y को मैच करें।
x [ function_expression ] यदि x मैच करें, तो function_expression द्वारा रिटर्न किये गए फ़ंक्शन/फ़ंक्टर को निष्पादित करें।
( x ) मैचिंग x (प्राथमिकता समूहीकरण के लिए उपयोग किया जा सकता है)
x % y x की एक या अधिक घटनाओं को y की घटनाओं से भिन्न करके मैच करें।
~x x के अतिरिक्त किसी भी चीज़ को मैच करें (केवल करैक्टर क्लासेज जैसे ch_p या alnum_p के साथ)


उदाहरण

यह उदाहरण दिखाता है कि सिमेंटिक क्रिया के साथ इनलाइन पार्सर अभिव्यक्ति का उपयोग कैसे करें।

#include <string>
#include <iostream>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
 
int main()
{
  namespace qi = boost::spirit::qi;

  std::string input;
 
  std::cout << "Input a line: \n";
  getline(std::cin, input);
  std::cout << "Got '" << input << "'.\n";
 
  unsigned count = 0;
  /*  
      Next, parse the input (input.c_str()),
      using a parser constructed with the following semantics:
 
      Zero or more occurrences of (
          literal string "cat" (when matched, increment the counter "count")
      or  any character (which will be skipped)
      )

     The parser is constructed by the compiler using operator overloading and
     template matching, so the actual work is done within qi::parse(), and the
     expression starting with * only initializes the rule object that the parse
     function uses.

  */
  auto rule = *(qi::lit("cat") [ ++qi::_val ] | qi::omit[qi::char_]);
  qi::parse(input.begin(), input.end(), rule, count);
  

  // Finally, show results.
  std::cout << "The input contained " << count << " occurrences of 'cat'\n";
}


बाहरी संबंध