यह कमांड लेक्सपोज़िक्स है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
लेक्स - शाब्दिक कार्यों के लिए प्रोग्राम तैयार करें (विकास)
SYNOPSIS
लेक्रस [आयकर] [−n|−v] [पट्टिका...]
वर्णन
RSI लेक्रस उपयोगिता चरित्र के शाब्दिक प्रसंस्करण में उपयोग किए जाने वाले सी प्रोग्राम उत्पन्न करेगी
इनपुट, और इसका उपयोग इंटरफ़ेस के रूप में किया जा सकता है याक. सी प्रोग्राम तैयार किए जाएंगे
से लेक्रस स्रोत कोड और आईएसओ सी मानक के अनुरूप, बिना किसी पर निर्भर हुए
अपरिभाषित, अनिर्दिष्ट, या कार्यान्वयन-परिभाषित व्यवहार, उन मामलों को छोड़कर जहां कोड
आपूर्ति किए गए स्रोत से सीधे कॉपी किया गया है, या ऐसे मामलों में जो इसके द्वारा प्रलेखित हैं
कार्यान्वयन। आमतौर पर, लेक्रस यूटिलिटी उस प्रोग्राम को फ़ाइल में लिखेगी जो वह उत्पन्न करती है
लेक्स.yy.c; इस फ़ाइल की स्थिति अनिर्दिष्ट है यदि लेक्रस गैर-शून्य निकास स्थिति के साथ बाहर निकलता है।
के संपूर्ण विवरण के लिए विस्तारित विवरण अनुभाग देखें लेक्रस इनपुट भाषा।
विकल्प
RSI लेक्रस उपयोगिता POSIX.1‐2008 की आधार परिभाषाओं की मात्रा के अनुरूप होगी, अनुभाग
12.2, उपयोगिता वाक्य - विन्यास दिशानिर्देश, दिशानिर्देश 9 को छोड़कर।
निम्नलिखित विकल्पों का समर्थन किया जाएगा:
-N आमतौर पर लिखे गए आँकड़ों के सारांश को दबाएँ -v विकल्प। अगर नहीं
तालिका आकार में निर्दिष्ट हैं लेक्रस स्रोत कोड और -v विकल्प नहीं है
निर्दिष्ट, तो -N निहित है.
आयकर परिणामी प्रोग्राम को इसके बजाय मानक आउटपुट पर लिखें लेक्स.yy.c.
-v का सारांश लिखें लेक्रस मानक आउटपुट के आँकड़े। (की चर्चा देखें
लेक्रस टेबल आकार में परिभाषाएँ in लेक्रस।) यदि आयकर विकल्प निर्दिष्ट है और -N is
निर्दिष्ट नहीं है, यह रिपोर्ट मानक त्रुटि के लिए लिखी जाएगी। यदि टेबल आकार
में निर्दिष्ट हैं लेक्रस स्रोत कोड, और यदि -N विकल्प निर्दिष्ट नहीं है,
-v विकल्प सक्षम किया जा सकता है.
ऑपरेंड
निम्नलिखित ऑपरेंड का समर्थन किया जाएगा:
पट्टिका किसी इनपुट फ़ाइल का पथनाम. यदि ऐसे एक से अधिक पट्टिका निर्दिष्ट है, सभी फ़ाइलें
एकल का उत्पादन करने के लिए संयोजित किया जाएगा लेक्रस कार्यक्रम. अगर कोई नहीं पट्टिका ऑपरेंड हैं
निर्दिष्ट, या यदि ए पट्टिका संकार्य is '-', मानक इनपुट का उपयोग किया जाएगा।
एसटीडीआईएन
मानक इनपुट का उपयोग किया जाएगा यदि नहीं पट्टिका ऑपरेंड निर्दिष्ट हैं, या यदि a पट्टिका ओपेरंड
is '-'. इनपुट फ़ाइलें देखें.
इनपुट फ़ाइलें
इनपुट फ़ाइलें टेक्स्ट फ़ाइलें होंगी लेक्रस स्रोत कोड, जैसा कि में वर्णित है
विस्तारित विवरण अनुभाग।
वातावरण चर
निम्नलिखित पर्यावरण चर के निष्पादन को प्रभावित करेगा लेक्रस:
लैंग अंतरराष्ट्रीयकरण चर के लिए एक डिफ़ॉल्ट मान प्रदान करें जो सेट नहीं हैं या
शून्य। (POSIX.1‐2008 की बेस डेफिनिशन वॉल्यूम देखें, अनुभाग 8.2,
अंतर्राष्ट्रीयकरण चर अंतर्राष्ट्रीयकरण की प्राथमिकता के लिए
स्थानीय श्रेणियों के मूल्यों को निर्धारित करने के लिए उपयोग किए जाने वाले चर।)
LC_ALL यदि एक गैर-रिक्त स्ट्रिंग मान पर सेट है, तो अन्य सभी के मानों को ओवरराइड करें
अंतर्राष्ट्रीयकरण चर।
एलसी_COLLATE
श्रेणियों, तुल्यता वर्गों और बहु के व्यवहार के लिए स्थान निर्धारित करें।
नियमित अभिव्यक्ति के भीतर चरित्र मिलान तत्व। यदि यह वेरिएबल नहीं है
POSIX लोकेल पर सेट, परिणाम अनिर्दिष्ट हैं।
एलसी_CTYPE पाठ डेटा के बाइट्स के अनुक्रमों की व्याख्या के लिए स्थान निर्धारित करें
वर्णों के रूप में (उदाहरण के लिए, एकल-बाइट बहु-बाइट वर्णों के विपरीत
तर्क और इनपुट फ़ाइलें), और नियमित रूप से चरित्र वर्गों का व्यवहार
भाव. यदि यह वेरिएबल POSIX लोकेल पर सेट नहीं है, तो परिणाम हैं
अनिर्दिष्ट।
एलसी_MESSAGES
उस स्थान का निर्धारण करें जिसका उपयोग प्रारूप और सामग्री को प्रभावित करने के लिए किया जाना चाहिए
मानक त्रुटि के लिए लिखे गए नैदानिक संदेश।
एनएलएसपीएटीएच के प्रसंस्करण के लिए संदेश कैटलॉग का स्थान निर्धारित करें एलसी_MESSAGES.
अतुल्यकालिक पत्रिका
चूक।
एसटीडीओयूटी
अगर आयकर विकल्प निर्दिष्ट है, सी स्रोत कोड आउटपुट की पाठ फ़ाइल लेक्रस होगा
मानक आउटपुट के लिए लिखा गया।
अगर आयकर विकल्प निर्दिष्ट नहीं है:
* कार्यान्वयन से संबंधित सूचनात्मक, त्रुटि और चेतावनी संदेश
की सामग्री लेक्रस स्रोत कोड इनपुट या तो मानक आउटपुट पर लिखा जाएगा
मानक त्रुटि।
*यदि -v विकल्प निर्दिष्ट है और -N विकल्प निर्दिष्ट नहीं है, लेक्रस आँकड़े होंगे
कार्यान्वयन में या तो मानक आउटपुट या मानक त्रुटि के लिए भी लिखा जा सकता है-
परिभाषित प्रारूप. यदि तालिका आकार निर्दिष्ट हैं तो ये आँकड़े भी उत्पन्न हो सकते हैं
पंजीकरण शुल्क '%' में ऑपरेटर परिभाषाएँ अनुभाग, जब तक कि -N विकल्प नहीं है
निर्दिष्ट।
एसटीडीईआरआर
अगर आयकर विकल्प निर्दिष्ट है, कार्यान्वयन-परिभाषित सूचनात्मक, त्रुटि और चेतावनी
की सामग्री से संबंधित संदेश लेक्रस स्रोत कोड इनपुट मानक के अनुसार लिखा जाएगा
त्रुटि।
अगर आयकर विकल्प निर्दिष्ट नहीं है:
1. कार्यान्वयन से संबंधित सूचनात्मक, त्रुटि और चेतावनी संदेश
की सामग्री लेक्रस स्रोत कोड इनपुट या तो मानक आउटपुट पर लिखा जाएगा
मानक त्रुटि।
2। अगर -v विकल्प निर्दिष्ट है और -N विकल्प निर्दिष्ट नहीं है, लेक्रस आँकड़े होंगे
कार्यान्वयन में या तो मानक आउटपुट या मानक त्रुटि के लिए भी लिखा जा सकता है-
परिभाषित प्रारूप. यदि तालिका आकार निर्दिष्ट हैं तो ये आँकड़े भी उत्पन्न हो सकते हैं
पंजीकरण शुल्क '%' में ऑपरेटर परिभाषाएँ अनुभाग, जब तक कि -N विकल्प नहीं है
निर्दिष्ट।
आउटपुट फ़ाइलें
सी स्रोत कोड वाली एक टेक्स्ट फ़ाइल लिखी जाएगी लेक्स.yy.c, या मानक के अनुसार
आउटपुट यदि आयकर विकल्प मौजूद है।
विस्तारित वर्णन
प्रत्येक इनपुट फ़ाइल में शामिल होगा लेक्रस स्रोत कोड, जो नियमित अभिव्यक्तियों की एक तालिका है
सी प्रोग्राम अंशों के रूप में संगत क्रियाओं के साथ।
. लेक्स.yy.c को संकलित कर उससे जोड़ा गया है लेक्रस लाइब्रेरी (का उपयोग करके) -एल l के साथ संकार्य
c99), परिणामी प्रोग्राम मानक इनपुट से कैरेक्टर इनपुट को पढ़ेगा और करेगा
इसे दिए गए भावों से मेल खाने वाली स्ट्रिंग्स में विभाजित करें।
जब कोई अभिव्यक्ति मेल खाती है, तो ये क्रियाएं घटित होंगी:
* जिस इनपुट स्ट्रिंग का मिलान किया गया था उसे अंदर छोड़ दिया जाएगा yytext एक अशक्त-समाप्त स्ट्रिंग के रूप में;
yytext या तो एक बाहरी वर्ण सरणी होगी या किसी वर्ण स्ट्रिंग का सूचक।
में समझाया परिभाषाएँ in लेक्रसका उपयोग करके प्रकार को स्पष्ट रूप से चुना जा सकता है
%सरणी or %सूचक घोषणाएँ, लेकिन डिफ़ॉल्ट कार्यान्वयन-परिभाषित है।
* बाहरी int येलेंग मिलान स्ट्रिंग की लंबाई पर सेट किया जाएगा।
* अभिव्यक्ति के संबंधित प्रोग्राम खंड, या क्रिया को निष्पादित किया जाएगा।
पैटर्न मिलान के दौरान, लेक्रस सबसे लंबे समय तक पैटर्न के सेट की खोज करेगा
संभावित मिलान. समान संख्या में वर्णों से मेल खाने वाले नियमों में, सबसे पहले दिया गया नियम
चुना जाएगा।
का सामान्य प्रारूप लेक्रस स्रोत होगा:
परिभाषाएँ %% नियम %% उपयोगकर्तासबरूटीन्स
पहला पोस्ट "%%" नियमों की शुरुआत (नियमित अभिव्यक्ति और) को चिह्नित करना आवश्यक है
क्रियाएँ); दूसरा "%%" केवल तभी आवश्यक है जब उपयोगकर्ता सबरूटीन्स का पालन करें।
किसी भी पंक्ति में परिभाषाएँ ए से प्रारंभ होने वाला अनुभाग सी माना जाएगा
प्रोग्राम खंड और बाहरी परिभाषा क्षेत्र में कॉपी किया जाएगा लेक्स.yy.c फ़ाइल.
इसी प्रकार, कुछ भी परिभाषाएँ सीमांकक रेखाओं के बीच शामिल अनुभाग
केवल "%{" और "%}" के बाहरी परिभाषा क्षेत्र में भी अपरिवर्तित प्रतिलिपि बनाई जाएगी
लेक्स.yy.c फ़ाइल.
ऐसा कोई भी इनपुट (ए से शुरू होकर) या भीतर "%{" और "%}" सीमांकक रेखाएँ)
की शुरुआत में दिखाई दे रहा है नियम किसी भी नियम से पहले अनुभाग निर्दिष्ट किया जाएगा
करने के लिए लिखा लेक्स.yy.c के लिए चर की घोषणा के बाद yylex() फ़ंक्शन और
कोड की पहली पंक्ति से पहले yylex(). इस प्रकार, उपयोगकर्ता चर स्थानीय से yylex() हो सकता है
यहां घोषित किया गया है, साथ ही प्रवेश पर निष्पादित करने के लिए एप्लिकेशन कोड भी yylex()।
द्वारा की गई कार्यवाही लेक्रस से शुरू होने वाले किसी भी इनपुट का सामना करते समय या भीतर
"%{" और "%}" में दिखाई देने वाली सीमांकक रेखाएँ नियम अनुभाग लेकिन एक या अधिक के बाद आ रहा है
नियम अपरिभाषित है. ऐसे इनपुट की उपस्थिति के परिणामस्वरूप गलत परिभाषा हो सकती है
la yylex() समारोह।
इनपुट में सी-भाषा कोड में सी-भाषा ट्रिग्राफ नहीं होंगे। सी-भाषा कोड
अंदर "%{" और "%}" सीमांकक रेखाओं में केवल से मिलकर बनी कोई रेखा नहीं होगी "%}",
या केवल का "%%".
परिभाषाएँ in लेक्रस
परिभाषाएँ पहले के सामने पेश हों "%%" सीमांकक. इस खंड में कोई भी पंक्ति शामिल नहीं है
के बीच "%{" और "%}" पंक्तियाँ और a से आरंभ नहीं ए को परिभाषित करने के लिए माना जाएगा
लेक्रस प्रतिस्थापन स्ट्रिंग. इन पंक्तियों का प्रारूप इस प्रकार होगा:
नाम विकल्प
एक तो नाम परिणाम आईएसओ सी मानक में पहचानकर्ताओं की आवश्यकताओं को पूरा नहीं करता है
अपरिभाषित है. डोर विकल्प स्ट्रिंग को प्रतिस्थापित करेगा {नाम} जब इसका उपयोग a में किया जाता है
नियम। नाम इस संदर्भ में स्ट्रिंग को तभी पहचाना जाएगा जब ब्रेसिज़ हों
प्रदान किया गया है और जब यह ब्रैकेट अभिव्यक्ति के भीतर या डबल-कोट्स के भीतर प्रकट नहीं होता है।
में परिभाषाएँ अनुभाग, a से शुरू होने वाली कोई भी पंक्ति ('%') चरित्र और
इसके बाद इनमें से किसी एक अक्षरांकीय शब्द से शुरुआत होती है 'एस' or 'एस' के एक सेट को परिभाषित करेगा
आरंभ की शर्तें. a से प्रारंभ होने वाली कोई भी पंक्ति '%' इसके बाद इनमें से किसी एक से शुरू होने वाला शब्द आता है
'एक्स' or 'एक्स' विशिष्ट प्रारंभ शर्तों के एक सेट को परिभाषित करेगा। जब जेनरेट किया गया स्कैनर है
में %s राज्य, बिना राज्य निर्दिष्ट वाले पैटर्न भी सक्रिय होंगे; में एक %x राज्य, ऐसा
पैटर्न सक्रिय नहीं होंगे. पहले शब्द के बाद शेष पंक्ति होगी
एक या अधिक माना जाता है -प्रारंभ स्थितियों के अलग-अलग नाम। प्रारंभ स्थिति
नामों का निर्माण परिभाषा नामों की तरह ही किया जाएगा। प्रारंभ की स्थितियाँ हो सकती हैं
जैसा कि वर्णित है, नियमित अभिव्यक्तियों के मिलान को एक या अधिक राज्यों तक सीमित करने के लिए उपयोग किया जाता है
नियमित एक्सप्रेशंस in लेक्रस.
कार्यान्वयन निम्नलिखित दो परस्पर-विशिष्ट घोषणाओं में से किसी एक को स्वीकार करेगा
में परिभाषाएँ खंड:
%सरणी के प्रकार की घोषणा करें yytext एक शून्य-समाप्त वर्ण सरणी होना।
%सूचक के प्रकार की घोषणा करें yytext एक अशक्त-समाप्त चरित्र का सूचक होना
स्ट्रिंग.
का डिफ़ॉल्ट प्रकार yytext कार्यान्वयन-परिभाषित है. यदि कोई एप्लिकेशन संदर्भित करता है yytext
स्कैनर स्रोत फ़ाइल के बाहर (अर्थात, a बाहरी), आवेदन में शामिल होगा
उपयुक्त %सरणी or %सूचक स्कैनर स्रोत फ़ाइल में घोषणा।
कार्यान्वयन में घोषणाएं स्वीकार की जाएंगी परिभाषाएँ निश्चित सेटिंग के लिए अनुभाग
आंतरिक तालिका आकार। घोषणाएँ निम्न तालिका में दर्शाई गई हैं।
तालिका: तालिका आकार घोषणाओं in लेक्रस
┌────────────┬───────────────────── ────────── ┬───────────────┐
│घोषणा │ विवरण │ न्यूनतम वैल्यू │
├────────────┼───────────────────── ────────── ┼───────────────┤
│%p n │ पदों की संख्या │ 2500 │
│%n n │ राज्यों की संख्या │ 500 │
│%a n │ संक्रमणों की संख्या │ 2000 │
│%e n │ पार्स ट्री नोड्स की संख्या │ 1000 │
│%k n │ पैक किए गए वर्ण वर्गों की संख्या │ 1000 │
│%o n │ आउटपुट ऐरे का आकार │ 3000 │
└────────────┴───────────────────── ────────── ┴───────────────┘
मेज पर, n एक सकारात्मक दशमलव पूर्णांक का प्रतिनिधित्व करता है, जिसके पहले एक या अधिक होता है
पात्र। इन तालिका आकार संख्याओं का सटीक अर्थ कार्यान्वयन-परिभाषित है।
कार्यान्वयन यह दस्तावेज करेगा कि ये संख्याएँ किस प्रकार प्रभावित करती हैं लेक्रस उपयोगिता और वे कैसे हैं
कार्यान्वयन से उत्पन्न होने वाले किसी भी आउटपुट से संबंधित सीमाएं होनी चाहिए
के निष्पादन के दौरान सामना करना पड़ा लेक्रस. इससे यह तय हो सकेगा
आउटपुट, अनुमति देने के लिए तालिका आकार के किस मान को संशोधित करने की आवश्यकता है लेक्रस सफलतापूर्वक करने के लिए
इनपुट भाषा के लिए तालिकाएँ बनाएँ। न्यूनतम मान कॉलम में मान दर्शाते हैं
अनुरूप कार्यान्वयन न्यूनतम मूल्य प्रदान करेगा।
नियम in लेक्रस
में नियम लेक्रस स्रोत फ़ाइलें एक तालिका होती हैं जिसमें बाएं कॉलम में नियमित फ़ाइलें होती हैं
अभिव्यक्तियाँ और दाएँ कॉलम में क्रियान्वित की जाने वाली क्रियाएँ (C प्रोग्राम टुकड़े) शामिल हैं
जब भाव पहचाने जाते हैं.
ERE कार्य
ERE कार्य
...
एक पंक्ति के विस्तारित नियमित अभिव्यक्ति (ईआरई) भाग को अलग किया जाएगा कार्य by
एक या अधिक पात्र। एक नियमित अभिव्यक्ति युक्त पात्र होंगे
निम्नलिखित शर्तों में से किसी एक के तहत मान्यता दी जानी चाहिए:
* संपूर्ण अभिव्यक्ति दोहरे उद्धरण चिह्नों के भीतर दिखाई देती है।
* द अक्षर दोहरे उद्धरण चिह्नों या वर्गाकार कोष्ठकों में दिखाई देते हैं।
* प्रत्येक a से पहले है चरित्र।
उपयोगकर्ता सबरूटीन्स in लेक्रस
उपयोगकर्ता सबरूटीन्स अनुभाग में कुछ भी कॉपी किया जाएगा लेक्स.yy.c निम्नलिखित yylex()।
नियमित एक्सप्रेशंस in लेक्रस
RSI लेक्रस उपयोगिता विस्तारित नियमित अभिव्यक्तियों के सेट का समर्थन करेगी (आधार देखें)।
POSIX.1‐2008 की परिभाषाएं मात्रा, अनुभाग 9.4, विस्तृत नियमित एक्सप्रेशंस), उसके साथ
वाक्यविन्यास में निम्नलिखित परिवर्धन और अपवाद:
"..." डबल-कोट्स में संलग्न कोई भी स्ट्रिंग भीतर के वर्णों का प्रतिनिधित्व करेगी
स्वयं के समान दोहरे उद्धरण चिह्न, सिवाय इसके -पलायन (जो दिखाई देते हैं
निम्नलिखित तालिका) को मान्यता दी जाएगी। कोई - भागने का क्रम होगा
समापन उद्धरण द्वारा समाप्त किया जाएगा। उदाहरण के लिए, "\01""1" एकल का प्रतिनिधित्व करता है
स्ट्रिंग: वर्ण के बाद अष्टक मान 1 '1'.
<राज्य>r,राज्य1,राज्य2,...>r
नियमित अभिव्यक्ति r मिलान तभी किया जाएगा जब प्रोग्राम इनमें से किसी एक में हो
प्रारंभ की शर्तों द्वारा संकेत दिया गया राज्य, state1, और इसी तरह; देखना क्रियाएँ in लेक्रस. (जैसा
इस खंड के शेष भाग की मुद्रण संबंधी परंपराओं का अपवाद
इस मामले में POSIX.1-2008राज्य> एक मेटावेरिएबल का प्रतिनिधित्व नहीं करता है, लेकिन
किसी प्रतीक के चारों ओर शाब्दिक कोण-कोष्ठक वर्ण।) प्रारंभ स्थिति
नियमित अभिव्यक्ति की शुरुआत में ही इसे इस रूप में मान्यता दी जाएगी।
r/x नियमित अभिव्यक्ति r इसका मिलान केवल तभी किया जाएगा जब इसका पालन किया जाएगा
नियमित अभिव्यक्ति की घटना x (x अनुगामी संदर्भ का उदाहरण है,
आगे परिभाषित किया गया है)। टोकन वापस आ गया yytext केवल मेल खाएगा r। अगर
का पिछला भाग r की शुरुआत से मेल खाता है x, परिणाम अनिर्दिष्ट है.
r अभिव्यक्ति में आगे का पिछला संदर्भ या शामिल नहीं हो सकता '' (मैच-समाप्ति-
लाइन) ऑपरेटर; x को शामिल नहीं कर सकते '^' (मैच-शुरुआत-ऑफ-लाइन) ऑपरेटर, न ही
अनुगामी संदर्भ, न ही '' ऑपरेटर। अर्थात्, अनुगामी होने की केवल एक घटना
a में संदर्भ की अनुमति है लेक्रस नियमित अभिव्यक्ति, और '^' ऑपरेटर ही हो सकता है
ऐसी अभिव्यक्ति की शुरुआत में प्रयोग किया जाता है।
{नाम} कब नाम से प्रतिस्थापन प्रतीकों में से एक है परिभाषाएँ खंड, द
घेरने वाले ब्रेसिज़ सहित स्ट्रिंग को प्रतिस्थापित किया जाएगा विकल्प
मान। विकल्प मूल्य को विस्तारित नियमित अभिव्यक्ति में माना जाएगा
मानो वह कोष्ठकों में बंद हो। कोई प्रतिस्थापन नहीं होगा यदि {नाम}
ब्रैकेट अभिव्यक्ति के भीतर या डबल-कोट्स के भीतर होता है।
एक ईआरई के भीतर, ए चरित्र को भागने का क्रम शुरू करने वाला माना जाएगा
POSIX.1-2008 के बेस डेफिनिशन वॉल्यूम में तालिका में निर्दिष्ट, अध्याय 5, पट्टिका
प्रारूप नोटेशन ('\\', '\ए', '\बी', '\एफ', '\n', '\आर', '\t', '\v'). इसके अलावा, पलायन
निम्नलिखित तालिका में अनुक्रमों को पहचाना जाएगा।
एक शाब्दिक ईआरई के भीतर नहीं हो सकता; भागने का क्रम '\n' करने के लिए इस्तेमाल किया जा सकता है
एक का प्रतिनिधित्व करें . ए किसी अवधि ऑपरेटर द्वारा मिलान नहीं किया जाएगा।
तालिका: पलायन दृश्यों in लेक्रस
┌─────────┬───────────────────────── ────────── ──────────────┐
│ पलायन │ │ │
│अनुक्रम │ विवरण │ अर्थ │
├─────────┼─────────────────────────── ────────── ──────────────┤
\अंक │ ए पात्र │ वह पात्र जिसका │
│ │ के बाद सबसे लंबी │ एन्कोडिंग │ का प्रतिनिधित्व करती है
│ │ एक, दो, या │ का क्रम एक, दो, या │ द्वारा
│ │ तीन अष्टक-अंक │ तीन-अंकीय अष्टक │
│ │ अक्षर (01234567)। │ पूर्णांक. मल्टी-बाइट │
│ │ यदि सभी अंक │ अक्षर हैं तो │ की आवश्यकता है
│ │ 0 (अर्थात, │ एकाधिक, संयोजित │
│ │ इस │ के │ एस्केप अनुक्रमों का प्रतिनिधित्व
│ │ NUL वर्ण), │ प्रकार, │ सहित
│ │ व्यवहार अपरिभाषित है। │ अग्रणी │ के लिए
│ │ │ प्रत्येक बाइट। │
├─────────┼─────────────────────────── ────────── ──────────────┤
│\xअंक │ ए पात्र │ वह पात्र जिसका │
│ │ के बाद सबसे लंबी │ एन्कोडिंग │ का प्रतिनिधित्व करती है
│ │ हेक्साडेसिमल का अनुक्रम- │ हेक्साडेसिमल द्वारा │
│ │ अंक वर्ण │ पूर्णांक। │
│ │ (01234567abcdefABCDEF)। │ │
│ │ यदि सभी अंक │ │ हैं
│ │ 0 (अर्थात, │ │
│ │ का प्रतिनिधित्व │ │
│ │ NUL वर्ण), │ │
│ │ व्यवहार अपरिभाषित है। │ │
├─────────┼─────────────────────────── ────────── ──────────────┤
│\c │ ए चरित्र │ चरित्र 'सी', │
│ │ के बाद कोई │ अपरिवर्तित। │
│ │ चरित्र का वर्णन नहीं │ │
│ │ इस तालिका में या │ │ में
│ │ आधार में तालिका │ │
│ │ परिभाषाओं की मात्रा │ │
│ │ POSIX.1‐2008, अध्याय 5, │ │
मैं पट्टिका प्रारूप नोटेशन मैं
│ │ ('\\', '\ए', '\बी', '\एफ', │ │
मैं '\n', '\आर', '\t', '\v'). │ │
└─────────┴──────────────────────┴── ────────── ──────────────┘
नोट: एक तो '\एक्स' अनुक्रम के तुरंत बाद हेक्साडेसिमल अंक की आवश्यकता होती है
चरित्र, एक अनुक्रम जैसे "\x1""1" का उपयोग किया जा सकता है, जो एक चरित्र का प्रतिनिधित्व करता है
जिसमें मान 1, उसके बाद वर्ण शामिल है '1'.
विस्तारित नियमित अभिव्यक्तियों को दी गई प्राथमिकता का क्रम लेक्रस उससे भिन्न है
POSIX.1-2008 के आधार परिभाषा खंड में निर्दिष्ट, अनुभाग 9.4, विस्तृत नियमित
एक्सप्रेशंस. के लिए प्राथमिकता का क्रम लेक्रस जैसा कि निम्नलिखित तालिका में दिखाया गया है,
उच्च से निम्न की ओर.
नोट: बच गए पात्रों की प्रविष्टि का मतलब यह नहीं है कि ये ऑपरेटर हैं, लेकिन
उनके रिश्तों को सच दिखाने के लिए उन्हें तालिका में शामिल किया गया है
संचालक. प्रारंभ स्थिति, अनुगामी संदर्भ और एंकरिंग नोटेशन हैं
में वर्णित प्लेसमेंट प्रतिबंधों के कारण तालिका से हटा दिया गया है
यह अनुभाग; वे केवल ईआरई की शुरुआत या अंत में ही दिखाई दे सकते हैं।
तालिका: ERE प्रधानता in लेक्रस
┌──────────────────────────────────┬─── ────────── ────────┐
│ विस्तृत नियमित अभिव्यक्ति │ प्रधानता │
├──────────────────────────────────┼─── ────────── ────────┤
│संकलन संबंधी ब्रैकेट प्रतीकों │ [= =] [: :] [. .] │
│भाग निकले अक्षर │ \विशेष चरित्र> │
│ब्रैकेट अभिव्यक्ति │ [ ] │
│के हवाले │ "..." │
│समूहीकरण │ ( ) │
│परिभाषा │ {नाम} │
│एकल वर्ण RE प्रतिलिपि │ * + ? │
│कड़ी मैं
│अंतराल अभिव्यक्ति │ {एम,एन} │
│अदल-बदल │ | │
└──────────────────────────────┴─── ────────── ────────┘
ईआरई एंकरिंग ऑपरेटर '^' और '' तालिका में प्रकट न हों. साथ लेक्रस नियमित
अभिव्यक्ति, ये ऑपरेटर उनके उपयोग में प्रतिबंधित हैं: '^' ऑपरेटर ही हो सकता है
संपूर्ण रेगुलर एक्सप्रेशन की शुरुआत में उपयोग किया जाता है, और '' ऑपरेटर केवल पर
अंत। ऑपरेटर संपूर्ण रेगुलर एक्सप्रेशन पर लागू होते हैं। इस प्रकार, उदाहरण के लिए, पैटर्न
"(^एबीसी)|(def$)" अपरिभाषित है; इसके बजाय इसे दो अलग-अलग नियमों के रूप में लिखा जा सकता है, एक के साथ
नियमित अभिव्यक्ति "^एबीसी" और एक के साथ "डीईएफ़$", जो के माध्यम से एक सामान्य क्रिया साझा करते हैं
विशेष '|' कार्रवाई (नीचे देखें). यदि पैटर्न लिखा गया था "^एबीसी|डीईएफ़$", यह मेल खाएगा
भी "एबीसी" or "डीफ़" अपने आप एक लाइन पर.
सामान्य ईआरई नियमों के विपरीत, अधिकांश ऐतिहासिक लोगों द्वारा एम्बेडेड एंकरिंग की अनुमति नहीं है लेक्रस
कार्यान्वयन. एम्बेडेड एंकरिंग का एक उदाहरण जैसे पैटर्न के लिए होगा
"(^| )फू( |$)" मैच के लिए "फू" जब वह पूर्ण शब्द के रूप में विद्यमान हो। यह कार्यक्षमता कर सकती है
मौजूदा का उपयोग करके प्राप्त किया जा सकता है लेक्रस विशेषताएं:
^फू/[ \एन] |
" फू"/[ \एन] /* मिला foo as a अलग शब्द. */
यह भी ध्यान दें कि '' अनुगामी संदर्भ का एक रूप है (यह इसके समतुल्य है "/\एन") और इस तरह से
ऑपरेटर के किसी अन्य उदाहरण वाले नियमित अभिव्यक्तियों के साथ उपयोग नहीं किया जा सकता है (देखें)।
अनुवर्ती संदर्भ की पूर्ववर्ती चर्चा)।
अतिरिक्त नियमित अभिव्यक्ति अनुगामी-संदर्भ ऑपरेटर '/' एक के रूप में इस्तेमाल किया जा सकता है
साधारण चरित्र यदि दोहरे उद्धरण चिह्नों के भीतर प्रस्तुत किया जाए, "/"; ए से पहले ,
"\/"; या कोष्ठक अभिव्यक्ति के भीतर, "[/]". आरंभ-स्थिति '<' और '>' ऑपरेटरों
केवल रेगुलर एक्सप्रेशन की शुरुआत में आरंभ स्थिति में ही विशेष होगा;
नियमित अभिव्यक्ति में अन्यत्र उन्हें सामान्य वर्ण के रूप में माना जाएगा।
क्रियाएँ in लेक्रस
ईआरई का मिलान होने पर की जाने वाली कार्रवाई सी प्रोग्राम खंड या विशेष हो सकती है
नीचे वर्णित क्रियाएँ; प्रोग्राम खंड में एक या अधिक C कथन हो सकते हैं, और
इसमें विशेष क्रियाएं भी शामिल हो सकती हैं. खाली सी कथन ';' एक वैध कार्रवाई होगी; कोई
में स्ट्रिंग लेक्स.yy.c इनपुट जो ऐसे नियम के पैटर्न भाग से मेल खाता है
प्रभावी ढंग से नजरअंदाज किया गया या छोड़ दिया गया। हालाँकि, किसी कार्रवाई की अनुपस्थिति मान्य नहीं होगी, और
कार्य लेक्रस ऐसी स्थिति में लेना अपरिभाषित है।
सी कथनों और विशेष क्रियाओं सहित किसी क्रिया के लिए विशिष्टता का विस्तार किया जा सकता है
यदि ब्रेसिज़ में संलग्न है तो कई पंक्तियों में:
ERE <एक or अधिक कारतूस> { कार्यक्रम कथन
कार्यक्रम कथन }
प्रोग्राम स्टेटमेंट में असंतुलित घुंघराले ब्रेस प्रीप्रोसेसिंग टोकन नहीं होने चाहिए।
इनपुट में एक स्ट्रिंग होने पर डिफ़ॉल्ट क्रिया लेक्स.yy.c कार्यक्रम किसी से मेल नहीं खाता
अभिव्यक्ति स्ट्रिंग को आउटपुट में कॉपी करने के लिए होगी। क्योंकि a का डिफ़ॉल्ट व्यवहार
प्रोग्राम द्वारा उत्पन्न लेक्रस इनपुट को पढ़ना और उसे आउटपुट पर कॉपी करना, न्यूनतम है लेक्रस
स्रोत प्रोग्राम जो अभी है "%%" एक सी प्रोग्राम उत्पन्न करेगा जो केवल इनपुट की प्रतिलिपि बनाता है
आउटपुट अपरिवर्तित है।
चार विशेष कार्रवाइयां उपलब्ध होंगी:
| इको; अस्वीकार करना; शुरू
| कार्य '|' इसका मतलब है कि अगले नियम के लिए कार्रवाई इसके लिए कार्रवाई है
नियम। अन्य तीन क्रियाओं के विपरीत, '|' ब्रेसिज़ में बंद नहीं किया जा सकता या नहीं किया जा सकता
-समाप्त; आवेदन यह सुनिश्चित करेगा कि यह अकेले निर्दिष्ट है,
बिना किसी अन्य कार्रवाई के.
इको; स्ट्रिंग की सामग्री लिखें yytext आउटपुट पर.
अस्वीकार करना; आमतौर पर इनपुट में दी गई स्ट्रिंग से केवल एक ही अभिव्यक्ति का मिलान होता है।
अस्वीकार इसका अर्थ है ``अगले अभिव्यक्ति पर जारी रखें जो वर्तमान इनपुट से मेल खाता है'',
और मौजूदा नियम के बाद जो भी नियम दूसरी पसंद होगा, उसे लागू करेगा
उसी इनपुट के लिए निष्पादित किया गया। इस प्रकार, कई नियमों का मिलान और निष्पादन किया जा सकता है
एक इनपुट स्ट्रिंग या ओवरलैपिंग इनपुट स्ट्रिंग के लिए। उदाहरण के लिए, दिया गया
नियमित अभिव्यक्ति "xyz" और "एक्सवाई" और इनपुट "xyz", आमतौर पर केवल नियमित
अभिव्यक्ति "xyz" मेल खाएगा. अगला प्रयास मैच इसके बाद शुरू होगा z. If
में अंतिम क्रिया "xyz" नियम है अस्वीकार, यह नियम और दोनों "एक्सवाई" शासन
निष्पादित किया जाएगा. अस्वीकार कार्रवाई इस प्रकार क्रियान्वित की जा सकती है
इसके बाद नियंत्रण का प्रवाह जारी नहीं रहता, मानो यह इसके बराबर हो गोटो
के दूसरे भाग में yylex(). का उपयोग अस्वीकार परिणाम कुछ हद तक बड़ा हो सकता है और
धीमे स्कैनर.
शुरू कार्य:
शुरू नया राज्य;
स्थिति (प्रारंभ स्थिति) पर स्विच करता है नया राज्य. यदि स्ट्रिंग नया राज्य है
में प्रारंभ शर्त के रूप में पहले घोषित नहीं किया गया था परिभाषाएँ अनुभाग,
परिणाम अनिर्दिष्ट हैं. प्रारंभिक अवस्था को अंक द्वारा दर्शाया जाता है '0' or
टोकन प्रारंभिक.
नीचे वर्णित फ़ंक्शन या मैक्रोज़ इसमें शामिल उपयोगकर्ता कोड तक पहुंच योग्य हैं लेक्रस
इनपुट. यह निर्दिष्ट नहीं है कि वे सी कोड आउटपुट में दिखाई देते हैं या नहीं लेक्रस, या हैं
के माध्यम से ही पहुंच योग्य है -एल l संकार्य को c99 ( लेक्रस पुस्तकालय)।
int yylex(शून्य)
इनपुट पर शाब्दिक विश्लेषण करता है; यह द्वारा उत्पन्न प्राथमिक कार्य है
la लेक्रस उपयोगिता। इनपुट के अंत तक पहुंचने पर फ़ंक्शन शून्य लौटाएगा;
अन्यथा, यह उन कार्यों द्वारा निर्धारित गैर-शून्य मान (टोकन) लौटाएगा
चुने गए हैं।
int और अधिक(शून्य)
जब कॉल किया जाता है, तो यह इंगित करता है कि जब अगली इनपुट स्ट्रिंग पहचानी जाती है, तो यह होना है
के वर्तमान मूल्य से जोड़ा गया yytext इसे बदलने के बजाय; में मूल्य
येलेंग तदनुसार समायोजित किया जाएगा.
int yyless(int n)
बरकरार रखती है n प्रारंभिक अक्षर yytext, एनयूएल-समाप्त, और शेष का इलाज करता है
पात्र ऐसे जैसे कि उन्हें पढ़ा ही न गया हो; में मूल्य येलेंग समायोजित किया जाएगा
तदनुसार।
int निवेश(शून्य)
इनपुट से अगला वर्ण लौटाता है, या फ़ाइल के अंत में शून्य लौटाता है। यह प्राप्त होगा
स्ट्रीम पॉइंटर से इनपुट हाँ, हालाँकि संभवतः एक मध्यवर्ती बफ़र के माध्यम से।
इस प्रकार, एक बार स्कैनिंग शुरू हो जाने के बाद, के मूल्य में परिवर्तन का प्रभाव पड़ता है हाँ is
अपरिभाषित. पढ़ा गया कैरेक्टर स्कैनर के इनपुट स्ट्रीम से हटा दिया जाएगा
स्कैनर द्वारा किसी भी प्रोसेसिंग के बिना।
int अनपुट(int c)
चरित्र लौटाता है 'सी' इनपुट के लिए; yytext और येलेंग तक अपरिभाषित हैं
अगली अभिव्यक्ति मेल खाती है. उपयोग करने का परिणाम अनपुट() से अधिक वर्णों के लिए
इनपुट किया गया है अनिर्दिष्ट है।
निम्नलिखित फ़ंक्शन केवल इसमें दिखाई देंगे लेक्रस पुस्तकालय के माध्यम से पहुँचा जा सकता है -एल l
संकार्य; इसलिए उन्हें एक अनुरूप अनुप्रयोग द्वारा पुनः परिभाषित किया जा सकता है:
int yywrap(शून्य)
के द्वारा बुलाया गया yylex()फ़ाइल के अंत में; डिफ़ॉल्ट yywrap() हमेशा 1 लौटाएगा। यदि
आवेदन की आवश्यकता है yylex() इनपुट के किसी अन्य स्रोत के साथ प्रसंस्करण जारी रखने के लिए,
तब एप्लिकेशन में एक फ़ंक्शन शामिल हो सकता है yywrap(), जो किसी अन्य फ़ाइल को संबद्ध करता है
बाह्य चर के साथ फ़ाइल * हाँ और शून्य का मान लौटाएगा।
int मुख्य(int एर्गसी, टैंक *अर्जीवी[])
कॉल yylex() शाब्दिक विश्लेषण करने के लिए, फिर बाहर निकल जाता है। उपयोगकर्ता कोड में शामिल हो सकते हैं
मुख्य() एप्लिकेशन-विशिष्ट संचालन, कॉलिंग करने के लिए yylex() जैसा लागू हो।
के अलावा निवेश(), अनपुट(), तथा मुख्य(), द्वारा उत्पन्न सभी बाहरी और स्थिर नाम लेक्रस
उपसर्ग से शुरू होगा yy or YY.
बाहर निकलें स्थिति
निम्नलिखित निकास मान लौटाए जाएंगे:
0 सफल समापन।
> 0 एक त्रुटि हुई।
परिणामों OF त्रुटियों
चूक।
RSI निम्नलिखित वर्गों रहे जानकारीपूर्ण।
आवेदन उपयोग
अनुरूप अनुप्रयोगों को चेतावनी दी जाती है कि नियम अनुभाग, बिना किसी कार्रवाई के एक ईआरई है
स्वीकार्य नहीं है, लेकिन इसे ग़लत मानने की ज़रूरत नहीं है लेक्रस। इसके परिणामस्वरूप हो सकता है
संकलन या रनटाइम त्रुटियाँ.
के प्रयोजन के निवेश() का उद्देश्य वर्णों को इनपुट स्ट्रीम से हटाना और उन्हें दूर फेंकना है
जहाँ तक शाब्दिक विश्लेषण का संबंध है। एक सामान्य उपयोग किसी टिप्पणी के मुख्य भाग को त्यागना है
एक बार किसी टिप्पणी की शुरुआत पहचानी जाती है।
RSI लेक्रस नियमित अभिव्यक्ति के उपचार में उपयोगिता का पूरी तरह से अंतर्राष्ट्रीयकरण नहीं हुआ है
la लेक्रस स्रोत कोड या उत्पन्न शाब्दिक विश्लेषक। का होना वांछनीय प्रतीत होगा
शाब्दिक विश्लेषक इसमें दिए गए नियमित अभिव्यक्तियों की व्याख्या करता है लेक्रस स्रोत के अनुसार
जब शाब्दिक विश्लेषक निष्पादित होता है तो पर्यावरण निर्दिष्ट होता है, लेकिन यह संभव नहीं है
वर्तमान के साथ लेक्रस तकनीकी। इसके अलावा, शाब्दिक विश्लेषकों की प्रकृति
द्वारा उत्पादित लेक्रस इनपुट भाषा की शाब्दिक आवश्यकताओं से निकटता से जुड़ा होना चाहिए
वर्णन किया जा रहा है, जो वैसे भी अक्सर स्थानीय-विशिष्ट होता है। (उदाहरण के लिए, एक लिखना
फ़्रेंच पाठ के लिए उपयोग किया जाने वाला विश्लेषक अन्य को संसाधित करने के लिए स्वचालित रूप से उपयोगी नहीं है
भाषाएँ।)
उदाहरण
निम्नलिखित एक का उदाहरण है लेक्रस प्रोग्राम जो एक अल्पविकसित स्कैनर लागू करता है
पास्कल जैसा वाक्यविन्यास:
%{
/* आवश्यकता इसका एसटी la कॉल सेवा मेरे एटोफ () नीचे. */
# शामिल
/* आवश्यकता इसका एसटी प्रिंटफ(), fopen(), और stdin नीचे. */
# शामिल
%}
अंक [0−9]
आईडी [a−z][a−z0−9]*
%%
{अंक}+ {
प्रिंटफ ("एक पूर्णांक: %s (%d)\n", yytext,
atoi(yytext));
}
{DIGIT}+"।"{DIGIT}* {
प्रिंटफ ("एक फ्लोट: %s (%g)\n", yytext,
atof(yytext));
}
यदि|तब|शुरू|अंत|प्रक्रिया|कार्य {
प्रिंटफ ("एक कीवर्ड: %s\n", yytext);
}
{आईडी} प्रिंटफ ("एक पहचानकर्ता: %s\n", yytext);
"+"|"−"|"*"|"/" printf("एक ऑपरेटर: %s\n", yytext);
"{"[^}\n]*"}" /* एक-पंक्ति टिप्पणियाँ खाएँ। */
[ \t\n]+ /* सफेद जगह खाओ। */
. प्रिंटफ ("अपरिचित वर्ण: %s\n", yytext);
%%
int मुख्य(int argc, char *argv[])
{
++argv, −−argc; /* प्रोग्राम का नाम छोड़ें. */
यदि (argc > 0)
yyin = fopen(argv[0], "r");
अन्य
yyin = stdin;
yylex();
}
औचित्य
यद्यपि -सी इसमें C भाषा के विकल्प और संदर्भ बरकरार रखे गए हैं
विवरण, लेक्रस अन्य भाषाओं के लिए सामान्यीकृत किया जा सकता है, जैसा कि एक समय में ईएफएल के लिए किया गया था,
विस्तारित फोरट्रान भाषा। के बाद से लेक्रस इनपुट विशिष्टता अनिवार्य रूप से भाषा है-
स्वतंत्र, इस उपयोगिता के संस्करण Ada, Modula-2, या पास्कल के उत्पादन के लिए लिखे जा सकते हैं
कोड, और ऐसे ज्ञात ऐतिहासिक कार्यान्वयन हैं जो ऐसा करते हैं।
का वर्तमान विवरण लेक्रस अंतर्राष्ट्रीयकृत ईआरई से निपटने के मुद्दे को दरकिनार कर देता है
में लेक्रस स्रोत कोड या उत्पन्न शाब्दिक विश्लेषक। यदि यह द्वारा प्रयुक्त मॉडल का अनुसरण करता है awk
(स्रोत कोड को POSIX लोकेल में प्रस्तुत किया गया माना जाता है, लेकिन इनपुट और आउटपुट हैं
पर्यावरण चर द्वारा निर्दिष्ट स्थान में), फिर शाब्दिक में तालिकाएँ
विश्लेषक द्वारा निर्मित लेक्रस में निर्दिष्ट ईआरई की व्याख्या करेगा लेक्रस स्रोत के संदर्भ में
पर्यावरण चर कब निर्दिष्ट किया गया लेक्रस किया गया था। वांछित प्रभाव होगा
शाब्दिक विश्लेषक इसमें दिए गए ईआरई की व्याख्या करता है लेक्रस स्रोत के अनुसार
जब शाब्दिक विश्लेषक निष्पादित होता है तो पर्यावरण निर्दिष्ट होता है, लेकिन इसके साथ यह संभव नहीं है
वर्तमान लेक्रस प्रौद्योगिकी।
ऑक्टल और हेक्साडेसिमल-अंकीय एस्केप अनुक्रमों का विवरण आईएसओ सी से सहमत है
भागने के अनुक्रमों का मानक उपयोग।
इस मानक के पुराने संस्करणों को आठ के अलावा अन्य बाइट्स के साथ कार्यान्वयन के लिए अनुमति दी गई है
बिट्स, लेकिन इसे इस संस्करण में संशोधित किया गया है।
कोई विस्तृत आउटपुट स्वरूप विनिर्देश नहीं है. का व्यवहार देखा गया लेक्रस चार से कम
अलग-अलग ऐतिहासिक कार्यान्वयन यह था कि इनमें से कोई भी कार्यान्वयन लगातार नहीं हुआ
त्रुटि और चेतावनी संदेशों के लिए लाइन नंबरों की सूचना दी। इसके अलावा, एक इच्छा भी थी
कि लेक्रस अतिरिक्त डायग्नोस्टिक संदेशों को आउटपुट करने की अनुमति दी जाए। संदेश प्रारूप छोड़ना
अनिर्दिष्ट इन स्वरूपण प्रश्नों और अंतर्राष्ट्रीयकरण की समस्याओं से बचता है।
हालांकि %x के लिए निर्दिष्टकर्ता अनन्य प्रारंभ स्थितियाँ ऐतिहासिक प्रथा नहीं है, यह है
माना जाता है कि यह ऐतिहासिक कार्यान्वयन में एक मामूली बदलाव है और इसे काफी बढ़ाता है
की उपयोगिता लेक्रस कार्यक्रम क्योंकि यह किसी एप्लिकेशन को अपेक्षित प्राप्त करने की अनुमति देता है
कम कथनों के साथ कार्यक्षमता।
RSI %सरणी और %सूचक घोषणाएँ ऐतिहासिक के बीच एक समझौते के रूप में जोड़ी गईं
सिस्टम. सिस्टम V-आधारित लेक्रस मिलान किए गए टेक्स्ट को a में कॉपी करता है yytext सरणी। झुकाना
बीएसडी और जीएनयू सिस्टम में समर्थित प्रोग्राम, एक पॉइंटर का उपयोग करता है। बाद वाले मामले में, महत्वपूर्ण
कुछ स्कैनर के लिए प्रदर्शन सुधार उपलब्ध हैं। अधिकांश ऐतिहासिक कार्यक्रम होने चाहिए
स्ट्रिंग होने के कारण एक सिस्टम से दूसरे सिस्टम में पोर्टिंग में कोई बदलाव की आवश्यकता नहीं है
संदर्भित दोनों मामलों में शून्य-समाप्त है। (द्वारा प्रयुक्त विधि झुकाना इसके मामले में है
जो अक्षर सही आता था उसे याद करके टोकन को उसी स्थान पर निरस्त करें
टोकन के बाद और अगले स्कैन पर आगे बढ़ने से पहले इसे बदलना।) मल्टी-फ़ाइल
बाहरी सन्दर्भ वाले कार्यक्रम yytext स्कैनर स्रोत फ़ाइल के बाहर होना चाहिए
वे अपनी ऐतिहासिक प्रणालियों पर काम करना जारी रखेंगे, लेकिन उन्हें नई प्रणालियों में से एक की आवश्यकता होगी
घोषणाओं को सख्ती से पोर्टेबल माना जाएगा।
ईआरई का विवरण ईआरई विवरण के अनावश्यक दोहराव से बचाता है क्योंकि उनका
ए के भीतर अर्थ लेक्रस ERE, POSIX.1-2008 के इस खंड में ERE के समान ही हैं।
ए से शुरू होने वाले पाठ से जुड़ी अपरिभाषित स्थिति का कारण या
अंदर "%{" और "%}" में दिखाई देने वाली सीमांकक रेखाएँ नियम अनुभाग ऐतिहासिक है
अभ्यास। बीएसडी और सिस्टम वी दोनों लेक्रस इंडेंटेड (या संलग्न) इनपुट को कॉपी करें नियम
अनुभाग (शुरुआत को छोड़कर) के पहुंच योग्य क्षेत्रों तक नहीं yylex() फ़ंक्शन (कोड
a के बाद सीधे लिखा जाता है तोड़ना कथन)। कुछ मामलों में, सिस्टम V लेक्रस एक उत्पन्न करता है
त्रुटि संदेश या सिंटैक्स त्रुटि, इंडेंटेड इनपुट के रूप पर निर्भर करता है।
कार्यों की सूची को उन कार्यों में विभाजित करने का इरादा जो दिखाई दे सकते हैं लेक्स.yy.c
बनाम वे जो केवल दिखाई देते हैं libl.a क्या केवल वे ही कार्य करते हैं libl.a हो सकता है
एक अनुरूप अनुप्रयोग द्वारा विश्वसनीय रूप से पुनः परिभाषित।
मानक आउटपुट और मानक त्रुटि का विवरण कुछ हद तक जटिल है क्योंकि
ऐतिहासिक लेक्रस कार्यान्वयन ने मानक आउटपुट के लिए नैदानिक संदेश जारी करना चुना
(जब तक आयकर दिया गया था)। POSIX.1-2008 इस व्यवहार की अनुमति देता है, लेकिन इसके लिए एक रास्ता छोड़ देता है
निदान के लिए मानक त्रुटि का उपयोग करने का अधिक अपेक्षित व्यवहार। इसके अलावा, सिस्टम वी
किसी भी तालिका का आकार दिए जाने पर आँकड़े लिखने के व्यवहार की अनुमति है, जबकि बीएसडी-
व्युत्पन्न सिस्टम इससे बच सकते हैं। प्रोग्रामर हमेशा वांछित प्राप्त कर सकता है
या तो का उपयोग करके परिणाम आयकर or -N विकल्प.
ऑपरेंड अनुभाग में इसके उपयोग का उल्लेख नहीं है - मानक इनपुट के पर्याय के रूप में; नहीं
सभी ऐतिहासिक कार्यान्वयन इनमें से किसी के लिए भी ऐसे उपयोग का समर्थन करते हैं पट्टिका संकार्य।
का विवरण अनुवाद तालिका इसके कारण प्रारंभिक प्रस्तावों से हटा दिया गया था
ऐतिहासिक अनुप्रयोगों में अपेक्षाकृत कम उपयोग।
की परिभाषा में परिवर्तन निवेश() फ़ंक्शन जो इनपुट की बफरिंग की अनुमति देता है
कुछ अनुप्रयोगों में प्रमुख प्रदर्शन लाभ का अवसर प्रस्तुत करता है।
निम्नलिखित उदाहरण बीच के अंतर को स्पष्ट करते हैं लेक्रस नियमित अभिव्यक्ति और नियमित
POSIX.1-2008 के इस खंड में अन्यत्र दिखाई देने वाली अभिव्यक्तियाँ। के नियमित अभिव्यक्ति के लिए
प्रपत्र "आर/एक्स", स्ट्रिंग मिलान r हमेशा लौटाया जाता है; भ्रम तब उत्पन्न हो सकता है जब
की शुरुआत x के पिछले भाग से मेल खाता है r. उदाहरण के लिए, नियमित दिया गया
अभिव्यक्ति "ए*बी/सीसी" और इनपुट "आआबसीसी", yytext स्ट्रिंग शामिल होगी "आआब" इस पर
मिलान। लेकिन नियमित अभिव्यक्ति दी गई "x*/xy" और इनपुट "xxxy", टोकन XXX, नहीं
xx, कुछ कार्यान्वयन द्वारा लौटाया जाता है क्योंकि XXX मैच "एक्स*".
नियम में "अब*/बीसी", "बी*" के अंत में r फैली rकी शुरुआत में मैच है
अनुगामी संदर्भ, इसलिए परिणाम अनिर्दिष्ट है। यदि यह नियम होता "एबी/बीसी", हालांकि
नियम पाठ से मेल खाता है "अब" जब इसके बाद पाठ आता है "बीसी". इस बाद वाले मामले में,
का मिलान r की शुरुआत तक विस्तार नहीं किया जा सकता x, इसलिए परिणाम निर्दिष्ट है।
भविष्य दिशानिर्देश
कोई नहीं.
onworks.net सेवाओं का उपयोग करके ऑनलाइन लेक्सपोज़िक्स का उपयोग करें
