लेक्स (सॉफ्टवेयर): Difference between revisions

From Vigyanwiki
No edit summary
 
(5 intermediate revisions by 3 users not shown)
Line 18: Line 18:
| website                =  
| website                =  
}}
}}
'''लेक्स''' एक [[कंप्यूटर प्रोग्राम]] है जो लेक्सिकल विश्लेषण  उत्पन्न करता है
'''लेक्स''' लेक्स एक कंप्यूटर प्रोग्राम है जो शब्दावली विश्लेषक उत्पन्न करता है।


लेक्स सामान्यतः [[याक]] [[पार्सर जनरेटर]] के साथ उपयोग किया जाता है।<ref>{{cite book |last1=Levine |first1=John R. | author-link1=John R. Levine |last2=Mason |first2=Tony |last3=Brown |first3=Doug |title=लेक्स और याक|pages=[https://archive.org/details/lexyacc00levi/page/1 1]–2 |publisher=[[O'Reilly Media|O'Reilly]] |year=1992 |edition=2 |isbn=1-56592-000-7 |url=https://archive.org/details/lexyacc00levi|url-access=registration }}</ref> लेक्स, [[माइक लेस्क]] और [[एरिक श्मिट]] द्वारा पहले लिखा गया था और 1975 में वर्णित किया गया था। यह कई [[यूनिक्स]] सिस्टमों पर मानक शब्दिक विश्लेषक जेनरेटर है, और पॉज़िक्स मानक का हिस्सा के रूप में एक समकक्ष उपकरण निर्दिष्ट किया गया है।<ref>{{Cite book | last=Levine | first=John | author-link=John Levine | title =फ्लेक्स और बाइसन| publisher=O'Reilly Media | date=August 2009 | page=304 | url=http://oreilly.com/catalog/9780596155988 | isbn=978-0-596-15597-1}}</ref><ref>[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/lex.html The Open Group Base Specifications Issue 7, 2018 edition § Shell & Utilities § Utilities § lex]</ref> लेक्स एक इनपुट [[स्ट्रीम (कंप्यूटिंग)|स्ट्रीम]] को पढ़ता है जिसमें शब्दिक विश्लेषक को निर्दिष्ट किया गया होता है और [[ सी (प्रोग्रामिंग भाषा) |सी]] प्रोग्रामिंग भाषा में शब्दिक विश्लेषक को कार्यान्वित करने वाला स्रोत कोड लिखता है।
लेक्स सामान्यतः [[याक]] [[पार्सर जनरेटर|पार्सर जनित्र]] के साथ उपयोग किया जाता है।<ref>{{cite book |last1=Levine |first1=John R. | author-link1=John R. Levine |last2=Mason |first2=Tony |last3=Brown |first3=Doug |title=लेक्स और याक|pages=[https://archive.org/details/lexyacc00levi/page/1 1]–2 |publisher=[[O'Reilly Media|O'Reilly]] |year=1992 |edition=2 |isbn=1-56592-000-7 |url=https://archive.org/details/lexyacc00levi|url-access=registration }}</ref> माइक लेस्क और एरिक श्मिट द्वारा मूल रूप से लिखा गया था और 1975 में वर्णित किया गया था। लेक्स कई यूनिक्स सिस्टमों पर मानक शब्दावली विश्लेषक जेनरेटर है, और एक समकक्ष उपकरण पॉज़िक्स मानक का भाग के रूप में निर्दिष्ट किया गया है।<ref>{{Cite book | last=Levine | first=John | author-link=John Levine | title =फ्लेक्स और बाइसन| publisher=O'Reilly Media | date=August 2009 | page=304 | url=http://oreilly.com/catalog/9780596155988 | isbn=978-0-596-15597-1}}</ref><ref>[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/lex.html The Open Group Base Specifications Issue 7, 2018 edition § Shell & Utilities § Utilities § lex]</ref> सामग्री विश्लेषक को निर्दिष्ट करने वाले एक इनपुट स्ट्रीम को लेक्स पढ़ता है और सी प्रोग्रामिंग भाषा में सामग्री विश्लेषक को कार्यान्वित करने वाली स्रोत कोड को लिखता है।


<ref>{{cite book|title=लेक्स और Yacc|url=https://archive.org/details/lexyacc00levi |url-access=registration |author1=John R. Levine |author2=John Mason |author3=Doug Brown |publisher=O'Reilly |date=1992 }}</ref>कुछ पुराने संस्करणों में लेक्स [[रैटफोर]] में भी शब्दिक विश्लेषक उत्पन्न कर सकता था।
<ref>{{cite book|title=लेक्स और Yacc|url=https://archive.org/details/lexyacc00levi |url-access=registration |author1=John R. Levine |author2=John Mason |author3=Doug Brown |publisher=O'Reilly |date=1992 }}</ref>कुछ पुराने संस्करणों में लेक्स [[रैटफोर]] में भी शब्दिक विश्लेषक उत्पन्न कर सकता था।


== ओपन-सोर्स ==
== खुला स्रोत ==
प्रारंभिक रूप से प्रोप्राइटरी [[ खुला स्रोत सॉफ्टवेयर |सॉफ्टवेयर]] के रूप में वितरित होने के पर भी, कुछ लेक्स के संस्करण अब ओपन-सोर्स हैं। मूल प्रोप्राइटरी कोड पर आधारित ओपन-सोर्स संस्करण, जैसे कि ओपन सोलारिस और [[बेल लैब्स से प्लान 9]] जैसे ओपन-सोर्स ऑपरेटिंग सिस्टम के साथ वितरित होते हैं। एक लोकप्रिय ओपन-सोर्स संस्करण का नाम फ्लेक्स है, जिसे "[[ फ्लेक्स लेक्सिकल विश्लेषक |फ्लेक्स लेक्सिकल विश्लेषक]]" के रूप में भी जाना जाता है, और यह प्रोप्राइटरी कोड से निर्मित नहीं है।
यद्यपि प्रारंभिक रूप से विशेषाधिकार गुण सॉफ़्टवेयर के रूप में वितरित किया गया था, लेक्स के कुछ संस्करण अब खुला स्रोत हैं। मूल विशेषाधिकारित कोड पर आधारित ओपन-सोर्स लेक्स के संस्करण अब ओपन-सोर्स ऑपरेटिंग सिस्टम जैसे ओपनसोलारिस और प्लान 9 फ्रॉम बेल लैब्स के साथ वितरित किए जाते हैं। लेक्स का एक लोकप्रिय खुला स्रोत संस्करण, जिसे फ्लेक्स या "फास्ट शब्दावली विश्लेषक" कहा जाता है, विशेषाधिकारित कोडिंग से नहीं निर्माण किया गया है।


== एक लेक्स फ़ाइल की संरचना ==
== एक लेक्स फ़ाइल की संरचना ==
Line 65: Line 65:
     return 0;
     return 0;
}</syntaxhighlight>
}</syntaxhighlight>
यदि यह इनपुट<code>flex</code>, को दिया जाता है, तो यह सी फ़ाइल में रूपांतरित हो जाएगा और{{nowrap | <code>lex.yy.c</code>}} नामक फ़ाइल बन जाता है। इस {{nowrap | <code>lex.yy.c</code>}} फ़ाइल को संकलित किया जा सकता है एक एक्सेक्यूटेबल फ़ाइल में जिससे स्ट्रिंग्स का मिलान किया जा सकता है और उसे आउटपुट किया जा सकता है। उदाहरण के लिए, निम्नलिखित इनपुट दिया गया है:
यदि यह इनपुट<code>flex</code>, को दिया जाता है, तो यह सी फ़ाइल में रूपांतरित हो जाएगा और{{nowrap | <code>lex.yy.c</code>}} नामक फ़ाइल बन जाता है। इस {{nowrap | <code>lex.yy.c</code>}} फ़ाइल को संकलित किया जा सकता है एक विशेष फ़ाइल में जिससे स्ट्रिंग्स का मिलान किया जा सकता है और उसे आउटपुट किया जा सकता है। उदाहरण के लिए, निम्नलिखित इनपुट दिया गया है:
  abc123z.!&*2gj6
  abc123z.!&*2gj6
कार्यक्रम प्रिंट करेगा:
कार्यक्रम प्रिंट करेगा:
Line 74: Line 74:
== अन्य प्रोग्रामिंग टूल्स के साथ लेक्स का उपयोग करना ==
== अन्य प्रोग्रामिंग टूल्स के साथ लेक्स का उपयोग करना ==


=== पार्सर जेनरेटर के साथ लेक्स का उपयोग करना ===
=== पार्सर जनित्र के साथ लेक्स का उपयोग करना ===
लेक्स और पार्सर जनरेटर, जैसे Yacc या GNU बायसन, आमतौर पर एक साथ उपयोग किए जाते हैं। पार्सर जेनरेटर एक इनपुट स्ट्रीम को पार्स करने के लिए एक [[औपचारिक व्याकरण]] का उपयोग करते हैं, कुछ ऐसा जो लेक्स सरल नियमित अभिव्यक्तियों का उपयोग करके नहीं कर सकता, क्योंकि लेक्स सरल परिमित राज्य मशीन तक सीमित है।{{Clarify|reason=mixes together grammars, regular expressions and FSMs into a confusing result|date=May 2012}}
लेक्स और पार्सर जनित्र , जैसे याक या बाइसन सामान्यतः साथ में उपयोग किए जाते हैं। पार्सर जनित्र एक [[औपचारिक व्याकरण]] का उपयोग करते हैं जिससे एक इनपुट स्ट्रीम को पार्स किया जा सके, जो कि लेक्स केवल साधारित सीमित स्थिति स्वतंत्र अभिव्यक्तियों का उपयोग करके नहीं कर सकता।


आमतौर पर एक पार्सर होना बेहतर होता है, उदाहरण के लिए Yacc द्वारा उत्पन्न एक, टोकन की एक धारा (एक टोकन-स्ट्रीम) को इनपुट के रूप में स्वीकार करता है, बजाय सीधे वर्णों की एक धारा (एक वर्ण-धारा) को संसाधित करने के लिए। इस तरह के टोकन-स्ट्रीम का उत्पादन करने के लिए अक्सर लेक्स का उपयोग किया जाता है।
सामान्यतः यह अधिक उपयुक्त होता है कि पार्सर, जैसे कि याक द्वारा उत्पन्न, एक "टोकन-स्ट्रीम" को इनपुट के रूप में स्वीकार करना  अनुचित होता है कि सीधे एक "वर्ण-स्ट्रीम" को सीधे प्रोसेस करना हो। लेक्स वर्ण-स्ट्रीम को टोकन-स्ट्रीम में रूपांतरित करने के लिए उपयोग होता है। लेक्स एक टोकन-स्ट्रीम उत्पन्न करने के लिए सामान्यतः उपयोग किया जाता है।


[[ स्कैनर रहित पार्सिंग ]] एक अलग लेक्सर के बिना सीधे इनपुट कैरेक्टर-स्ट्रीम को पार्स करने के लिए संदर्भित करता है।
[[ स्कैनर रहित पार्सिंग | स्कैनर रहित पार्सिंग]] एक अलग लेक्स के बिना सीधे इनपुट वर्ण--स्ट्रीम को पार्स करने के लिए संदर्भित करता है।


=== लेक्स और बनाओ ===
=== लेक्स और मेक ===
[[ बनाओ (सॉफ्टवेयर) ]] एक उपयोगिता है जिसका उपयोग लेक्स से जुड़े कार्यक्रमों को बनाए रखने के लिए किया जा सकता है। मान लें कि एक फ़ाइल जिसका एक्सटेंशन है <code>.l</code> एक लेक्स स्रोत फ़ाइल है। आंतरिक मैक्रो बनाएं <code>LFLAGS</code> मेक द्वारा स्वचालित रूप से लागू किए जाने वाले लेक्स विकल्पों को निर्दिष्ट करने के लिए उपयोग किया जा सकता है।<ref>
[[ बनाओ (सॉफ्टवेयर) |मेक]] एक उपयोगी उपकरण है जिसका उपयोग लेक्स से जुड़े प्रोग्रामों को बनाए रखने में किया जा सकता है। मेक यह मानता है कि एक फ़ाइल जिसका विस्तार<code>.l</code> है, वह एक लेक्स स्रोत फ़ाइल है। मेक आंतरिक मैक्रो<code>LFLAGS</code> का उपयोग किया जा सकता है जिससे  स्वचालित रूप से मेक द्वारा आवंटित लेक्स विकल्पों को निर्दिष्ट किया जा सकता है।<ref>
{{Cite journal
{{Cite journal
  |url=http://www.opengroup.org/onlinepubs/009695399/utilities/make.html
  |url=http://www.opengroup.org/onlinepubs/009695399/utilities/make.html
Line 92: Line 92:
  |id=IEEE Std 1003.1, 2004 Edition
  |id=IEEE Std 1003.1, 2004 Edition
}}</ref>
}}</ref>




Line 113: Line 114:
{{Unix commands}}
{{Unix commands}}
{{Plan 9 commands}}
{{Plan 9 commands}}
[[Category: संकलन उपकरण]] [[Category: यूनिक्स प्रोग्रामिंग उपकरण]] [[Category: यूनिक्स SUS2008 उपयोगिताओं]] [[Category: योजना 9 कमांड]] [[Category: स्वतः समाप्त हो गया]] [[Category: शाब्दिक विश्लेषण]]


[[Category: Machine Translated Page]]
[[Category:Collapse templates]]
[[Category:Created On 20/06/2023]]
[[Category:Created On 20/06/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]
[[Category:यूनिक्स SUS2008 उपयोगिताओं]]
[[Category:यूनिक्स प्रोग्रामिंग उपकरण]]
[[Category:योजना 9 कमांड]]
[[Category:शाब्दिक विश्लेषण]]
[[Category:संकलन उपकरण]]
[[Category:स्वतः समाप्त हो गया]]

Latest revision as of 07:50, 15 July 2023

Lex
Original author(s)Mike Lesk, Eric Schmidt
Initial release1975; 49 years ago (1975)
Written inC
Operating systemUnix, Unix-like, Plan 9
PlatformCross-platform
TypeCommand
LicensePlan 9: MIT License

लेक्स लेक्स एक कंप्यूटर प्रोग्राम है जो शब्दावली विश्लेषक उत्पन्न करता है।

लेक्स सामान्यतः याक पार्सर जनित्र के साथ उपयोग किया जाता है।[1] माइक लेस्क और एरिक श्मिट द्वारा मूल रूप से लिखा गया था और 1975 में वर्णित किया गया था। लेक्स कई यूनिक्स सिस्टमों पर मानक शब्दावली विश्लेषक जेनरेटर है, और एक समकक्ष उपकरण पॉज़िक्स मानक का भाग के रूप में निर्दिष्ट किया गया है।[2][3] सामग्री विश्लेषक को निर्दिष्ट करने वाले एक इनपुट स्ट्रीम को लेक्स पढ़ता है और सी प्रोग्रामिंग भाषा में सामग्री विश्लेषक को कार्यान्वित करने वाली स्रोत कोड को लिखता है।

[4]कुछ पुराने संस्करणों में लेक्स रैटफोर में भी शब्दिक विश्लेषक उत्पन्न कर सकता था।

खुला स्रोत

यद्यपि प्रारंभिक रूप से विशेषाधिकार गुण सॉफ़्टवेयर के रूप में वितरित किया गया था, लेक्स के कुछ संस्करण अब खुला स्रोत हैं। मूल विशेषाधिकारित कोड पर आधारित ओपन-सोर्स लेक्स के संस्करण अब ओपन-सोर्स ऑपरेटिंग सिस्टम जैसे ओपनसोलारिस और प्लान 9 फ्रॉम बेल लैब्स के साथ वितरित किए जाते हैं। लेक्स का एक लोकप्रिय खुला स्रोत संस्करण, जिसे फ्लेक्स या "फास्ट शब्दावली विश्लेषक" कहा जाता है, विशेषाधिकारित कोडिंग से नहीं निर्माण किया गया है।

एक लेक्स फ़ाइल की संरचना

एक लेक्स फ़ाइल की संरचना जानबूझकर एक याक फ़ाइल के समान होती है: फ़ाइलों को तीन खंडों में विभाजित किया जाता है, जो लाइनों से अलग होते हैं जिनमें केवल दो प्रतिशत संकेत होते हैं:

एक लेक्स फ़ाइल का संरचना, एक याक फ़ाइल की संरचना के अनुकूल होती है: फ़ाइलों को तीन खंडों में विभाजित किया जाता है, यह केवल दो प्रतिशत चिह्न वाली लाइनों द्वारा अलग होते हैं, जो निम्नलिखित प्रकार से है:

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

एक लेक्स फ़ाइल का उदाहरण

निम्नलिखित लेक्स के फ्लेक्स लेक्सिकल एनालाइज़र संस्करण के लिए एक उदाहरण लेक्स फ़ाइल है। यह इनपुट में संख्याओं के तार को पहचानता है, और उन्हें प्रिंट करता है।

/*** Definition section ***/

%{
/* C code to be copied verbatim */
#include <stdio.h>
%}

%%
    /*** Rules section ***/

    /* [0-9]+ matches a string of one or more digits */
[0-9]+  {
            /* yytext is a string containing the matched text. */
            printf("Saw an integer: %s\n", yytext);
        }

.|\n    {   /* Ignore all other characters. */   }

%%
/*** C Code section ***/

int main(void)
{
    /* Call the lexer, then quit. */
    yylex();
    return 0;
}

यदि यह इनपुटflex, को दिया जाता है, तो यह सी फ़ाइल में रूपांतरित हो जाएगा और lex.yy.c नामक फ़ाइल बन जाता है। इस lex.yy.c फ़ाइल को संकलित किया जा सकता है एक विशेष फ़ाइल में जिससे स्ट्रिंग्स का मिलान किया जा सकता है और उसे आउटपुट किया जा सकता है। उदाहरण के लिए, निम्नलिखित इनपुट दिया गया है:

abc123z.!&*2gj6

कार्यक्रम प्रिंट करेगा:

Saw an integer: 123
Saw an integer: 2
Saw an integer: 6

अन्य प्रोग्रामिंग टूल्स के साथ लेक्स का उपयोग करना

पार्सर जनित्र के साथ लेक्स का उपयोग करना

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

सामान्यतः यह अधिक उपयुक्त होता है कि पार्सर, जैसे कि याक द्वारा उत्पन्न, एक "टोकन-स्ट्रीम" को इनपुट के रूप में स्वीकार करना अनुचित होता है कि सीधे एक "वर्ण-स्ट्रीम" को सीधे प्रोसेस करना हो। लेक्स वर्ण-स्ट्रीम को टोकन-स्ट्रीम में रूपांतरित करने के लिए उपयोग होता है। लेक्स एक टोकन-स्ट्रीम उत्पन्न करने के लिए सामान्यतः उपयोग किया जाता है।

स्कैनर रहित पार्सिंग एक अलग लेक्स के बिना सीधे इनपुट वर्ण--स्ट्रीम को पार्स करने के लिए संदर्भित करता है।

लेक्स और मेक

मेक एक उपयोगी उपकरण है जिसका उपयोग लेक्स से जुड़े प्रोग्रामों को बनाए रखने में किया जा सकता है। मेक यह मानता है कि एक फ़ाइल जिसका विस्तार.l है, वह एक लेक्स स्रोत फ़ाइल है। मेक आंतरिक मैक्रोLFLAGS का उपयोग किया जा सकता है जिससे स्वचालित रूप से मेक द्वारा आवंटित लेक्स विकल्पों को निर्दिष्ट किया जा सकता है।[5]


यह भी देखें

संदर्भ

  1. Levine, John R.; Mason, Tony; Brown, Doug (1992). लेक्स और याक (2 ed.). O'Reilly. pp. 1–2. ISBN 1-56592-000-7.
  2. Levine, John (August 2009). फ्लेक्स और बाइसन. O'Reilly Media. p. 304. ISBN 978-0-596-15597-1.
  3. The Open Group Base Specifications Issue 7, 2018 edition § Shell & Utilities § Utilities § lex
  4. John R. Levine; John Mason; Doug Brown (1992). लेक्स और Yacc. O'Reilly.
  5. "make". The Open Group Base Specifications. The IEEE and The Open Group (6). 2004. IEEE Std 1003.1, 2004 Edition.


बाहरी संबंध