अर्ली पार्सर: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Algorithm for parsing context-free languages}} {{Infobox algorithm |name={{PAGENAMEBASE}} |class=Parsing grammars that are Context-free grammar|conte...")
 
(TEXT)
Line 13: Line 13:
}}
}}


[[कंप्यूटर विज्ञान]] में, अर्ली [[पदच्छेद]]र [[स्ट्रिंग (कंप्यूटर विज्ञान)]] को पार्स करने के लिए एक [[कलन विधि]] है जो किसी दिए गए [[संदर्भ-मुक्त भाषा]] से संबंधित है, हालांकि (संस्करण के आधार पर) यह कुछ अशक्त व्याकरणों के साथ समस्याओं का सामना कर सकता है।<ref>{{cite web|last=Kegler|first=Jeffrey|title=What is the Marpa algorithm?|url=http://blogs.perl.org/users/jeffrey_kegler/2011/11/what-is-the-marpa-algorithm.html|access-date=20 August 2013}}</ref> एल्गोरिथ्म, जिसका नाम इसके आविष्कारक [[जे अर्ली]] के नाम पर रखा गया है, एक [[चार्ट पार्सर]] है जो [[गतिशील प्रोग्रामिंग]] का उपयोग करता है; इसका उपयोग मुख्य रूप से कम्प्यूटेशनल भाषाविज्ञान में पार्सिंग के लिए किया जाता है। इसे पहली बार उनके शोध प्रबंध में पेश किया गया था<ref name=Earley1>{{cite book
[[कंप्यूटर विज्ञान]] में, अर्ली [[पदच्छेद|पार्सर]] अर्ली पार्सर किसी दिए गए [[संदर्भ-मुक्त भाषा|संदर्भ-मुक्त लैंग्वेज]] से संबंधित स्ट्रिंग्स को पार्स करने के लिए एक एल्गोरिदम है, हालांकि (परिवर्ती के आधार पर) यह कुछ अशक्त व्याकरणों के साथ समस्याओं का सामना कर सकता है।<ref>{{cite web|last=Kegler|first=Jeffrey|title=What is the Marpa algorithm?|url=http://blogs.perl.org/users/jeffrey_kegler/2011/11/what-is-the-marpa-algorithm.html|access-date=20 August 2013}}</ref> एल्गोरिथ्म, जिसका नाम इसके आविष्कारक [[जे अर्ली]] के नाम पर रखा गया है, एक [[चार्ट पार्सर]] है जो [[गतिशील प्रोग्रामिंग|गतिक क्रमादेशन]] का उपयोग करता है; इसका उपयोग मुख्य रूप से अभिकलनात्मक भाषाविज्ञान में पार्सिंग के लिए किया जाता है। इसे पहली बार 1968 में उनके शोध प्रबंध में प्रस्तावित किया गया था<ref name=Earley1>{{cite book
  | last=Earley
  | last=Earley
  | first=Jay
  | first=Jay
Line 19: Line 19:
  | year=1968
  | year=1968
  | publisher=Carnegie-Mellon Dissertation
  | publisher=Carnegie-Mellon Dissertation
  | url=http://reports-archive.adm.cs.cmu.edu/anon/anon/usr/ftp/scan/CMU-CS-68-earley.pdf}}</ref> 1968 में (और बाद में एक पत्रिका में संक्षिप्त, अधिक सुपाठ्य रूप में प्रकाशित हुआ<ref name="Earley2">{{citation
  | url=http://reports-archive.adm.cs.cmu.edu/anon/anon/usr/ftp/scan/CMU-CS-68-earley.pdf}}</ref> (और बाद में एक जर्नल में संक्षिप्त, अधिक सुपाठ्य रूप में प्रकाशित हुआ<ref name="Earley2">{{citation
  | last = Earley | first = Jay | author-link = Jay Earley
  | last = Earley | first = Jay | author-link = Jay Earley
  | doi = 10.1145/362007.362035 | url = http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/cmt-55/lti/Courses/711/Class-notes/p94-earley.pdf | archive-url = https://web.archive.org/web/20040708052627/http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/cmt-55/lti/Courses/711/Class-notes/p94-earley.pdf | url-status = dead | archive-date = 2004-07-08 | issue = 2
  | doi = 10.1145/362007.362035 | url = http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/cmt-55/lti/Courses/711/Class-notes/p94-earley.pdf | archive-url = https://web.archive.org/web/20040708052627/http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/cmt-55/lti/Courses/711/Class-notes/p94-earley.pdf | url-status = dead | archive-date = 2004-07-08 | issue = 2
Line 26: Line 26:
  | title = An efficient context-free parsing algorithm
  | title = An efficient context-free parsing algorithm
  | volume = 13
  | volume = 13
  | year = 1970| s2cid = 47032707 }}</ref>).
  | year = 1970| s2cid = 47032707 }}</ref>)


अर्ली पार्सर आकर्षक हैं क्योंकि वे [[एलआर पार्सर]] और [[एलएल पार्सर]] के विपरीत सभी संदर्भ-मुक्त भाषाओं को पार्स कर सकते हैं, जो आमतौर पर [[ संकलक ]]ों में उपयोग किए जाते हैं लेकिन जो केवल भाषाओं के प्रतिबंधित वर्गों को संभाल सकते हैं। सामान्य स्थिति में अर्ली पार्सर घन समय में निष्पादित होता है <math>{O}(n^3)</math>, जहां n पार्स की गई स्ट्रिंग की लंबाई है, स्पष्ट व्याकरण के लिए द्विघात समय <math>{O}(n^2)</math>,<ref>{{cite book | isbn=978-0-201-02988-8 | author=John E. Hopcroft and Jeffrey D. Ullman | title=ऑटोमेटा सिद्धांत, भाषाएँ और संगणना का परिचय| location=Reading/MA | publisher=Addison-Wesley | year=1979 | url-access=registration | url=https://archive.org/details/introductiontoau00hopc }} p.145</ref> और सभी नियतात्मक संदर्भ-मुक्त व्याकरणों के लिए रैखिक समय। यह विशेष रूप से तब अच्छा प्रदर्शन करता है जब नियम बाएँ पुनरावर्ती|बाएँ-पुनरावर्ती रूप से लिखे जाते हैं।
अर्ली पार्सर आकर्षक हैं क्योंकि वे [[एलआर पार्सर]] और [[एलएल पार्सर]] के विपरीत सभी संदर्भ-मुक्त लैंग्वेज को पार्स कर सकते हैं, जो विशिष्ट रूप से [[ संकलक |अनुभाषक]] में उपयोग किए जाते हैं लेकिन जो केवल लैंग्वेज के प्रतिबंधित वर्गों को प्रबंध कर सकते हैं। अर्ली पार्सर सामान्य स्थिति <math>{O}(n^3)</math> में घनीय समय में निष्पादित होता है, जहां n पार्स की गई स्ट्रिंग की लंबाई है, स्पष्ट व्याकरण <math>{O}(n^2)</math> के लिए द्विघात समय है,<ref>{{cite book | isbn=978-0-201-02988-8 | author=John E. Hopcroft and Jeffrey D. Ullman | title=ऑटोमेटा सिद्धांत, भाषाएँ और संगणना का परिचय| location=Reading/MA | publisher=Addison-Wesley | year=1979 | url-access=registration | url=https://archive.org/details/introductiontoau00hopc }} p.145</ref> और सभी नियतात्मक संदर्भ-मुक्त व्याकरणों के लिए रैखिक समय है। यह विशेष रूप से अच्छा प्रदर्शन करता है जब नियम बाएँ-पुनरावर्ती रूप से लिखे जाते हैं।


== प्रारंभिक पहचानकर्ता ==
== अर्ली पहचानकर्ता ==
निम्नलिखित एल्गोरिदम अर्ली पहचानकर्ता का वर्णन करता है। पहचानकर्ता को एक पार्स ट्री बनाने के लिए संशोधित किया जा सकता है क्योंकि यह पहचानता है, और इस तरह इसे एक पार्सर में बदला जा सकता है।
निम्नलिखित एल्गोरिदम अर्ली पहचानकर्ता का वर्णन करता है। पहचानकर्ता को एक पार्स ट्री बनाने के लिए संशोधित किया जा सकता है क्योंकि यह पहचानता है, और इस तरह इसे एक पार्सर में बदला जा सकता है।


== एल्गोरिथ्म ==
== एल्गोरिथ्म ==
निम्नलिखित विवरण में, α, β, और γ टर्मिनल और नॉनटर्मिनल प्रतीकों के किसी [[खाली स्ट्रिंग]] (कंप्यूटर विज्ञान) का प्रतिनिधित्व करते हैं।
निम्नलिखित विवरण में, α, β, और γ टर्मिनलों/नॉनटर्मिनलों (रिक्त स्ट्रिंग सहित) की किसी भी स्ट्रिंग का प्रतिनिधित्व करते हैं, X और Y एकल नॉनटर्मिनलों का प्रतिनिधित्व करते हैं, और a एक टर्मिनल प्रतीक का प्रतिनिधित्व करता है।


अर्ली का एल्गोरिदम एक टॉप-डाउन डायनेमिक प्रोग्रामिंग एल्गोरिदम है। निम्नलिखित में, हम अर्ली के डॉट नोटेशन का उपयोग करते हैं: एक औपचारिक व्याकरण #व्याकरणों का वाक्यविन्यास X → αβ दिया गया है, नोटेशन
अर्ली का एल्गोरिदम एक अधोशीर्ष गतिक क्रमादेशन एल्गोरिदम है। निम्नलिखित में, हम अर्ली के डॉट नोटेशन का उपयोग करते हैं: एक उत्पादन X → αβ दिया गया है, नोटेशन X → α • β एक ऐसी स्थिति का प्रतिनिधित्व करता है जिसमें α को पहले ही पार्स किया जा चुका है और β अपेक्षित है।


इनपुट स्थिति 0 इनपुट से पहले की स्थिति है। इनपुट स्थिति n, nवें टोकन को स्वीकार करने के बाद की स्थिति है। (अनौपचारिक रूप से, इनपुट स्थितियों को लेक्सिकल विश्लेषण सीमाओं पर स्थानों के रूप में सोचा जा सकता है।) प्रत्येक इनपुट स्थिति के लिए, पार्सर एक राज्य सेट उत्पन्न करता है। प्रत्येक अवस्था एक टुपल है (X → α • β, i), जिसमें शामिल है
इनपुट स्थिति 0 इनपुट से पहले की स्थिति है। इनपुट स्थिति n, nवें टोकन को स्वीकार करने के बाद की स्थिति है। (अनौपचारिक रूप से, इनपुट स्थितियों को टोकन सीमाओं पर स्थित स्थानों के रूप में माना जा सकता है।) प्रत्येक इनपुट स्थिति के लिए, पार्सर एक स्थिति समुच्चय उत्पन्न करता है। प्रत्येक अवस्था एक टुपल है (X → α • β, i), जिसमें सम्मिलित है


* वर्तमान में उत्पादन का मिलान किया जा रहा है (X → α β)
* वर्तमान में उत्पादन का सुमेलित किया जा रहा है (X → α β)
* उस उत्पादन में वर्तमान स्थिति (दृश्यमान रूप से बिंदु द्वारा प्रदर्शित)
* उस उत्पादन में वर्तमान स्थिति (दृश्यमान रूप से बिंदु द्वारा प्रदर्शित)
* इनपुट में वह स्थिति जिस पर इस उत्पादन का मिलान शुरू हुआ: मूल स्थिति
* इनपुट में वह स्थिति जहां इस उत्पादन का सुमेलन प्रारम्भ हुआ: ''मूल स्थिति''


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


एक राज्य तब समाप्त होता है जब उसकी वर्तमान स्थिति उत्पादन के दाईं ओर की अंतिम स्थिति होती है, अर्थात, जब राज्य के दृश्य प्रतिनिधित्व में बिंदु के दाईं ओर कोई प्रतीक नहीं होता है।
एक अवस्था तब समाप्त होता है जब उसकी वर्तमान स्थिति उत्पादन के दाईं ओर की अंतिम स्थिति होती है, अर्थात, जब अवस्था के दृश्य प्रतिनिधित्व में बिंदु के दाईं ओर कोई प्रतीक नहीं होता है।


इनपुट स्थिति k पर निर्धारित स्थिति को S(k) कहा जाता है। पार्सर को S(0) के साथ सीड किया गया है जिसमें केवल शीर्ष-स्तरीय नियम शामिल है। पार्सर फिर तीन ऑपरेशनों को बार-बार निष्पादित करता है: भविष्यवाणी, स्कैनिंग और पूर्णता।
इनपुट स्थिति k पर निर्धारित स्थिति को S(k) कहा जाता है। पार्सर को S(0) के साथ सीडित किया गया है जिसमें केवल शीर्ष-स्तरीय नियम सम्मिलित है। पार्सर फिर तीन संचालन को बार-बार निष्पादित करता है: ''पूर्वानुमान'', ''स्कैनिंग'' और ''पूर्णता''।


* भविष्यवाणी: फॉर्म (X → α • Y β, j) के S(k) में प्रत्येक अवस्था के लिए (जहाँ j ऊपर की तरह मूल स्थिति है), बाईं ओर Y के साथ व्याकरण में प्रत्येक उत्पादन के लिए S(k) में (Y → • γ, k) जोड़ें (Y → γ)
* ''पूर्वानुमान'': फॉर्म (X → α • Y β, j) के S(k) में प्रत्येक अवस्था के लिए (जहाँ j ऊपर की तरह मूल स्थिति है), प्रत्येक उत्पादन के लिए S(k) में (Y → • γ, k) जोड़ें बाईं ओर Y वाला व्याकरण  (Y → γ) है।
* स्कैनिंग: यदि a इनपुट स्ट्रीम में अगला प्रतीक है, तो फॉर्म (X → α • a β, j) के S(k) में प्रत्येक स्थिति के लिए, S(k+1) में (X → α a • β, j) जोड़ें।
* ''स्कैनिंग'': यदि a इनपुट स्ट्रीम में अगला प्रतीक है, तो फॉर्म (X → α • a β, j) के S(k) में प्रत्येक स्थिति के लिए, S(k+1) में (X → α a • β, j) जोड़ें है।
* समापन: फॉर्म (Y → γ •, j) के S(k) में प्रत्येक राज्य के लिए, फॉर्म (X → α • Y β, i) के S(j) में सभी राज्यों को खोजें और (X → α Y • β, i) को S(k) में जोड़ें।
* ''पूर्णता'': फॉर्म (Y → γ •, j) के S(k) में प्रत्येक अवस्था के लिए, (X → α • Y β, i) फॉर्म के S(j) में सभी अवस्था खोजें और S(k) में (X → α Y • β, i) जोड़ें है।


राज्य सेट में डुप्लिकेट राज्य नहीं जोड़े जाते, केवल नए राज्य जोड़े जाते हैं। ये तीन ऑपरेशन तब तक दोहराए जाते हैं जब तक सेट में कोई नया राज्य नहीं जोड़ा जा सके। सेट को आम तौर पर संसाधित करने के लिए राज्यों की एक कतार के रूप में कार्यान्वित किया जाता है, जिसमें ऑपरेशन इस पर निर्भर करता है कि यह किस प्रकार की स्थिति है।
अवस्था समुच्चय में प्रतिलिपि अवस्था नहीं जोड़े जाते, केवल नए अवस्था जोड़े जाते हैं। ये तीन संचालन तब तक दोहराए जाते हैं जब तक समुच्चय में कोई नया अवस्था नहीं जोड़ा जा सकता है। समुच्चय को सामान्यतः संसाधित करने के लिए अवस्था की एक क्यू के रूप में कार्यान्वित किया जाता है, जिसमें संचालन इस पर निर्भर करता है कि यह किस प्रकार की स्थिति है।


एल्गोरिदम स्वीकार करता है यदि (X → γ •, 0) S(n) में समाप्त होता है, जहां (X → γ) शीर्ष स्तर-नियम है और n इनपुट लंबाई है, अन्यथा यह अस्वीकार कर देता है।
एल्गोरिदम स्वीकार करता है यदि (X → γ •, 0) S(n) में समाप्त होता है, जहां (X → γ) शीर्ष स्तर-नियम है और n इनपुट लंबाई है, अन्यथा यह अस्वीकार कर देता है।


== स्यूडोकोड ==
== स्यूडोकोड ==
भाषण और भाषा प्रसंस्करण से अनुकूलित<ref name=Jurafsky>{{cite book|last=Jurafsky|first=D.|title=Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition|year=2009|publisher=Pearson Prentice Hall|isbn=9780131873216|url=https://books.google.com/books?id=fZmj5UNK8AQC}}</ref> [[डेनियल जुराफ़्स्की]] और जेम्स एच. मार्टिन द्वारा,
[[डेनियल जुराफ़्स्की]] और जेम्स एच. मार्टिन द्वारा भाषण और लैंग्वेज प्रसंस्करण से अनुकूलित,<ref name="Jurafsky">{{cite book|last=Jurafsky|first=D.|title=Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition|year=2009|publisher=Pearson Prentice Hall|isbn=9780131873216|url=https://books.google.com/books?id=fZmj5UNK8AQC}}</ref>  


<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
DECLARE ARRAY S;
DECLARE ARRAY S;


Line 100: Line 100:
     end
     end
</syntaxhighlight>
</syntaxhighlight>


== उदाहरण ==
== उदाहरण ==
Line 113: Line 112:
  2+3*4
  2+3*4


यह राज्य सेटों का क्रम है:
यह अवस्था समुच्चयों का क्रम है:
{| class="wikitable"
{| class="wikitable"
! (state no.) !! Production !! (Origin) !! Comment
!(राज्य संख्या)
!उत्पादन
!(मूल)
!टिप्पणी
|-----------------------------------------
|-----------------------------------------
! scope="row" colspan="4" style="text-align:left; background:#e9e9e9;font-family:monospace" | S(0): • 2 + 3 * 4
! scope="row" colspan="4" style="text-align:left; background:#e9e9e9;font-family:monospace" | S(0): • 2 + 3 * 4
Line 190: Line 192:
|-
|-
|}
|}
स्थिति (पी एस •, 0) एक पूर्ण पार्स का प्रतिनिधित्व करती है। यह स्थिति S(3) और S(1) में भी दिखाई देती है, जो पूर्ण वाक्य हैं।
स्थिति (P S •, 0) एक पूर्ण पार्स का प्रतिनिधित्व करती है। यह स्थिति S(3) और S(1) में भी दिखाई देती है, जो पूर्ण वाक्य हैं।


== पार्स वन का निर्माण ==
== पार्स वन का निर्माण ==
Line 200: Line 202:
  | publisher=Carnegie-Mellon Dissertation
  | publisher=Carnegie-Mellon Dissertation
  | page=106
  | page=106
  | url=http://reports-archive.adm.cs.cmu.edu/anon/anon/usr/ftp/scan/CMU-CS-68-earley.pdf}}</ref> अर्ली आइटम में प्रत्येक गैर-टर्मिनल से पॉइंटर्स का एक सेट जोड़कर पार्स ट्री के निर्माण के लिए एक एल्गोरिदम का संक्षेप में वर्णन करता है, जिसके कारण इसे पहचाना गया। लेकिन [[मैंने इसे मसरू के रूप में देखा]] ने ध्यान दिया<ref>{{cite book|last1=Tomita|first1=Masaru|title=Efficient Parsing for Natural Language: A Fast Algorithm for Practical Systems|date=April 17, 2013|publisher=Springer Science and Business Media|isbn=978-1475718850|page=74|url=https://books.google.com/books?id=DAjkBwAAQBAJ&q=Tomita%20Efficient%20Parsing%20for%20natural%20Language&pg=PA74|access-date=16 September 2015}}</ref> यह प्रतीकों के बीच संबंधों को ध्यान में नहीं रखता है, इसलिए यदि हम व्याकरण एस एसएस | पर विचार करते हैं b और स्ट्रिंग bbb, यह केवल नोट करता है कि प्रत्येक S एक या दो b से मेल खा सकता है, और इस प्रकार bb और bbbb के लिए नकली व्युत्पत्ति के साथ-साथ bbb के लिए दो सही व्युत्पत्तियाँ उत्पन्न करता है।
  | url=http://reports-archive.adm.cs.cmu.edu/anon/anon/usr/ftp/scan/CMU-CS-68-earley.pdf}}</ref> संक्षेप में अर्ली वस्तु में प्रत्येक गैर-टर्मिनल से पॉइंटर्स का एक समुच्चय जोड़कर पार्स ट्री के निर्माण के लिए एक एल्गोरिदम का वर्णन करता है, जिसके कारण इसे पहचाना गया हैं। [[टोमिता]] ने देखा कि<ref>{{cite book|last1=Tomita|first1=Masaru|title=Efficient Parsing for Natural Language: A Fast Algorithm for Practical Systems|date=April 17, 2013|publisher=Springer Science and Business Media|isbn=978-1475718850|page=74|url=https://books.google.com/books?id=DAjkBwAAQBAJ&q=Tomita%20Efficient%20Parsing%20for%20natural%20Language&pg=PA74|access-date=16 September 2015}}</ref> यह प्रतीकों के मध्य संबंधों को ध्यान में नहीं रखता है, इसलिए यदि हम व्याकरण S SS | b और स्ट्रिंग bbb, यह केवल नोट करता है कि प्रत्येक S एक या दो b से मेल खा सकता है, और इस प्रकार bb और bbbb के लिए मिथ्या व्युत्पत्ति के साथ-साथ bbb के लिए दो सही व्युत्पत्तियाँ उत्पन्न करता है।


एक और तरीका<ref>{{cite journal|last1=Scott|first1=Elizabeth|title=प्रारंभिक पहचानकर्ताओं से एसपीपीएफ-शैली पार्सिंग|journal=Electronic Notes in Theoretical Computer Science|date=April 1, 2008|volume=203|issue=2|pages=53–67|doi=10.1016/j.entcs.2008.03.044|doi-access=free}}</ref> जैसे-जैसे आप आगे बढ़ते हैं, पार्स फ़ॉरेस्ट का निर्माण करना है, प्रत्येक अर्ली आइटम को एक पॉइंटर के साथ साझा पैक्ड पार्स फ़ॉरेस्ट (एसपीपीएफ) नोड में ट्रिपल (एस, आई, जे) के साथ लेबल करना, जहां एस एक प्रतीक या एलआर (0) आइटम है (डॉट के साथ उत्पादन नियम), और आई और जे इस नोड द्वारा प्राप्त इनपुट स्ट्रिंग का अनुभाग देते हैं। एक नोड की सामग्री या तो एकल व्युत्पत्ति देने वाले चाइल्ड पॉइंटर्स की एक जोड़ी होती है, या पैक किए गए नोड्स की एक सूची होती है, जिनमें से प्रत्येक में पॉइंटर्स की एक जोड़ी होती है और एक व्युत्पत्ति का प्रतिनिधित्व होता है। एसपीपीएफ नोड्स अद्वितीय हैं (दिए गए लेबल के साथ केवल एक ही है), लेकिन [[वाक्यात्मक अस्पष्टता]] पार्स के लिए एक से अधिक व्युत्पत्ति हो सकती है। इसलिए भले ही कोई ऑपरेशन अर्ली आइटम नहीं जोड़ता (क्योंकि यह पहले से मौजूद है), फिर भी यह आइटम के पार्स फ़ॉरेस्ट में व्युत्पत्ति जोड़ सकता है।
एक और तरीका<ref>{{cite journal|last1=Scott|first1=Elizabeth|title=प्रारंभिक पहचानकर्ताओं से एसपीपीएफ-शैली पार्सिंग|journal=Electronic Notes in Theoretical Computer Science|date=April 1, 2008|volume=203|issue=2|pages=53–67|doi=10.1016/j.entcs.2008.03.044|doi-access=free}}</ref> यह है कि आप पार्स फ़ॉरेस्ट का निर्माण करें, प्रत्येक अर्ली विषय को एक पॉइंटर के साथ साझा पैक्ड पार्स फ़ॉरेस्ट (एसपीपीएफ) नोड में ट्रिपल (s, i, j) के साथ लेबल किया जाए, जहां s एक प्रतीक या LR(0) है (डॉट के साथ उत्पादन नियम), और ''i'' और ''j'' इस नोड द्वारा प्राप्त इनपुट स्ट्रिंग का अनुभाग देते हैं। एक नोड की सामग्री या तो एकल व्युत्पत्ति देने वाले चाइल्ड पॉइंटर्स की एक जोड़ी होती है, या "पैक्ड" नोड्स की एक सूची होती है, जिनमें से प्रत्येक में पॉइंटर्स की एक जोड़ी होती है और एक व्युत्पत्ति का प्रतिनिधित्व होता है। एसपीपीएफ नोड्स अद्वितीय हैं (दिए गए लेबल के साथ केवल एक ही है), लेकिन [[वाक्यात्मक अस्पष्टता|अस्पष्ट]] पार्स के लिए एक से अधिक व्युत्पत्ति हो सकती है। इसलिए भले ही कोई संचालन अर्ली विषय नहीं जोड़ता (क्योंकि यह पहले से उपस्तिथ है), फिर भी यह विषय के पार्स फ़ॉरेस्ट में व्युत्पत्ति जोड़ सकता है।


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


एसपीपीएफ नोड्स को कभी भी पूर्ण एलआर (0) आइटम के साथ लेबल नहीं किया जाता है: इसके बजाय उन्हें उत्पादित प्रतीक के साथ लेबल किया जाता है ताकि सभी व्युत्पत्तियां एक नोड के तहत संयुक्त हो जाएं, चाहे वे किसी भी वैकल्पिक उत्पादन से आएं।
एसपीपीएफ नोड्स को कभी भी पूर्ण LR(0) विषय के साथ लेबल नहीं किया जाता है: इसके बदले उन्हें उत्पादित प्रतीक के साथ लेबल किया जाता है ताकि सभी व्युत्पत्तियां एक नोड के अंतर्गत संयुक्त हो जाएं, भले ही वे किस वैकल्पिक उत्पादन से आए है।


== अनुकूलन ==
== अनुकूलन ==


फिलिप मैकलीन और आर. निगेल हॉर्सपूल ने अपने पेपर में [https://link.springer.com/content/pdf/10.1007%2F3-540-61053-7_68.pdf ए फास्टर अर्ली पार्सर] अर्ली पार्सिंग को एलआर पार्सिंग के साथ जोड़ा और परिमाण के क्रम में सुधार हासिल किया।
फिलिप मैकलीन और आर. निगेल हॉर्सपूल ने अपने दस्तावेज़ में [https://link.springer.com/content/pdf/10.1007%2F3-540-61053-7_68.pdf एक तेज़ अर्ली पार्सर] में अर्ली पार्सिंग को एलआर पार्सिंग के साथ जोड़ा और परिमाण के क्रम में सुधार प्राप्त करता है।


== यह भी देखें ==
== यह भी देखें ==
* CYK एल्गोरिदम
* [[CYK एल्गोरिदम]]
* [[प्रसंग-मुक्त व्याकरण]]
* [[प्रसंग-मुक्त व्याकरण]]
* एल्गोरिदम की सूची#पार्सिंग
* [[पार्सिंग एल्गोरिदम]]


== उद्धरण ==
== उद्धरण ==
Line 252: Line 254:


=== सी, [[सी++]] ===
=== सी, [[सी++]] ===
* [https://github.com/vnmakarov/yaep 'येट अदर अर्ली पार्सर (YAEP)'] - C (प्रोग्रामिंग भाषा)/C++ लाइब्रेरी
* [https://github.com/vnmakarov/yaep 'येट अदर अर्ली पार्सर (YAEP)'] - C (प्रोग्रामिंग लैंग्वेज)/C++ लाइब्रेरी


=== हास्केल ===
=== हास्केल ===
* [https://hackage.haskell.org/package/Earley 'Earley'] - हास्केल में एक अर्ली पार्सर [[डोमेन-विशिष्ट भाषा]] (प्रोग्रामिंग भाषा)
* [https://hackage.haskell.org/package/Earley 'Earley'] - हास्केल में एक अर्ली पार्सर [[डोमेन-विशिष्ट भाषा|डोमेन-विशिष्ट लैंग्वेज]] (प्रोग्रामिंग लैंग्वेज)


=== जावा ===
=== जावा ===
Line 279: Line 281:


=== [[पर्ल]] ===
=== [[पर्ल]] ===
* [https://metacpan.org/module/Marpa::R2 Marpa::R2] - एक पर्ल मॉड्यूल। [https://jefffrekegler.github.com/Marpa-web-site/ Marpa] एक अर्ली का एल्गोरिदम है जिसमें जोप लियो और ऐकॉक और हॉर्सपूल द्वारा किए गए सुधार शामिल हैं।
* [https://metacpan.org/module/Marpa::R2 Marpa::R2] - एक पर्ल मॉड्यूल। [https://jefffrekegler.github.com/Marpa-web-site/ Marpa] एक अर्ली का एल्गोरिदम है जिसमें जोप लियो और ऐकॉक और हॉर्सपूल द्वारा किए गए सुधार सम्मिलित हैं।
* [https://metacpan.org/module/Parse::Earley Parse::Earley] - जे अर्ली के मूल एल्गोरिदम को लागू करने वाला एक पर्ल मॉड्यूल
* [https://metacpan.org/module/Parse::Earley Parse::Earley] - जे अर्ली के मूल एल्गोरिदम को लागू करने वाला एक पर्ल मॉड्यूल


===पायथन ===
===पायथन ===
* [https://github.com/erezsh/lark/blob/master/lark/parsers/earley.py Lark] - अर्ली पार्सर का एक ऑब्जेक्ट-ओरिएंटेड, प्रक्रियात्मक कार्यान्वयन, जो एक SPPF आउटपुट करता है।
* [https://github.com/erezsh/lark/blob/master/lark/parsers/earley.py Lark] - अर्ली पार्सर का एक ऑब्जेक्ट-ओरिएंटेड, प्रक्रियात्मक कार्यान्वयन, जो एक SPPF आउटपुट करता है।
* [http://nltk.org/ NLTK] - अर्ली पार्सर के साथ एक [[पायथन (प्रोग्रामिंग भाषा)]] टूलकिट
* [http://nltk.org/ NLTK] - अर्ली पार्सर के साथ एक [[पायथन (प्रोग्रामिंग भाषा)|पायथन (प्रोग्रामिंग लैंग्वेज)]] टूलकिट
* [http://pages.cpsc.ucalgary.ca/~aycock/spark/ स्पार्क] - अर्ली पार्सर को लागू करने वाले पायथन के लिए एक ऑब्जेक्ट-ओरिएंटेड छोटी भाषा रूपरेखा
* [http://pages.cpsc.ucalgary.ca/~aycock/spark/ स्पार्क] - अर्ली पार्सर को लागू करने वाले पायथन के लिए एक ऑब्जेक्ट-ओरिएंटेड छोटी लैंग्वेज रूपरेखा
* [https://pypi.python.org/pypi/spark_parser spark_parser] - उपरोक्त स्पार्क पार्सर का अद्यतन और पैकेज्ड संस्करण, जो पायथन 3 और पायथन 2 दोनों में चलता है
* [https://pypi.python.org/pypi/spark_parser spark_parser] - उपरोक्त स्पार्क पार्सर का अद्यतन और पैकेज्ड संस्करण, जो पायथन 3 और पायथन 2 दोनों में चलता है
* [https://github.com/tomerfiliba/tau/blob/master/earley3.pyearley3.py] - कोड की 150 से भी कम लाइनों में एल्गोरिदम का एक स्टैंड-अलोन कार्यान्वयन, जिसमें पार्सिंग-फ़ॉरेस्ट और नमूनों की पीढ़ी शामिल है
* [https://github.com/tomerfiliba/tau/blob/master/earley3.pyearley3.py] - कोड की 150 से भी कम लाइनों में एल्गोरिदम का एक स्टैंड-अलोन कार्यान्वयन, जिसमें पार्सिंग-फ़ॉरेस्ट और नमूनों की पीढ़ी सम्मिलित है
* [https://github.com/tomjridge/tjr_python_earley_parser tjr_python_earley_parser] - पायथन में एक न्यूनतम अर्ली पार्सर
* [https://github.com/tomjridge/tjr_python_earley_parser tjr_python_earley_parser] - पायथन में एक न्यूनतम अर्ली पार्सर
* [https://rahul.gopinath.org/post/2021/02/06/earley-parsing/ अर्ली पार्सिंग] - एप्सिलॉन हैंडलिंग और राइट-रिकर्सन के लिए लियो ऑप्टिमाइज़ेशन के साथ पायथन में एक अच्छी तरह से समझाया और संपूर्ण अर्ली पार्सर ट्यूटोरियल।
* [https://rahul.gopinath.org/post/2021/02/06/earley-parsing/ अर्ली पार्सिंग] - एप्सिलॉन हैंडलिंग और राइट-रिकर्सन के लिए लियो ऑप्टिमाइज़ेशन के साथ पायथन में एक अच्छी तरह से समझाया और संपूर्ण अर्ली पार्सर ट्यूटोरियल।
Line 298: Line 300:


=== योजना, रैकेट ===
=== योजना, रैकेट ===
* [https://web.archive.org/web/20160401103410/http://www.cavar.me/damir/charty/scheme/ चार्टी-रैकेट] - एक [[योजना (प्रोग्रामिंग भाषा)]] - [[रैकेट (प्रोग्रामिंग भाषा)]] अर्ली पार्सर का कार्यान्वयन
* [https://web.archive.org/web/20160401103410/http://www.cavar.me/damir/charty/scheme/ चार्टी-रैकेट] - एक [[योजना (प्रोग्रामिंग भाषा)|योजना (प्रोग्रामिंग लैंग्वेज)]] - [[रैकेट (प्रोग्रामिंग भाषा)|रैकेट (प्रोग्रामिंग लैंग्वेज)]] अर्ली पार्सर का कार्यान्वयन


=== वोल्फ्राम ===
=== वोल्फ्राम ===


* [https://library.wolfram.com/infocenter/Articles/9792/properEarleyParser] - कुछ आवश्यक परीक्षण मामलों के साथ वोल्फ्राम भाषा प्रोग्रामिंग भाषा में अर्ली पार्सर का एक बुनियादी न्यूनतम कार्यान्वयन।
* [https://library.wolfram.com/infocenter/Articles/9792/properEarleyParser] - कुछ आवश्यक परीक्षण मामलों के साथ वोल्फ्राम लैंग्वेज प्रोग्रामिंग लैंग्वेज में अर्ली पार्सर का एक बुनियादी न्यूनतम कार्यान्वयन।


=== संसाधन ===
=== संसाधन ===

Revision as of 19:58, 7 August 2023

अर्ली पार्सर
ClassParsing grammars that are context-free
Data structureString
Worst-case performance
Best-case performance
Average performance

कंप्यूटर विज्ञान में, अर्ली पार्सर अर्ली पार्सर किसी दिए गए संदर्भ-मुक्त लैंग्वेज से संबंधित स्ट्रिंग्स को पार्स करने के लिए एक एल्गोरिदम है, हालांकि (परिवर्ती के आधार पर) यह कुछ अशक्त व्याकरणों के साथ समस्याओं का सामना कर सकता है।[1] एल्गोरिथ्म, जिसका नाम इसके आविष्कारक जे अर्ली के नाम पर रखा गया है, एक चार्ट पार्सर है जो गतिक क्रमादेशन का उपयोग करता है; इसका उपयोग मुख्य रूप से अभिकलनात्मक भाषाविज्ञान में पार्सिंग के लिए किया जाता है। इसे पहली बार 1968 में उनके शोध प्रबंध में प्रस्तावित किया गया था[2] (और बाद में एक जर्नल में संक्षिप्त, अधिक सुपाठ्य रूप में प्रकाशित हुआ[3])।

अर्ली पार्सर आकर्षक हैं क्योंकि वे एलआर पार्सर और एलएल पार्सर के विपरीत सभी संदर्भ-मुक्त लैंग्वेज को पार्स कर सकते हैं, जो विशिष्ट रूप से अनुभाषक में उपयोग किए जाते हैं लेकिन जो केवल लैंग्वेज के प्रतिबंधित वर्गों को प्रबंध कर सकते हैं। अर्ली पार्सर सामान्य स्थिति में घनीय समय में निष्पादित होता है, जहां n पार्स की गई स्ट्रिंग की लंबाई है, स्पष्ट व्याकरण के लिए द्विघात समय है,[4] और सभी नियतात्मक संदर्भ-मुक्त व्याकरणों के लिए रैखिक समय है। यह विशेष रूप से अच्छा प्रदर्शन करता है जब नियम बाएँ-पुनरावर्ती रूप से लिखे जाते हैं।

अर्ली पहचानकर्ता

निम्नलिखित एल्गोरिदम अर्ली पहचानकर्ता का वर्णन करता है। पहचानकर्ता को एक पार्स ट्री बनाने के लिए संशोधित किया जा सकता है क्योंकि यह पहचानता है, और इस तरह इसे एक पार्सर में बदला जा सकता है।

एल्गोरिथ्म

निम्नलिखित विवरण में, α, β, और γ टर्मिनलों/नॉनटर्मिनलों (रिक्त स्ट्रिंग सहित) की किसी भी स्ट्रिंग का प्रतिनिधित्व करते हैं, X और Y एकल नॉनटर्मिनलों का प्रतिनिधित्व करते हैं, और a एक टर्मिनल प्रतीक का प्रतिनिधित्व करता है।

अर्ली का एल्गोरिदम एक अधोशीर्ष गतिक क्रमादेशन एल्गोरिदम है। निम्नलिखित में, हम अर्ली के डॉट नोटेशन का उपयोग करते हैं: एक उत्पादन X → αβ दिया गया है, नोटेशन X → α • β एक ऐसी स्थिति का प्रतिनिधित्व करता है जिसमें α को पहले ही पार्स किया जा चुका है और β अपेक्षित है।

इनपुट स्थिति 0 इनपुट से पहले की स्थिति है। इनपुट स्थिति n, nवें टोकन को स्वीकार करने के बाद की स्थिति है। (अनौपचारिक रूप से, इनपुट स्थितियों को टोकन सीमाओं पर स्थित स्थानों के रूप में माना जा सकता है।) प्रत्येक इनपुट स्थिति के लिए, पार्सर एक स्थिति समुच्चय उत्पन्न करता है। प्रत्येक अवस्था एक टुपल है (X → α • β, i), जिसमें सम्मिलित है

  • वर्तमान में उत्पादन का सुमेलित किया जा रहा है (X → α β)
  • उस उत्पादन में वर्तमान स्थिति (दृश्यमान रूप से बिंदु • द्वारा प्रदर्शित)
  • इनपुट में वह स्थिति जहां इस उत्पादन का सुमेलन प्रारम्भ हुआ: मूल स्थिति

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

एक अवस्था तब समाप्त होता है जब उसकी वर्तमान स्थिति उत्पादन के दाईं ओर की अंतिम स्थिति होती है, अर्थात, जब अवस्था के दृश्य प्रतिनिधित्व में बिंदु के दाईं ओर कोई प्रतीक नहीं होता है।

इनपुट स्थिति k पर निर्धारित स्थिति को S(k) कहा जाता है। पार्सर को S(0) के साथ सीडित किया गया है जिसमें केवल शीर्ष-स्तरीय नियम सम्मिलित है। पार्सर फिर तीन संचालन को बार-बार निष्पादित करता है: पूर्वानुमान, स्कैनिंग और पूर्णता

  • पूर्वानुमान: फॉर्म (X → α • Y β, j) के S(k) में प्रत्येक अवस्था के लिए (जहाँ j ऊपर की तरह मूल स्थिति है), प्रत्येक उत्पादन के लिए S(k) में (Y → • γ, k) जोड़ें बाईं ओर Y वाला व्याकरण (Y → γ) है।
  • स्कैनिंग: यदि a इनपुट स्ट्रीम में अगला प्रतीक है, तो फॉर्म (X → α • a β, j) के S(k) में प्रत्येक स्थिति के लिए, S(k+1) में (X → α a • β, j) जोड़ें है।
  • पूर्णता: फॉर्म (Y → γ •, j) के S(k) में प्रत्येक अवस्था के लिए, (X → α • Y β, i) फॉर्म के S(j) में सभी अवस्था खोजें और S(k) में (X → α Y • β, i) जोड़ें है।

अवस्था समुच्चय में प्रतिलिपि अवस्था नहीं जोड़े जाते, केवल नए अवस्था जोड़े जाते हैं। ये तीन संचालन तब तक दोहराए जाते हैं जब तक समुच्चय में कोई नया अवस्था नहीं जोड़ा जा सकता है। समुच्चय को सामान्यतः संसाधित करने के लिए अवस्था की एक क्यू के रूप में कार्यान्वित किया जाता है, जिसमें संचालन इस पर निर्भर करता है कि यह किस प्रकार की स्थिति है।

एल्गोरिदम स्वीकार करता है यदि (X → γ •, 0) S(n) में समाप्त होता है, जहां (X → γ) शीर्ष स्तर-नियम है और n इनपुट लंबाई है, अन्यथा यह अस्वीकार कर देता है।

स्यूडोकोड

डेनियल जुराफ़्स्की और जेम्स एच. मार्टिन द्वारा भाषण और लैंग्वेज प्रसंस्करण से अनुकूलित,[5]

DECLARE ARRAY S;

function INIT(words)
    S  CREATE_ARRAY(LENGTH(words) + 1)
    for k  from 0 to LENGTH(words) do
        S[k]  EMPTY_ORDERED_SET

function EARLEY_PARSE(words, grammar)
    INIT(words)
    ADD_TO_SET((γ  S, 0), S[0])
    for k  from 0 to LENGTH(words) do
        for each state in S[k] do  // S[k] can expand during this loop
            if not FINISHED(state) then
                if NEXT_ELEMENT_OF(state) is a nonterminal then
                    PREDICTOR(state, k, grammar)         // non_terminal
                else do
                    SCANNER(state, k, words)             // terminal
            else do
                COMPLETER(state, k)
        end
    end
    return chart

procedure PREDICTOR((A  α•Bβ, j), k, grammar)
    for each (B  γ) in GRAMMAR_RULES_FOR(B, grammar) do
        ADD_TO_SET((B  •γ, k), S[k])
    end

procedure SCANNER((A  α•aβ, j), k, words)
    if j < LENGTH(words) and a  PARTS_OF_SPEECH(words[k]) then
        ADD_TO_SET((A  αa•β, j), S[k+1])
    end

procedure COMPLETER((B  γ•, x), k)
    for each (A  α•Bβ, j) in S[x] do
        ADD_TO_SET((A  αB•β, j), S[k])
    end

उदाहरण

अंकगणितीय अभिव्यक्तियों के लिए निम्नलिखित सरल व्याकरण पर विचार करें:

<P> ::= <S>      # the start rule
<S> ::= <S> "+" <M> | <M>
<M> ::= <M> "*" <T> | <T>
<T> ::= "1" | "2" | "3" | "4"

इनपुट के साथ:

2+3*4

यह अवस्था समुच्चयों का क्रम है:

(राज्य संख्या) उत्पादन (मूल) टिप्पणी
S(0): • 2 + 3 * 4
1 P → • S 0 start rule
2 S → • S + M 0 predict from (1)
3 S → • M 0 predict from (1)
4 M → • M * T 0 predict from (3)
5 M → • T 0 predict from (3)
6 T → • number 0 predict from (5)
S(1): 2 • + 3 * 4
1 T → number • 0 scan from S(0)(6)
2 M → T • 0 complete from (1) and S(0)(5)
3 M → M • * T 0 complete from (2) and S(0)(4)
4 S → M • 0 complete from (2) and S(0)(3)
5 S → S • + M 0 complete from (4) and S(0)(2)
6 P → S • 0 complete from (4) and S(0)(1)
S(2): 2 + • 3 * 4
1 S → S + • M 0 scan from S(1)(5)
2 M → • M * T 2 predict from (1)
3 M → • T 2 predict from (1)
4 T → • number 2 predict from (3)
S(3): 2 + 3 • * 4
1 T → number • 2 scan from S(2)(4)
2 M → T • 2 complete from (1) and S(2)(3)
3 M → M • * T 2 complete from (2) and S(2)(2)
4 S → S + M • 0 complete from (2) and S(2)(1)
5 S → S • + M 0 complete from (4) and S(0)(2)
6 P → S • 0 complete from (4) and S(0)(1)
S(4): 2 + 3 * • 4
1 M → M * • T 2 scan from S(3)(3)
2 T → • number 4 predict from (1)
S(5): 2 + 3 * 4 •
1 T → number • 4 scan from S(4)(2)
2 M → M * T • 2 complete from (1) and S(4)(1)
3 M → M • * T 2 complete from (2) and S(2)(2)
4 S → S + M • 0 complete from (2) and S(2)(1)
5 S → S • + M 0 complete from (4) and S(0)(2)
6 P → S • 0 complete from (4) and S(0)(1)

स्थिति (P → S •, 0) एक पूर्ण पार्स का प्रतिनिधित्व करती है। यह स्थिति S(3) और S(1) में भी दिखाई देती है, जो पूर्ण वाक्य हैं।

पार्स वन का निर्माण

अर्ली का शोध प्रबंध[6] संक्षेप में अर्ली वस्तु में प्रत्येक गैर-टर्मिनल से पॉइंटर्स का एक समुच्चय जोड़कर पार्स ट्री के निर्माण के लिए एक एल्गोरिदम का वर्णन करता है, जिसके कारण इसे पहचाना गया हैं। टोमिता ने देखा कि[7] यह प्रतीकों के मध्य संबंधों को ध्यान में नहीं रखता है, इसलिए यदि हम व्याकरण S → SS | b और स्ट्रिंग bbb, यह केवल नोट करता है कि प्रत्येक S एक या दो b से मेल खा सकता है, और इस प्रकार bb और bbbb के लिए मिथ्या व्युत्पत्ति के साथ-साथ bbb के लिए दो सही व्युत्पत्तियाँ उत्पन्न करता है।

एक और तरीका[8] यह है कि आप पार्स फ़ॉरेस्ट का निर्माण करें, प्रत्येक अर्ली विषय को एक पॉइंटर के साथ साझा पैक्ड पार्स फ़ॉरेस्ट (एसपीपीएफ) नोड में ट्रिपल (s, i, j) के साथ लेबल किया जाए, जहां s एक प्रतीक या LR(0) है (डॉट के साथ उत्पादन नियम), और i और j इस नोड द्वारा प्राप्त इनपुट स्ट्रिंग का अनुभाग देते हैं। एक नोड की सामग्री या तो एकल व्युत्पत्ति देने वाले चाइल्ड पॉइंटर्स की एक जोड़ी होती है, या "पैक्ड" नोड्स की एक सूची होती है, जिनमें से प्रत्येक में पॉइंटर्स की एक जोड़ी होती है और एक व्युत्पत्ति का प्रतिनिधित्व होता है। एसपीपीएफ नोड्स अद्वितीय हैं (दिए गए लेबल के साथ केवल एक ही है), लेकिन अस्पष्ट पार्स के लिए एक से अधिक व्युत्पत्ति हो सकती है। इसलिए भले ही कोई संचालन अर्ली विषय नहीं जोड़ता (क्योंकि यह पहले से उपस्तिथ है), फिर भी यह विषय के पार्स फ़ॉरेस्ट में व्युत्पत्ति जोड़ सकता है।

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

एसपीपीएफ नोड्स को कभी भी पूर्ण LR(0) विषय के साथ लेबल नहीं किया जाता है: इसके बदले उन्हें उत्पादित प्रतीक के साथ लेबल किया जाता है ताकि सभी व्युत्पत्तियां एक नोड के अंतर्गत संयुक्त हो जाएं, भले ही वे किस वैकल्पिक उत्पादन से आए है।

अनुकूलन

फिलिप मैकलीन और आर. निगेल हॉर्सपूल ने अपने दस्तावेज़ में एक तेज़ अर्ली पार्सर में अर्ली पार्सिंग को एलआर पार्सिंग के साथ जोड़ा और परिमाण के क्रम में सुधार प्राप्त करता है।

यह भी देखें

उद्धरण

  1. Kegler, Jeffrey. "What is the Marpa algorithm?". Retrieved 20 August 2013.
  2. Earley, Jay (1968). An Efficient Context-Free Parsing Algorithm (PDF). Carnegie-Mellon Dissertation.
  3. Earley, Jay (1970), "An efficient context-free parsing algorithm" (PDF), Communications of the ACM, 13 (2): 94–102, doi:10.1145/362007.362035, S2CID 47032707, archived from the original (PDF) on 2004-07-08
  4. John E. Hopcroft and Jeffrey D. Ullman (1979). ऑटोमेटा सिद्धांत, भाषाएँ और संगणना का परिचय. Reading/MA: Addison-Wesley. ISBN 978-0-201-02988-8. p.145
  5. Jurafsky, D. (2009). Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition. Pearson Prentice Hall. ISBN 9780131873216.
  6. Earley, Jay (1968). An Efficient Context-Free Parsing Algorithm (PDF). Carnegie-Mellon Dissertation. p. 106.
  7. Tomita, Masaru (April 17, 2013). Efficient Parsing for Natural Language: A Fast Algorithm for Practical Systems. Springer Science and Business Media. p. 74. ISBN 978-1475718850. Retrieved 16 September 2015.
  8. Scott, Elizabeth (April 1, 2008). "प्रारंभिक पहचानकर्ताओं से एसपीपीएफ-शैली पार्सिंग". Electronic Notes in Theoretical Computer Science. 203 (2): 53–67. doi:10.1016/j.entcs.2008.03.044.


अन्य संदर्भ सामग्री

कार्यान्वयन

सी, सी++

हास्केल

जावा

  • [1] - अर्ली एल्गोरिथम का जावा कार्यान्वयन
  • PEN - एक जावा लाइब्रेरी जो अर्ली एल्गोरिदम लागू करती है
  • Pep - एक जावा लाइब्रेरी जो अर्ली एल्गोरिदम को लागू करती है और पार्सिंग कलाकृतियों के रूप में चार्ट और पार्स पेड़ों को प्रदान करती है
  • Digitalheir/java-probability-earley-parser - एक जावा लाइब्रेरी जो संभाव्य अर्ली एल्गोरिथ्म को लागू करती है, जो एक अस्पष्ट वाक्य से सबसे संभावित पार्स ट्री को निर्धारित करने के लिए उपयोगी है।

सी#

  • coonsta/earley - C# में एक अर्ली पार्सर
  • patrickhuber/pliant - एक अर्ली पार्सर जो मार्पा द्वारा अपनाए गए सुधारों को एकीकृत करता है और एलिजाबेथ स्कॉट के वृक्ष निर्माण एल्गोरिदम को प्रदर्शित करता है।
  • elisonch/CFGLib - C# के लिए संभाव्य संदर्भ मुक्त व्याकरण (PCFG) लाइब्रेरी (अर्ली + SPPF, CYK)

जावास्क्रिप्ट

  • नियरली - एक अर्ली पार्सर जो मार्पा द्वारा अपनाए गए सुधारों को एकीकृत करना शुरू कर रहा है
  • एक पिंट आकार का अर्ली पार्सर - साझा पैक्ड पार्स फ़ॉरेस्ट के निर्माण के लिए एलिजाबेथ स्कॉट की तकनीक को प्रदर्शित करने के लिए एक खिलौना पार्सर (एनोटेटेड छद्म कोड के साथ)
  • lagodiuk/earley-parser-js - अर्ली पार्सर का एक छोटा जावास्क्रिप्ट कार्यान्वयन (पार्सिंग-फ़ॉरेस्ट की पीढ़ी सहित)
  • Digitalheir/probability-earley-parser-javascript - संभाव्य अर्ली पार्सर का जावास्क्रिप्ट कार्यान्वयन

ओकैमल

  • सिंपल अर्ली - दस्तावेज़ीकरण के साथ एक सरल अर्ली-जैसे पार्सिंग एल्गोरिदम का कार्यान्वयन।

पर्ल

  • Marpa::R2 - एक पर्ल मॉड्यूल। Marpa एक अर्ली का एल्गोरिदम है जिसमें जोप लियो और ऐकॉक और हॉर्सपूल द्वारा किए गए सुधार सम्मिलित हैं।
  • Parse::Earley - जे अर्ली के मूल एल्गोरिदम को लागू करने वाला एक पर्ल मॉड्यूल

पायथन

  • Lark - अर्ली पार्सर का एक ऑब्जेक्ट-ओरिएंटेड, प्रक्रियात्मक कार्यान्वयन, जो एक SPPF आउटपुट करता है।
  • NLTK - अर्ली पार्सर के साथ एक पायथन (प्रोग्रामिंग लैंग्वेज) टूलकिट
  • स्पार्क - अर्ली पार्सर को लागू करने वाले पायथन के लिए एक ऑब्जेक्ट-ओरिएंटेड छोटी लैंग्वेज रूपरेखा
  • spark_parser - उपरोक्त स्पार्क पार्सर का अद्यतन और पैकेज्ड संस्करण, जो पायथन 3 और पायथन 2 दोनों में चलता है
  • [2] - कोड की 150 से भी कम लाइनों में एल्गोरिदम का एक स्टैंड-अलोन कार्यान्वयन, जिसमें पार्सिंग-फ़ॉरेस्ट और नमूनों की पीढ़ी सम्मिलित है
  • tjr_python_earley_parser - पायथन में एक न्यूनतम अर्ली पार्सर
  • अर्ली पार्सिंग - एप्सिलॉन हैंडलिंग और राइट-रिकर्सन के लिए लियो ऑप्टिमाइज़ेशन के साथ पायथन में एक अच्छी तरह से समझाया और संपूर्ण अर्ली पार्सर ट्यूटोरियल।

जंग

  • सैंटियागो - अर्ली पार्सर को लागू करने वाले रस्ट के लिए एक लेक्सिंग और पार्सिंग टूलकिट।

सामान्य लिस्प

  • CL-Earley-parser - एक सामान्य लिस्प लाइब्रेरी जो अर्ली पार्सर को लागू करती है

योजना, रैकेट

वोल्फ्राम

  • [3] - कुछ आवश्यक परीक्षण मामलों के साथ वोल्फ्राम लैंग्वेज प्रोग्रामिंग लैंग्वेज में अर्ली पार्सर का एक बुनियादी न्यूनतम कार्यान्वयन।

संसाधन

श्रेणी:पार्सिंग एल्गोरिदम श्रेणी:गतिशील प्रोग्रामिंग