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


(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*

तालिका नंबर एक

शाब्दिक विश्लेषण. नियमित भाषाएँ और परिमित ऑटोमेटा

रिकॉर्ड आर में संचालन और कोष्ठक के प्रतीकों और संकेतों की वर्णमाला के वर्णों की कुल संख्या से।

आधार. लंबाई 1 के भावों के लिए ऑटोमेटा: और निम्नलिखित चित्र में दिखाए गए हैं।


चावल। 5.1।

ध्यान दें कि इन तीनों ऑटोमेटा में से प्रत्येक में है अंतिम अवस्थाओं का सेटएक राज्य से मिलकर बना है.

प्रेरण कदम. आइए अब हम प्रत्येक के लिए यह मान लें नियमित अभिव्यक्तिलंबाई<= k построен соответствующий НКА, причем у него единственное заключительное состояние. Рассмотрим произвольное नियमित अभिव्यक्ति r लंबाई k+1 . अंतिम ऑपरेशन के आधार पर, इसके तीन रूप हो सकते हैं: (आर 1 + आर 2), (आर 1 आर 2) या (आर 1) *। मान लीजिए और क्रमशः L r1 और L r2 भाषाओं को पहचानने वाले NFA हैं। व्यापकता खोए बिना, हम मान लेंगे कि उनकी अलग-अलग अवस्थाएँ हैं: .

फिर एनएफए, जिसका आरेख चित्र में दिखाया गया है। 5.2, भाषा को पहचानता है।


चावल। 5.2।

इस मशीन में है राज्यों का सेट, जहां q 0 एक नई प्रारंभिक स्थिति है, q f एक नई (अद्वितीय!) अंतिम स्थिति है, और प्रोग्राम में ऑटोमेटन प्रोग्राम M 1 और M 2 और चार नए ट्रांज़िशन कमांड शामिल हैं:। जाहिर है, एनएफए एम द्वारा मान्यता प्राप्त भाषा में एल (एम 1) और एल (एम 2) से सभी शब्द शामिल हैं। दूसरी ओर, प्रत्येक शब्द q 0 से q f तक ले जाता है, और पहले चरण के बाद उसे ले जाने वाला पथ q 0 1 या q 0 2 से होकर गुजरता है। चूँकि अवस्थाएँ M 1 और M 2 प्रतिच्छेद नहीं करतीं, तो पहली स्थिति में यह पथ केवल q f 1 से a-संक्रमण द्वारा q f तक पहुँच सकता है और फिर . इसी तरह, दूसरे मामले में.

अभिव्यक्ति के लिए, भाषा एल आर को पहचानने वाले एनएफए का आरेख निम्नलिखित चित्र में दिखाया गया है।


चावल। 5.3।

इस मशीन में है राज्यों का सेट , प्रारंभिक अवस्था q 0 = q 0 1 , अंतिम अवस्था q f =q f 2 , और कार्यक्रम में ऑटोमेटन प्रोग्राम M 1 और M 2 और एक नया निर्देश शामिल है - अंतिम अवस्था M 1 से प्रारंभिक अवस्था M 2 में संक्रमण, यानी। . यहां यह भी स्पष्ट है कि q 0 = q 0 1 से q f = q f 2 तक का कोई भी पथ q f 1 से q 0 2 तक -संक्रमण से होकर गुजरता है। इसलिए, M द्वारा अनुमत कोई भी शब्द L M1 ) के कुछ शब्द का L M2 ) के कुछ शब्द के साथ संयोजन है, और ऐसे शब्दों के किसी भी संयोजन की अनुमति है। इसलिए, एनएफए एम भाषा को पहचानता है।

मान लीजिए r = r 1 * . भाषा को पहचानने वाले एनएफए का आरेख L r =L r1* = L M1 * चित्र में दिखाया गया है। 5.3।


चावल। 5.3।

इस मशीन में है राज्यों का सेट, जहां q 0 एक नई प्रारंभिक स्थिति है, q f एक नई (अद्वितीय!) अंतिम स्थिति है, और प्रोग्राम में ऑटोमेटन प्रोग्राम M 1 और चार नए ट्रांज़िशन कमांड शामिल हैं:। ज़ाहिर तौर से, । एक गैर-रिक्त शब्द w के लिए, पुनरावृत्ति की परिभाषा के अनुसार कुछ k >= 1 के लिए शब्द w को k उपशब्दों में विभाजित किया जा सकता है: w=w 1 w 2 ... w k और बस इतना ही। प्रत्येक i= 1,... ,k के लिए w i शब्द q 0 1 से q f 1 तक मैप करता है। फिर आरेख M में शब्द w के लिए एक पथ है

इस तरह, । इसके विपरीत, यदि कोई शब्द q 0 को q f में अनुवादित करता है, तो या तो यह अस्तित्व में है या इसे पथ q 0 1 द्वारा -संक्रमण द्वारा ले जाया जाता है, अंततः q f 1 से -संक्रमण द्वारा q f में समाप्त होता है। इसलिए, ऐसा शब्द.

प्रमेय 4.2 और 5.1 से हम सीधे प्राप्त करते हैं

परिणाम 5.1. प्रत्येक के लिए नियमित अभिव्यक्तिकोई व्यक्ति कुशलतापूर्वक एक नियतात्मक परिमित ऑटोमेटन का निर्माण कर सकता है जो इस अभिव्यक्ति द्वारा दर्शाई गई भाषा को पहचानता है।

यह कथन एक उदाहरण है संश्लेषण प्रमेय: कार्य विवरण के अनुसार (भाषा के रूप में)। नियमित अभिव्यक्ति) एक प्रोग्राम (DFA) जो इसे क्रियान्वित करता है, प्रभावी ढंग से निर्मित होता है। इसका उलटा भी सच है - विश्लेषण का प्रमेय.

प्रमेय 5.2. प्रत्येक नियतात्मक (या गैर-नियतात्मक) परिमित ऑटोमेटन के लिए, कोई निर्माण कर सकता है नियमित अभिव्यक्ति, जो इस ऑटोमेटन द्वारा मान्यता प्राप्त भाषा का प्रतिनिधित्व करता है।

इस प्रमेय का प्रमाण काफी तकनीकी है और हमारे पाठ्यक्रम के दायरे से परे है।

इस प्रकार, हम यह निष्कर्ष निकाल सकते हैं कि परिमित ऑटोमेटा भाषाओं का वर्ग वर्ग के साथ मेल खाता है नियमित भाषाएँ. निम्नलिखित में, हम इसे सरलता से कहेंगे ऑटोमेटा भाषाओं का वर्ग.

ऑटोमेटन एम आर का निर्माण प्रमेय 5.1 के प्रमाण में किया गया है

बुनियादी परिभाषाएँ वर्णमाला में नियमित अभिव्यक्ति Σ और उनके द्वारा दर्शाए जाने वाले नियमित सेट को पुनरावर्ती रूप से निम्नानुसार परिभाषित किया गया है: 1) एक नियमित अभिव्यक्ति जो एक नियमित सेट को दर्शाती है; 2) ई एक रेगुलर एक्सप्रेशन है जो एक नियमित सेट (ई) को दर्शाता है; 3) यदि एक Σ है, तो ए एक नियमित अभिव्यक्ति है जो नियमित सेट (ए) को दर्शाता है; 4) यदि p और q नियमित समुच्चय P और Q को दर्शाने वाले नियमित अभिव्यक्ति हैं, तो a) (p+q) P Q को दर्शाने वाली नियमित अभिव्यक्ति है; बी) पीक्यू, पीक्यू को दर्शाने वाला एक रेगुलर एक्सप्रेशन है; ग) p*, P* को दर्शाने वाला एक रेगुलर एक्सप्रेशन है; 5) और कुछ भी रेगुलर एक्सप्रेशन नहीं है।

मूल परिभाषाएँ प्राथमिकताकरण: * (पुनरावृत्ति) - सर्वोच्च प्राथमिकता; संयोजन; + (संघ)। तो 0 + 10* = (0 + (1 (0*)))। उदाहरण: 1. 01 का अर्थ है (01); 2. 0* - (0*); 3. (0+1)* - (0, 1)*; 4. (0+1)* 011 - का अर्थ है 0 और 1 से बनी और स्ट्रिंग 011 में समाप्त होने वाली सभी स्ट्रिंग्स का सेट; 5. (a+b) (a+b+0+1)* का अर्थ है a या b से शुरू होने वाली सभी स्ट्रिंग्स (0, 1, a, b)* का सेट।

लेम्मा की मुख्य परिभाषाएँ: 1) α + β = β + α 2) * = e 3) α + (β + γ) = (α + β) + γ 4) α(βγ) = (αβ)γ 5 ) α( β + γ) = αβ + αγ 6) (α + β)γ = αγ + βγ 7) αe = eα = α 8) α = 9) α+α* = α* 10) (α*)* = α* 11) α+α = α 12) α+ = α

आरटी और आरएम आरएम का संचार आरटी द्वारा उत्पन्न भाषाएं हैं। उदाहरण के लिए: x = a+b, y = c+d, x संयोजन: xy XY = (एसी, विज्ञापन, बीसी, बीडी)। k(u+o)t (k)(u, o)(t) = (व्हेल, बिल्ली) या लेमास नंबर 5 और नंबर 6 द्वारा k(u+o)m = व्हेल + बिल्ली (व्हेल, बिल्ली) . पुनरावृत्ति: x = a, x* X* = (e, a, aaa,…), यानी x* = e + xxx +…

आरटी और आरएम का संबंध संयोजन और मिलन की पुनरावृत्ति: (xy)* = e + xyxyxy + ... (x + y)* = e + (x + y)(x + y) + ... = = e + xx + xy + yx + yy + xxx + … उदाहरण: 0 + 1(0+1)* (0) ((1) (0, 1)*) = (0, 1, 10, 11, 100, 101, 110, 111…). संघ क्रमविनिमेय है: x + y = y + x संयोजन नहीं है: xy ≠ yx

आरटी और पीएम के बीच संबंध प्राथमिकता उदाहरण: x + yz (x, yz), (x + y)z (xz, yz), x + y* (e, x, y, yyy, yyyy,…), (x + y)* (e, x, y, xx, xy, yx, yy, xxx,…), (xy)* (e, xyxy,…), xy* (x, xyy, xyyy,…)। नए सूत्र: a* + e = a*; (ए + ई)* = ए*; ए*ए* = ए*; ई* = ई; वगैरह।

समीकरणों की नियमित प्रणालियाँ नियमित गुणांक वाले समीकरण X = a. X + b का एक हल है (सबसे छोटा निश्चित बिंदु) a*b: aa*b + b = (aa* + e)b = a*b नियमित गुणांक वाले समीकरणों की प्रणाली: X 1 = α 10 + α 11 X 1 + α 12 एक्स 2 +… + α 1 एन। एक्सएन एक्स 2 = α 20 + α 21 एक्स 1 + α 22 एक्स 2 + ... + α 2 एन। एक्सएन …………………………. . एक्सएन = αn 0 + αn 1 एक्स 1 + αn 2 एक्स 2 + … + αnn। एक्सएन अज्ञात - Δ = (एक्स 1, एक्स 2, …, एक्सएन)।

समीकरणों की नियमित प्रणाली समाधान एल्गोरिदम (गॉस विधि): चरण 1. सेट करें i = 1. चरण 2. यदि i = n है, तो चरण 4 पर जाएं। अन्यथा, Xi के लिए समीकरण Xi = αXi + β (β = β 0) के रूप में लिखें + βi +1 Xi+1 + … + βn.Xn). फिर, समीकरण Xi+1,…, Xn के लिए दाहिनी ओर, हम Xi को नियमित अभिव्यक्ति α*β से प्रतिस्थापित करते हैं। चरण 3. i को 1 से बढ़ाएं और चरण 2 पर लौटें। चरण 4. Xn के लिए समीकरण Xn = αXn + β के रूप में लिखें। चरण 5 पर जाएँ (i = n के साथ)। चरण 5. Xi के लिए समीकरण Xi = αXi + β है। Xi-1, …, X 1 के समीकरणों में Xi के बजाय α*β को प्रतिस्थापित करते हुए आउटपुट Xi = α*β पर लिखें। चरण 6. यदि i = 1 है, तो रुकें, अन्यथा i को 1 से कम करें और चरण 5 पर वापस लौटें।

डीएफए का आरडब्ल्यू में परिवर्तन डीएफए एम = (क्यू, Σ, δ, क्यू 0, एफ) के लिए हम नियमित गुणांक के साथ एक प्रणाली बनाते हैं जहां Δ = क्यू: 1. हम αij: = सेट करते हैं; 2. यदि δ(Xi, a) = Xj, a Σ, तो αij: = αij + a; 3. यदि Xi F या δ(Xi,) = HALT, तो αi 0: = e. हल करने के बाद वांछित RV X 1 = q 0 होगा।

डीएफए को आरडब्ल्यू में परिवर्तित करना उदाहरण: एक निश्चित-बिंदु संख्या के लिए, हमें सिस्टम मिलता है q 0 = + q 0 + sq 1 + pq 2 + dq 3 + q 4 q 1 = + q 0 + q 1 + pq 2 + dq 3 + क्यू 4 क्यू 2 = + क्यू 0 + क्यू 1 + क्यू 2 + क्यू 3 + डीक्यू 4 क्यू 3 = ई + क्यू 0 + क्यू 1 + क्यू 2 + डीक्यू 3 + पीक्यू 4 = ई + क्यू 0 + क्यू 1 + क्यू 2 + q 3 + dq 4 यहां: s संख्या का चिह्न है, s = "+" + "-"; पी - दशमलव बिंदु, पी = ". "; डी - संख्याएं, डी = "0" + "1" + ... + "9"।

डीएफए से आरडब्ल्यू रूपांतरण समाधान: क्यू 0 = *(वर्ग 1 + पीक्यू 2 + डीक्यू 3 + क्यू 4 +) = वर्ग 1 + पीक्यू 2 + डीक्यू 3 क्यू 1 = + क्यू 0 + क्यू 1 + पीक्यू 2 + डीक्यू 3 + क्यू 4 = पीक्यू 2 + डीक्यू 3, क्यू 2 = + क्यू 0 + क्यू 1 + क्यू 2 + क्यू 3 + डीक्यू 4 = डीक्यू 4, क्यू 3 = ई + क्यू 0 + क्यू 1 + क्यू 2 + डीक्यू 3 + पीक्यू 4 = डीक्यू 3 + पीक्यू 4 + ई, क्यू 4 = ई + क्यू 0 + क्यू 1 + क्यू 2 + क्यू 3 + डीक्यू 4 = डीक्यू 4 + ई। तीसरे समीकरण से: q 3 = dq 3 + pq 4 + e = d * (pq 4 + e)। चौथे समीकरण से: q 4 = dq 4 + e = d*.

DFA को RW में बदलें रिवर्स: q 3 = d*(pq 4 + e) ​​​​= d*(pd* + e), q 2 = dq 4 = dd*, q 1 = pq 2 + dq 3 = pdd* + डीडी *(पीडी* + ई), क्यू 0 = वर्ग 1 + पीक्यू 2 + डीक्यू 3 = एस(पीडीडी* + डीडी*(पीडी* + ई)) + पीडीडी* + डीडी*(पीडी* + ई)। इस प्रकार, यह DFA RE s(pdd* + dd*(pd* + e)) + pdd* + dd*(pd* + e) ​​से मेल खाता है। सरल बनाने के लिए: s(pdd* + dd*(pd* + e)) + pdd* + dd*(pd* + e) ​​​​= = spdd* + sdd*(pd* + e) ​​​​+ pdd* + dd*(pd* + e) ​​= (s + e)(pdd* + dd*(pd* + e)) छोटे अंकन के लिए, आप सकारात्मक पुनरावृत्ति का उपयोग कर सकते हैं aa* = a*a = a+: (s + e) )(पीडीडी* + डीडी* (पीडी* + ई)) = (एस + ई)(पीडी+ + डी+पीडी* + डी+)

डीएफए से आरटी परिवर्तन डीएफए संक्रमण फ़ंक्शन ग्राफ़ को बुनियादी नियमित अभिव्यक्ति संचालन में मैप करना: q 0 a b a q 1 q 2 q 1 q 0 a+b a b ab q 2 a*

DFA को RT में परिवर्तित करना संचालन के अधिक जटिल संयोजन: q 0 a q 1 b b b q 0 a q 2 q 1 (a + e)b c b q 0 q 2 ab(cab)* q 0 (a + b)* q 0 a q 1 aa* = a+ क्यू 0 ए क्यू 1 ए बी ए ए (एबी)+ क्यू 2 बी क्यू 1 सी ई + (ए + बी)सी*

डीएफए से आरडब्ल्यू रूपांतरण आरडब्ल्यू (एस + ई) (पीडी + + डी + (पीडी * + ई)) के लिए: क्यू 0 पी क्यू 2 डी एस पी क्यू 1 डी डी क्यू 3 डी पी क्यू 4 डी क्यू 5 डी

रियल टाइम प्रोग्रामिंग रेगुलर एक्सप्रेशन: कई प्रोग्रामिंग भाषाओं (पीएचपी, जावा स्क्रिप्ट,…) में निर्मित; प्लग-इन के रूप में कार्यान्वित किया गया (उदाहरण के लिए, .NET प्लेटफ़ॉर्म के लिए रेगेक्स क्लास)। लेखन रूपों में अंतर: x? = x + e x(1, 3) = x + xxx आदि।

आरटी प्रोग्रामिंग रेगेक्स क्लास कंस्ट्रक्ट्स (सिस्टम.टेक्स्ट.रेगुलर.एक्सप्रेशन): कैरेक्टर एस्केप सीक्वेंस इंटरप्रिटेशन बी जब वर्गाकार ब्रैकेट में उपयोग किया जाता है, तो कैरेक्टर "←" (यू 0008) टी, आर, एन, ए, एफ, वी टैब (यू) से मेल खाता है। 0009), कैरिज रिटर्न (यू 000 डी), नई लाइन (यू 000 ए), आदि। X नियंत्रण वर्ण (उदाहरण के लिए, c. C Ctrl+C है, u 0003) e एस्केप (u 001 B) ooo ऑक्टल ASCII वर्ण xhh हेक्स ASCII वर्ण उह्ह्ह यूनिकोड वर्ण निम्नलिखित वर्ण कोई विशेष PB वर्ण नहीं है। सभी विशेष वर्णों को इस वर्ण के साथ छोड़ देना चाहिए। उदाहरण (उदाहरण में, पैटर्न और खोज स्ट्रिंग दी गई है, स्ट्रिंग में पाए गए मिलान को रेखांकित किया गया है): @"rnw+" - "rn। यहां n दो स्ट्रिंग हैं" .

वर्णों के प्रोग्रामिंग आरटी उपसमुच्चय। स्ट्रिंग के अंत को छोड़कर कोई भी वर्ण (एन) सेट से कोई भी वर्ण [^xxx] सेट से वर्णों को छोड़कर कोई भी वर्ण श्रेणी से कोई भी वर्ण ] एक सेट या श्रेणी को दूसरे पी (नाम) से घटाएं यूनिकोड द्वारा निर्दिष्ट कोई भी वर्ण श्रेणी नामित नाम पी (नाम) यूनिकोड श्रेणी द्वारा निर्दिष्ट के अलावा कोई भी वर्ण नामित नाम डब्ल्यू पहचानकर्ताओं को निर्दिष्ट करने में उपयोग किए जाने वाले अक्षरों का सेट डब्ल्यू पहचानकर्ताओं को निर्दिष्ट करने में उपयोग नहीं किए जाने वाले अक्षरों का सेट रिक्त स्थान एस रिक्त स्थान को छोड़कर कुछ भी डी अंक डी अंक नहीं उदाहरण: @ ". +" - "आरएन। यहां दो पंक्तियां हैं"; @"+" - "0xabcfx"; @"[^fx]+" – "0 xabcfx"; @"+" - "0xabcfx"; @"[^a-f]+" – "0 xabcfx"; @"]+" – "0xabcfx"; @"पी(लू)" - "सिटी लाइट्स"; // लू - बड़े अक्षर @"पी(लू)" - "शहर"; @"पी(है. सिरिलिक)" - "हा. ओएस"; // है। सिरिलिक - रूसी अक्षर

पीबी प्रोग्रामिंग एंकर ^, ए स्ट्रिंग की शुरुआत में $, जेड स्ट्रिंग के अंत में या स्ट्रिंग के अंत में अक्षर "एन" तक जेड स्ट्रिंग के अंत में जी जहां पिछला मैच समाप्त हुआ था बी वर्ड सीमा बी कोई भी स्थिति जो शब्द सीमा पर नहीं है उदाहरण: @ "जी(डी)" - "(1)(3)(5)(9)"; // तीन मिलान (1), (2) और (3) @"bnS*ionb" - "राष्ट्र दान"; @"बेंडव*बी" - "अंत भेजता है सहन ऋणदाता"।

प्रोग्रामिंग आरटी ऑपरेशंस (क्वांटिफ़ायर) *, *? पुनरावृत्ति +, +? सकारात्मक पुनरावृत्ति? , ? ? शून्य या एक मैच (एन), (एन)? बिल्कुल n मेल खाता है (n, ), (n, )? कम से कम n (n, m), (n, m) से मेल खाता है? एन से एम तक के उदाहरण मेल खाते हैं (पहले क्वांटिफायर लालची हैं, जितना संभव हो उतने तत्वों की तलाश में हैं, दूसरे वाले आलसी हैं, जितना संभव हो उतने कम तत्वों की तलाश में हैं): @"डी(3, )" - "888 -5555"; @"^d(3)" - "913 -913"; @"-d(3)$" - "913 -913"; @"5+? 5" - "888 -5555"; // तीन मैच - 55, 55 और 55 @"5+5" - "888 -5555"।

आरटी प्रोग्रामिंग ग्रुपिंग () समूह को स्वचालित रूप से एक नंबर सौंपा गया है (?:) समूह को सहेजें नहीं (?) या (? "नाम") यदि कोई मिलान मिलता है, तो एक नामित समूह बनाएं (?) या पहले से परिभाषित समूह को हटा दें और (? "नाम-नाम") नए समूह में पहले से परिभाषित समूह और नए समूह के बीच एक सबस्ट्रिंग सहेजें (? imnsx:) समूह में पांच (? -imnsx:) संभावित विकल्पों में से किसी एक को चालू या बंद करता है: i - केस असंवेदनशील; s एक पंक्ति है (फिर ". " कोई वर्ण है); एम - मल्टीलाइन मोड ("^", "$" - प्रत्येक पंक्ति की शुरुआत और अंत); n - अनाम समूहों पर कब्ज़ा न करें; x - पैटर्न से गैर-एस्केप्ड रिक्त स्थान को बाहर करें और संख्या चिह्न (#) (?=) शून्य-लंबाई सकारात्मक लुकहेड अभिकथन के बाद टिप्पणियाँ शामिल करें

आरई प्रोग्रामिंग (? !) शून्य-लंबाई नकारात्मक लुकहेड अभिकथन (?) अभिव्यक्ति का गैर-लौटने वाला (लालची) भाग उदाहरण: @"(ए)+" - "केले का इतिहास"; @"एएन+" - "केले का इतिहास"; // तुलना करें, तीन मिलान - ए, एन और एन @"(? आई: ए)+" - "बीए। नानास एनल्स"; @"+(? =d)" - "एबीसी xyz 12 555 w"; @"(?

Src='https://website/presentation/-112203859_437213351/image-24.jpg' alt='प्रोग्रामिंग आरटी संदर्भ संख्या समूह संदर्भ k नामित समूह संदर्भ उदाहरण: @"> Программирование РВ Ссылки число Ссылка на группу k Ссылка на именованную группу Примеры: @"(w)1" – "deep"; @"(? w)k " – "deep". Конструкции изменения | Альтернатива (соответствует операции объединения) (? (выражение)да|нет) Сопоставляется с частью «да» , если выражение соответствует; в противном случае сопоставляется с необязательной частью «нет» (? (имя)да|нет), Сопоставляется с частью «да» , если названное имя (? (число)да|нет) захвата имеет соответствие; в противном случае сопоставляется с необязательной частью «нет» Пример: @"th(e|is|at)" – "this is the day";!}

आरटी प्रोग्रामिंग प्रतिस्थापन $number समूह के अनुरूप स्ट्रिंग के भाग को निर्दिष्ट संख्या $(नाम) से बदल देता है समूह के अनुरूप स्ट्रिंग के भाग को निर्दिष्ट नाम से बदल देता है $$ स्थानापन्न $ $& पूर्ण की एक प्रति के साथ बदल देता है मैच $` इनपुट स्ट्रिंग के टेक्स्ट को तब तक बदलें जब तक कि $" मैच न हो जाए $+ के मिलान के बाद इनपुट लाइन के टेक्स्ट को बदलें अंतिम कैप्चर किए गए समूह को बदलें $_ पूरी लाइन को बदलें टिप्पणियाँ (? #) इनलाइन टिप्पणी # पंक्ति के अंत में टिप्पणी करें

रेगेक्स के आरटी प्रोग्रामिंग परिणाम: रेगेक्स मैच() मैच। संग्रह मिलान समूह () समूह। संग्रह समूह कैप्चर() कैप्चर। संग्रह कैप्चर()

सी++ सीएलआई (विजुअल सी++/सीएलआर/सीएलआर कंसोल एप्लिकेशन) में आरटी प्रोग्रामिंग उदाहरण: int मुख्य() ( रेगेक्स ^आर = जीसीन्यू रेगेक्स(एल"((\डी)+)+"); मैच ^एम = आर-> मैच (एल"123 456"); पूर्णांक मिलान। गिनती = 0; जबकि (एम->सफलता) (कंसोल:: लिखें। रेखा(एल" मिलान(0)", ++मिलान। गिनती); के लिए (पूर्णांक i = 1; i समूह->गणना; i++) ( समूह ^g = m->समूह[i]; कंसोल: : लिखें। पंक्ति(L" समूह (0) = "(1)"", i, g-> मान ); for (int j = 0; j Captures->Count; j++) ( Capture ^c = g->Captures[j]; कंसोल: : Write.Line(L" Capture(0) = "(1)" , स्थिति = (2), लंबाई = (3)", जे, सी, सी->सूचकांक, सी->लंबाई); ) ) एम = एम->अगला। मैच(); ) रिटर्न 0; ) सिस्टम: : टेक्स्ट : :नियमित। अभिव्यक्ति

क्रियाओं का समावेश और त्रुटियों की खोज किसी संख्या में महत्वपूर्ण अंकों की संख्या को सीमित करना: (s + e)(pd+ + d+(pd* + e)) s = +|p = . डी = डीएस + ई = एस? = (+|-)? पीडी* + ई = (पीडी*)? =(.d*)? @"(+|-)? (. d+|d+(. d*)?)" या @"^(+|-)? (. d+|d+(. d*)?)$" रेगेक्स आर = नया रेगेक्स (@"^(+|-)? (. (? "अंक"d)+|(? "अंक"d)+(. (? "अंक"d)*)?)$"); मिलान m = r. मिलान('+1. 23456789'); यदि (एम. सफलता) ( समूह जी = एम. समूह["अंक"]; यदि (जी. कैप्चर. गिनती)

क्रियाओं को सक्षम करना और त्रुटियों को ढूंढना त्रुटि की स्थिति निर्धारित करना: रेगेक्स आर = नया रेगेक्स (@"(+|-)? (. (? "digit"d)+|(? "digit"d)+(. (? " अंक"डी )*)?)"); स्ट्रिंग str = "+1.2345!678"; मिलान m = r. मैच(str); यदि (एम. सफलता) ( समूह जी = एम. समूह["अंक"]; यदि (जी. कैप्चर. गणना 0) कंसोल. लिखें. पंक्ति("स्थिति 1 पर त्रुटि: अप्रत्याशित वर्ण "(0)"", str ); अन्यथा यदि (एम.लंबाई

क्रियाओं को सक्षम करना और त्रुटियों की खोज करना त्रुटि की स्थिति निर्धारित करना: 1. इनपुट स्ट्रिंग की पहली स्थिति (1), यदि पहला मिलान स्थिति सूचकांक = 0 से शुरू नहीं होता है; 2. अंतिम मिलान के बाद की स्थिति (मिलान लंबाई + 1), यदि यह इनपुट स्ट्रिंग की अंतिम स्थिति से मेल नहीं खाती है; 3. मैचों के बीच पहले ब्रेक की स्थिति (मैच[i]. इंडेक्स + मैच[i]. लंबाई + 1), यदि पिछले मैच के बाद का अक्षर अगले मैच का पहला अक्षर नहीं है।

सूचकांक) टूटना; सूचकांक = एम[i]. सूचकांक + एम[i]. लंबाई; ) सांत्वना देना। लिखना। पंक्ति("स्थिति पर त्रुटि (0) "(1)"", सूचकांक + 1, स्ट्र); ) "एबीसी. xyz. pqr" सही है; + एबीसी. xyz. pqr" - स्थिति 1 में त्रुटि ("+"); "एबीसी. xyz. पीक्यूआर!" - स्थिति 12 में त्रुटि ("!"); "एबीसी. xyz! pqr" - स्थिति 8 पर त्रुटि ("!")।

क्रियाओं का समावेश और त्रुटियों की खोज लेकिन! "एबीसी. xyz. +pqr" - स्थिति 8 पर त्रुटि (""।)। नया पैटर्न वैरिएंट: @"w+(. w+)*(. (? !$))?" मान्यता: "abc. xyz. +pqr" - स्थिति 9 ("+") में त्रुटि; "एबीसी. xyz. पीक्यूआर. "- स्थिति 12 में एक त्रुटि (""।)।

संतुलित परिभाषाएँ: "(? "x")" "x" नामक संग्रह में एक तत्व जोड़ता है; "(? "-x")" संग्रह "x" से एक तत्व हटाता है; "(? (x)(? !))" जाँचता है कि संग्रह "x" में कोई तत्व नहीं बचा है। भाषा एल, पास्कल भाषा के नेस्टेड कथनों का वर्णन करती है "शुरू अंत;" ': @"^s*((? "शुरू होता है+)+(? "-शुरू होता है"समाप्त होता है*; s*)+)*(? (शुरू होता है)(? !))$"।

किसी भाषा की शब्दावली को नियमित अभिव्यक्ति के रूप में वर्णित करना और केए की सहायता से किसी भाषा को पहचानना अधिक सुविधाजनक है। इसलिए, नियमित अभिव्यक्ति के रूप में भाषा परिभाषाओं को एफए के रूप में परिभाषा में बदलने में सक्षम होना महत्वपूर्ण है। इस तरह के परिवर्तन का सुझाव केनेट थॉम्पसन ने दिया था।

राज्य मशीन पांच (एस, एस, डी, एस 0, एफ) है

S राज्यों का एक सीमित समूह है।

एस वैध इनपुट संकेतों का एक सीमित सेट है।

डी - संक्रमण समारोह। यह सेट Sx(SÈ(e)) को एक गैर-नियतात्मक परिमित ऑटोमेटन की अवस्थाओं के सेट में दर्शाता है। एक नियतात्मक ऑटोमेटन के लिए, संक्रमण फ़ंक्शन सेट SxS को ऑटोमेटन के राज्यों के सेट में दर्शाता है। दूसरे शब्दों में, राज्य और इनपुट प्रतीक के आधार पर, d ऑटोमेटन की नई स्थिति निर्धारित करता है।

एस 0 - परिमित ऑटोमेटन की प्रारंभिक अवस्था, एस 0 ओ एस।

F, ऑटोमेटन की अंतिम अवस्थाओं का समुच्चय है, F О S.

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

रेगुलर एक्सप्रेशन को स्टेट मशीन में परिवर्तित करने के लिए निम्नलिखित नियम हैं।

1 नियमित अभिव्यक्ति "ई" दो राज्यों के ऑटोमेटन और उनके बीच एक ई-संक्रमण में बदल जाती है (चित्र 1)।

चित्र 1. - ई-संक्रमण के लिए ऑटोमेटन

2 एक अक्षर "ए" से एक नियमित अभिव्यक्ति को दो राज्यों से एक परिमित राज्य मशीन में परिवर्तित किया जाता है और इनपुट सिग्नल ए (चित्रा 2) के अनुसार उनके बीच एक संक्रमण होता है।

चित्र 2. - प्रतीक ए द्वारा कूदने के लिए ऑटोमेटन

3 मान लीजिए कि अभिव्यक्ति r के लिए एक नियमित अभिव्यक्ति rs और परिमित ऑटोमेटा है और अभिव्यक्ति s पहले ही बनाई जा चुकी है। फिर दो ऑटोमेटा श्रृंखला में जुड़े हुए हैं। चित्र 3 आर और एस भाषाओं के लिए प्रारंभिक ऑटोमेटा दिखाता है। यह चित्र इन भाषाओं के संयोजन को पहचानने के लिए एक ऑटोमेटन दिखाता है।

आर के लिए स्वचालित एस के लिए स्वचालित

चित्र 3. - प्रारंभिक ऑटोमेटा


चित्र 4. - भाषाओं को संयोजित करने की मशीन

4 मान लीजिए कि एक रेगुलर एक्सप्रेशन r | है अभिव्यक्ति r और अभिव्यक्ति s (चित्रा 3) के लिए s और परिमित ऑटोमेटा पहले ही बनाए जा चुके हैं। फिर परिणामी ऑटोमेटन में दो ऑटोमेटा में से एक को निष्पादित करने का विकल्प होना चाहिए। अर्थात्, अभिव्यक्ति r | के लिए ऑटोमेटन चित्र 3 से आर और एस के लिए ऑटोमेटा का रूप चित्र 5 में दिखाया गया है।

चित्र 5. - भाषाओं के संयोजन के लिए मशीन

5 मान लीजिए कि निर्मित परिमित ऑटोमेटन r के साथ एक नियमित अभिव्यक्ति r* है। इस मामले में, अभिव्यक्ति आर के ऑटोमेटन को बायपास करने की संभावना के लिए दो नए राज्य पेश किए गए हैं, और ऑटोमेटन आर की एकाधिक पुनरावृत्ति की संभावना के लिए अंतिम और प्रारंभिक राज्यों के बीच एक ई-संक्रमण पेश किया गया है। यदि नियमित अभिव्यक्ति r के लिए चित्र 3 के समान एक ऑटोमेटन बनाया गया है, तो चित्र 6 में दिखाया गया परिमित ऑटोमेटन नियमित अभिव्यक्ति r * से मेल खाता है।

0 1
Q1Q4Q2
Q2Q3Q1
Q3Q2Q4
Q4Q1Q3

संक्रमण तालिका के कॉलम इनपुट वर्णमाला के वर्णों का प्रतिनिधित्व करते हैं, और पंक्तियाँ डीएफए की वर्तमान स्थितियों के अनुरूप हैं। प्रत्येक पंक्ति के तत्व डीएफए की उन स्थितियों को दर्शाते हैं जिनमें इनपुट वर्णमाला के संबंधित वर्ण प्राप्त होने पर उसे वर्तमान स्थिति से संक्रमण करना चाहिए। विशेष रूप से, इस संक्रमण तालिका की पहली पंक्ति से यह पता चलता है कि प्रारंभिक अवस्था Q1 में प्रतीक 0 और 1 प्राप्त करने से DFA क्रमशः Q4 और Q2 अवस्थाओं में स्थानांतरित हो जाता है।

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


Q1 0 Q4 1 Q3 0 Q2 0 Q3 1 Q4 1 Q1 0 Q4 0 Q1


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

निष्कर्ष में, यह ध्यान दिया जाना चाहिए कि निर्माण की अनौपचारिक विधि पर विचार किया गया है


परिमित ऑटोमेटा के गुणों के आगे के अध्ययन के लिए और, विशेष रूप से, संश्लेषण समस्या को हल करने के लिए, निम्नलिखित प्रमेय महत्वपूर्ण है।


प्रमेय 7.7 (निर्धारण प्रमेय)। किसी भी परिमित ऑटोमेटन के लिए, एक समतुल्य नियतात्मक परिमित ऑटोमेटन का निर्माण किया जा सकता है।


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


एक मनमाना परिमित ऑटोमेटन का समतुल्य नियतात्मक में परिवर्तन दो चरणों में किया जाता है: पहले, लेबल \लैम्ब्डा वाले आर्क हटा दिए जाते हैं, फिर वास्तविक निर्धारण किया जाता है।


1. λ-संक्रमण को हटाना (\lambda लेबल वाले चाप)।


मूल राज्य मशीन से स्थानांतरित करने के लिए एम=(वी,क्यू,क्यू_0,एफ,\डेल्टा)समतुल्य परिमित ऑटोमेटन के लिए M"=(V,Q",q_0,F",\delta")λ-संक्रमण के बिना, मूल ग्राफ़ एम में निम्नलिखित परिवर्तन करना पर्याप्त है।


एक। प्रारंभिक अवस्था को छोड़कर सभी अवस्थाएँ, जो केवल \lambda लेबल वाले आर्क द्वारा दर्ज की जाती हैं, हटा दी जाती हैं; यह परिमित ऑटोमेटन एम के सेट क्यू" को परिभाषित करता है। यह स्पष्ट है कि Q"\subseteq Q। इस मामले में, हम मानते हैं कि प्रारंभिक स्थिति वही रहती है।


बी। परिमित ऑटोमेटन एम" और उनके लेबल (इस प्रकार संक्रमण फ़ंक्शन एम") के आर्क का सेट निम्नानुसार परिभाषित किया गया है: किन्हीं दो राज्यों के लिए p,r\in Q",~ p\to_(a)rयदि और केवल तभी धारण करता है यदि a\in V , और निम्नलिखित में से एक ग्राफ़ M में धारण करता है: या तो p से r तक एक चाप मौजूद है जिसके लेबल में प्रतीक a है, या एक स्थिति q मौजूद है जैसे कि p\राइटएरो_(\lambda)^(+)qऔर q\to_(a)r . इस मामले में, शीर्ष q, आम तौर पर बोलते हुए, सेट Q से संबंधित नहीं हो सकता है, अर्थात, यह ऑटोमेटन M से गुजरते समय गायब हो सकता है (चित्र 7.11)। लेकिन यदि q\in Q", तो, स्वाभाविक रूप से, चाप (q,r) को M" में संरक्षित किया जाएगा और प्रतीक a इस चाप के लेबल से संबंधित प्रतीकों में से एक होगा (चित्र 7.12)।


इस प्रकार, एम" में सभी आर्क्स एम संग्रहीत हैं जिनके लेबल \लैम्ब्डा से भिन्न हैं और जो सेट क्यू से राज्यों की एक जोड़ी (शीर्ष) को जोड़ते हैं" (आइटम ए के अनुसार हटाया नहीं गया)। इसके अलावा, राज्यों के किसी भी त्रिक p,q,r के लिए (जरूरी नहीं कि अलग हो!), जैसे कि p,r\in Q" और p से q तक गैर-शून्य लंबाई का एक पथ मौजूद है जिसका लेबल \lambda के बराबर है (यानी, λ-संक्रमण द्वारा पथ), और q से r तक एक चाप जाता है, जिसके लेबल में इनपुट वर्णमाला का प्रतीक a होता है, M" में एक चाप का निर्माण p से r तक होता है, जिसके लेबल में शामिल होता है प्रतीक a (चित्र 7.11 देखें)।


वी परिमित ऑटोमेटन एम" के अंतिम राज्यों एफ" के सेट में क्यू में सभी राज्य शामिल हैं, यानी, परिमित ऑटोमेटन एम के राज्य जो आइटम ए के अनुसार हटाए नहीं गए हैं, जिसके लिए q\राइटएरो_(\lambda)^(\ast)q_fकुछ q_f\in F के लिए (अर्थात, या तो राज्य q स्वयं परिमित ऑटोमेटन M की अंतिम स्थिति है, या इसमें से परिमित के अंतिम राज्यों में से एक के लिए \lambda लेबल वाले आर्क के साथ गैर-शून्य लंबाई का पथ है ऑटोमेटन एम ) (चित्र 7.13)।


2. वास्तव में दृढ़ संकल्प.


होने देना एम=(क्यू,वी,क्यू_0,एफ,\डेल्टा)λ-संक्रमण के बिना एक परिमित ऑटोमेटन है। आइए एक समतुल्य नियतात्मक परिमित ऑटोमेटन M_1 का निर्माण करें।


इस परिमित ऑटोमेटन को इस तरह से परिभाषित किया गया है कि इसका राज्य सेट परिमित ऑटोमेटन एम के राज्य सेट के सभी सबसेट का सेट है। इसका मतलब यह है कि परिमित ऑटोमेटन M_1 की प्रत्येक व्यक्तिगत स्थिति को परिमित ऑटोमेटन M के राज्यों के सेट के कुछ सबसेट के रूप में परिभाषित किया गया है। इस मामले में, नए परिमित ऑटोमेटन की प्रारंभिक स्थिति (यानी एम_1) एक सिंगलटन उपसमुच्चय है जिसमें पुराने परिमित ऑटोमेटन (यानी एम) की प्रारंभिक स्थिति शामिल है, और नए परिमित ऑटोमेटन की अंतिम स्थिति ऐसे सभी उपसमुच्चय क्यू हैं जिनमें शामिल हैं मूल परिमित ऑटोमेटन एम के शीर्ष पर कम से कम एक अंतिम।


अब से, बोलने की कुछ स्वतंत्रता की अनुमति देते हुए, हम कभी-कभी परिमित ऑटोमेटन की अवस्थाओं को M_1 अवस्थाएँ-सेट कहेंगे। हालाँकि, यह स्पष्ट रूप से समझना महत्वपूर्ण है कि ऐसा प्रत्येक राज्य-सेट नए परिमित ऑटोमेटन का एक अलग राज्य है, लेकिन उसके राज्यों का एक सेट नहीं है। साथ ही, मूल ("पुराने") परिमित ऑटोमेटन एम के लिए, यह वास्तव में इसके राज्यों का सेट है। लाक्षणिक रूप से कहें तो, पुराने परिमित ऑटोमेटन की अवस्थाओं का प्रत्येक उपसमुच्चय नए परिमित ऑटोमेटन* की एक अवस्था में "संक्षिप्त" हो जाता है।


*औपचारिक रूप से, सेट Q_1 को एक ऐसे सेट के रूप में परिभाषित किया जाना चाहिए जो सेट 2^Q के साथ एक-से-एक पत्राचार में है, लेकिन हमारे लिए यह विचार करना अभी भी अधिक सुविधाजनक है कि Q_1 2^Q के साथ मेल खाता है, क्योंकि सेट एक परिमित ऑटोमेटन की अवस्थाओं का कोई भी गैर-रिक्त परिमित सेट हो सकता है।


नए परिमित ऑटोमेटन के संक्रमण फ़ंक्शन को परिभाषित किया गया है ताकि राज्य-सेट एस से इनपुट प्रतीक ए द्वारा परिमित ऑटोमेटन एम_1 राज्य-सेट पर जाए, जो कि पुराने परिमित ऑटोमेटन के राज्यों के सभी सेटों का संघ है। जिसे यह पुराना परिमित ऑटोमेटन प्रत्येक राज्य सेट एस से प्रतीक ए से गुजरता है। इस प्रकार, परिमित ऑटोमेटन M_1 निर्माण द्वारा नियतात्मक है।


उपरोक्त मौखिक विवरण को इस प्रकार सूत्रों में अनुवादित किया जा सकता है: हम राज्य मशीन M_1 का निर्माण करते हैं ताकि


M_1=(Q_1,V,\(q_0\),F_1,\delta_1), कहाँ


\begin(cases)Q_1=2^Q,\quad F_1=\(T\colon\, T\cap F\ne\varnothing,~T\in2^Q\),\\ (\forall S\subseteq Q) (\forall a\in V)\Bigl(\delta_1(S,a)= \bigcup\limits_(q\in S)\delta(q,a)\Bigr). \end(मामले)


आइए हम इस तथ्य पर ध्यान दें कि नए परिमित ऑटोमेटन के राज्यों के बीच एक राज्य है \varnothing , और, (7.8) के अनुसार, \delta_1(\varnothing,a)=\varnothingकिसी भी इनपुट कैरेक्टर के लिए a . इसका मतलब यह है कि, एक बार ऐसी स्थिति में, राज्य मशीन M_1 इसे नहीं छोड़ेगी। सामान्य तौर पर, किसी परिमित ऑटोमेटन की कोई भी अवस्था q, जैसे कि किसी भी इनपुट प्रतीक के लिए हमारे पास \delta(q,a)=q हो, परिमित ऑटोमेटन की अवशोषित अवस्था कहलाती है। इस प्रकार, नियतात्मक राज्य मशीन M_1 की स्थिति \varnothing अवशोषित कर रही है। यह नोट करना भी उपयोगी है \delta_1(S,a)=\varnothingयदि और केवल यदि प्रत्येक q\in S के लिए (राज्यों के सेट से पुराने परिमित ऑटोमेटन की स्थिति S ) \delta(q,a)=\varnothing, अर्थात। ग्राफ़ एम में, प्रत्येक ऐसी स्थिति क्यू प्रतीक ए के साथ चिह्नित कोई चाप नहीं छोड़ती है।


यह साबित किया जा सकता है कि इस तरह के एल्गोरिदम द्वारा प्राप्त परिमित ऑटोमेटन मूल ऑटोमेटन के बराबर है।

उदाहरण 7.9.हम चित्र में दिखाए गए परिमित ऑटोमेटन का निर्धारण करते हैं। 7.14.


λ-संक्रमण के बिना एक समतुल्य परिमित ऑटोमेटन को अंजीर में दिखाया गया है। 7.15. ध्यान दें कि शीर्ष q_2 गायब हो जाता है, क्योंकि केवल "रिक्त" चाप ही इसमें प्रवेश करते हैं।



परिणामी ऑटोमेटन को निर्धारित करने के लिए, इसकी सभी 2^3=8 अवस्थाओं को लिखना बिल्कुल आवश्यक नहीं है, जिनमें से कई प्रारंभिक अवस्था \(q_0\) से पहुंच योग्य नहीं हो सकते हैं। \(q_0\) राज्यों और केवल उनसे पहुंच योग्य प्राप्त करने के लिए, हम तथाकथित खींचने की विधि का उपयोग करते हैं।


इस विधि को सामान्य स्थिति में इस प्रकार वर्णित किया जा सकता है।


मूल परिमित ऑटोमेटन (खाली चापों के बिना) में, हम राज्यों के सभी सेटों को परिभाषित करते हैं जो प्रारंभिक एक से पहुंच योग्य हैं, यानी। प्रत्येक इनपुट कैरेक्टर a के लिए हम सेट \delta(q_0,a) पाते हैं। नए ऑटोमेटन में ऐसा प्रत्येक सेट प्रारंभिक स्थिति से सीधे पहुंच योग्य स्थिति है।


प्रत्येक परिभाषित राज्य-सेट एस और प्रत्येक इनपुट प्रतीक ए के लिए, हम सेट पाते हैं \textstyle(\mathop(\bigcup\limits_(q\in S) \delta(q,a))\limits^(\fantom(A)^(.))). इस चरण में प्राप्त सभी राज्य एक नए (नियतात्मक) ऑटोमेटन के राज्य होंगे, जो लंबाई 2 के पथ के साथ प्रारंभिक शीर्ष से पहुंच योग्य होंगे। हम वर्णित प्रक्रिया को तब तक दोहराते हैं जब तक कि कोई नया राज्य-सेट (खाली राज्य सहित) प्रकट न हो जाए। यह दिखाया जा सकता है कि इस मामले में परिमित ऑटोमेटन M_1 की सभी ऐसी अवस्थाएँ प्राप्त की जाती हैं जो प्रारंभिक अवस्था \(q_0\) से प्राप्त की जा सकती हैं।


चित्र में परिमित अवस्था मशीन के लिए। 7.15 हमारे पास है:


\begin(allined)& \delta_1(\(q_0\),a)=\(q_1\);\qquad \delta_1(\(q_0\),b)=\(q_1,q_3\);\\ & \ delta_1(\(q_1\),a)=\(q_1\);\qquad \delta_1(\(q_1\),b)=\(q_1\);\\ & \delta_1(\(q_1,q_3\) ,a)= \delta(q_1,a)\cup \delta(q_3,a)= \(q_1\)\cup\(q_1\)=\(q_1\);\\ & \delta_1(\(q_1, q_3\),b)= \delta(q_1,b)\cup \delta(q_3,b)= \(q_1\)\cup\(q_1\)=\(q_1\). \end(संरेखित)


चूंकि अब कोई नए राज्य-सेट नहीं हैं, इसलिए "खींचने" की प्रक्रिया यहीं समाप्त होती है, और हमें चित्र में दिखाया गया ग्राफ़ मिलता है। 7.16.

नियमित भाषा पूरक

निर्धारण प्रमेय के महत्वपूर्ण सैद्धांतिक परिणामों में से एक निम्नलिखित प्रमेय है।


प्रमेय 7.8. नियमित भाषा का पूरक नियमित भाषा है।


मान लीजिए L वर्णमाला V में एक नियमित भाषा है। फिर भाषा का पूरक L (शब्दों के समुच्चय के रूप में) भाषा है \overline(L)=V^(\ast)\setminus L.


प्रमेय 7.7 के अनुसार, एक नियमित भाषा एल के लिए, एक नियतात्मक परिमित ऑटोमेटन एम का निर्माण किया जा सकता है जो एल को स्वीकार करता है। चूंकि प्रत्येक शीर्ष से एक नियतात्मक ऑटोमेटन में, प्रत्येक इनपुट प्रतीक के लिए, बिल्कुल एक शीर्ष पर एक संक्रमण परिभाषित किया जाता है, फिर, वर्णमाला V में स्ट्रिंग x जो भी हो, M में इसके लिए एक अद्वितीय पथ है, जो प्रारंभिक से शुरू होता है वह स्थिति जिस पर स्ट्रिंग x पढ़ी गई है। यह स्पष्ट है कि स्ट्रिंग x को ऑटोमेटन M, यानी x\in L(M) द्वारा अनुमति दी जाती है, यदि और केवल तभी जब निर्दिष्ट पथ की अंतिम स्थिति अंतिम हो। इसका तात्पर्य यह है कि श्रृंखला x\notin L(M) यदि और केवल यदि निर्दिष्ट पथ की अंतिम स्थिति अंतिम नहीं है। लेकिन हमें बस एक परिमित ऑटोमेटन M" की आवश्यकता है, जो श्रृंखला x को अनुमति देता है यदि और केवल यदि मूल परिमित ऑटोमेटन M इसकी अनुमति नहीं देता है। इसलिए, M की प्रत्येक अंतिम स्थिति को एक गैर-अंतिम स्थिति में बदलना और इसके विपरीत, हमें एक मिलता है नियतात्मक ऑटोमेटन जो भाषा एल को पूरा करने की अनुमति देता है।


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

उदाहरण 7.10.एक। आइए एक परिमित ऑटोमेटन बनाएं जो स्ट्रिंग 101 को छोड़कर वर्णमाला \(0;1\) में सभी स्ट्रिंग्स की अनुमति देता है।


सबसे पहले, हम एक परिमित ऑटोमेटन का निर्माण करते हैं जो एकल श्रृंखला 101 की अनुमति देता है। यह ऑटोमेटन अंजीर में दिखाया गया है। 7.17.



यह ऑटोमेटन अर्ध-नियतात्मक है, लेकिन नियतात्मक नहीं है, क्योंकि यह पूरी तरह से परिभाषित नहीं है। आइए हम इसे निर्धारित करें और चित्र में दिखाए गए एक नियतात्मक समतुल्य परिमित ऑटोमेटन प्राप्त करें। 7.18.



और अंत में, जोड़ (और राज्यों का नाम बदलने) से गुजरते हुए, हमें चित्र में दिखाया गया ऑटोमेटन मिलता है। 7.19.


ध्यान दें कि परिणामी ऑटोमेटन में, शीर्ष s_3 को छोड़कर सभी शीर्ष अंतिम हैं।


यह भी ध्यान दें कि पूरक में संक्रमण, जिसकी चर्चा प्रमेय 7.8 के प्रमाण में की गई है, केवल एक नियतात्मक ऑटोमेटन में ही किया जा सकता है। यदि हम चित्र में दिखाए गए ऑटोमेटन में अंतिम और गैर-अंतिम शीर्षों की भूमिकाओं को उलट देते हैं। 7.17, हमें एक ऑटोमेटन मिलेगा जो भाषा को स्वीकार करता है \(\lambda,1,10\) , जो नहीं है - जैसा कि यह देखना आसान है - स्ट्रिंग 101 के अलावा अन्य सभी स्ट्रिंग्स का सेट।


यह भी ध्यान दें कि चित्र में परिमित अवस्था मशीन। 7.19 उन सभी स्ट्रिंग्स की अनुमति देता है जिनमें स्ट्रिंग 101 की घटना होती है लेकिन स्ट्रिंग से मेल नहीं खाती है। उदाहरण के लिए, 1011 श्रृंखला को ले जाने वाला पथ यहां दिया गया है: s_0,s_1,s_2,s_3,t.


बी। आइए हम एक परिमित ऑटोमेटन का निर्माण करें जो स्ट्रिंग 101 की घटना को छोड़कर वर्णमाला \(0;1\) में सभी स्ट्रिंग्स की अनुमति देता है। एक भाषा L पर विचार करें, जिसके प्रत्येक स्ट्रिंग में स्ट्रिंग 101 की घटना होती है। यह हो सकता है इस प्रकार परिभाषित:


L=(0+1)^(\ast)101(0+1)^(\ast).


हमें भाषा एल को पूरक करने के लिए एक ऑटोमेटन बनाने की आवश्यकता है।


इस मामले में सीधे नियमित अभिव्यक्ति से, एक परिमित ऑटोमेटन का निर्माण करना आसान है जो भाषा एल (छवि 7.20) की अनुमति देता है।



फिर, "खींच" विधि द्वारा, हम निर्धारण को पूरा करेंगे। दृढ़ संकल्प का परिणाम चित्र में दिखाया गया है। 7.21.



समस्या के पूर्ण समाधान के लिए, केवल चित्र। 7.21 अंतिम और गैर-अंतिम शीर्षों की भूमिकाओं की अदला-बदली करें (चित्र 7.22)।



वी आइए एक परिमित ऑटोमेटन के निर्माण के विचार पर चर्चा करें जो वर्णमाला \(0;1\) में उन और केवल उन तारों को अनुमति देता है जो स्ट्रिंग 01 से शुरू नहीं होते हैं और स्ट्रिंग 11 के साथ समाप्त नहीं होते हैं (यानी, के तार) फॉर्म 01x और फॉर्म y11 की स्ट्रिंग्स की अनुमति नहीं है, चाहे जो भी चेन हों x,y\in\(0;1\) ).


इस मामले में, जिस भाषा के लिए आप एक परिमित ऑटोमेटन बनाना चाहते हैं उसका पूरक शून्य और एक की ऐसी सभी स्ट्रिंग्स का सेट है जो स्ट्रिंग 01 से शुरू होते हैं या स्ट्रिंग 11 के साथ समाप्त होते हैं। एक ऑटोमेटन जो स्ट्रिंग्स के इस सेट को स्वीकार करता है संयोजन के लिए एक ऑटोमेटन के रूप में निर्मित किया गया है 01(0+1)^(\ast)+(0+1)^(\ast)11उसी तरह जैसे कि क्लेन के प्रमेय के प्रमाण में (प्रमेय 7.6 देखें)।

नियमित भाषाओं के वर्ग की संपत्ति को पूरक के तहत बंद किया जा रहा है (प्रमेय 7.8 देखें) तुरंत तात्पर्य है कि यह वर्ग प्रतिच्छेदन, सेट-सैद्धांतिक और सममित अंतर के तहत बंद है।


परिणाम 7.3. किन्हीं दो नियमित भाषाओं L_1 और L_2 के लिए, निम्नलिखित कथन सत्य हैं:


1) चौराहा L_1\cap L_2 नियमित है;
2) अंतर L_1\setminus L_2 नियमित है;
3) सममित अंतर L_1\वर्तत्रिकोण L_2नियमित।


बयानों की वैधता पहचान से होती है:


\begin(संरेखित) &(\scriptstyle(\mathsf(1))))\quad L_1\cap L_2= \overline(\overline(L_1) \cup\overline(L_2))\,;\\ &(\scriptstyle (\mathsf(2))))\quad L_1\setminus L_2= L_1\cap \overline(L_2)\,;\\ &(\scriptstyle(\mathsf(3))))\quad L_1\,\triang\ ,L_2 = (L_1\कप L_2)\सेटमाइनस (L_1\cap L_2).\end(संरेखित)


सबसे पहले, प्राप्त परिणाम हमें यह दावा करने की अनुमति देते हैं कि संघ, प्रतिच्छेदन और जोड़ के संचालन के संबंध में नियमित भाषाओं का वर्ग एक बूलियन बीजगणित है, जिसमें इकाई सार्वभौमिक भाषा है, और शून्य खाली भाषा है . दूसरे, नियमित भाषाओं के परिवार के ये बीजगणितीय गुण हमें दो मनमानी परिमित ऑटोमेटा की तुल्यता को पहचानने की महत्वपूर्ण समस्या को हल करने की अनुमति देते हैं।


परिभाषा 7.10 के अनुसार, परिमित ऑटोमेटा समतुल्य हैं यदि वे जिन भाषाओं की अनुमति देते हैं वे समान हैं। इसलिए, ऑटोमेटा M_1 और M_2 की तुल्यता को सत्यापित करने के लिए, यह साबित करना पर्याप्त है कि भाषाओं L(M_1) और L(M_2) का सममित अंतर खाली है। ऐसा करने के लिए, बदले में, एक ऑटोमेटन का निर्माण करना पर्याप्त है जो इस अंतर को स्वीकार करता है और सत्यापित करता है कि जिस भाषा को वह स्वीकार करता है वह खाली है। सामान्य तौर पर, यह पहचानने की समस्या कि एक राज्य मशीन भाषा खाली है, राज्य मशीन खालीपन समस्या कहलाती है। इस समस्या को हल करने के लिए, ऑटोमेटन की अंतिम अवस्थाओं के सेट को ढूंढना पर्याप्त है जो प्रारंभिक अवस्था से पहुंच योग्य हैं। चूँकि परिमित अवस्था मशीन एक निर्देशित ग्राफ है, इस समस्या को हल किया जा सकता है, उदाहरण के लिए, चौड़ाई-पहली खोज का उपयोग करके। परिमित ऑटोमेटन द्वारा अनुमत भाषा खाली है यदि और केवल तभी जब प्रारंभिक अवस्था से पहुंच योग्य अंतिम अवस्थाओं का सेट खाली हो। व्यवहार में, न्यूनतमकरण एल्गोरिथ्म का उपयोग करके परिमित ऑटोमेटा की समतुल्यता को पहचानना बेहतर है, लेकिन अब हमारे लिए इस बात पर जोर देना महत्वपूर्ण है कि समतुल्यता समस्या को हल करने की मौलिक संभावना प्रमेय 7.7 और इसके बीजगणितीय परिणामों से मिलती है।

श्रेणियाँ

लोकप्रिय लेख

2023 "Kingad.ru" - मानव अंगों की अल्ट्रासाउंड परीक्षा