|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Computer Programspråk >> Content

    Hur kan man visa att ett språk inte är kontextfritt?

    Det finns flera sätt att visa att ett språk inte är kontextfritt. De vanligaste metoderna förlitar sig på att bevisa att språket bryter mot egenskaper som är inneboende till kontextfria språk (CFL):

    1. Pumpande lemma för kontextfria språk: Detta är den mest använda tekniken. Pumpens lemma säger att för alla Cfl l finns det en konstant * p * (pumplängden) så att alla strängar * w * i l med längd | w | ≥ *p *kan skrivas som *uvxyz *, där:

    * | Vxy | ≤ *p *

    * | Vy | ≥ 1

    * * uv i xy i z* ∈ L för alla* i* ≥ 0

    För att bevisa att ett språk är * inte * kontextfritt med hjälp av pumpens lemma:

    1. Antag: Antag, för motsägelse, att språket * l * är kontextfritt.

    2. Välj en sträng: Välj en sträng *w *i *l *med längd åtminstone pumplängden *p *(du måste ofta strategiskt välja *w *).

    3. pumpa strängen: Försök att sönderdelas * w * i * uvxyz * tillfredsställa lemmas förhållanden.

    4. Hitta en motsägelse: Visa att för vissa *i *, *uv i xy i z*är*inte*i*l*. Detta strider mot pumpens lemma, vilket bevisar att det ursprungliga antagandet (att * l * är kontextfritt) måste vara falskt.

    Exempel: Låt oss överväga språket l ={a n b n c n | n ≥ 0}. Använda pumpens lemma:

    1. Antag: L är kontextfri.

    2. Välj en sträng: Låt * w * =a p B p c p (där * p * är pumplängden).

    3. pumpa strängen: Oavsett hur du sönderdelas *w *till *uvxyz *, kommer pumpen oundvikligen att kränka a n b n c n strukturera. Till exempel, om * vxy * bara innehåller 'A, kommer pumpen att öka antalet' A:er utan att öka antalet 'B:er och' c. Liknande problem uppstår om * vxy * bara innehåller 'B:er eller' c eller en blandning som inte upprätthåller lika förhållandet.

    4. Motstånd: Därför finns det en *i *så att *uv i xy i z* ∉ l, motsäger pumpens lemma. Således är L inte kontextfri.

    2. Stängningsegenskaper: Kontextfria språk stängs under vissa operationer (Union, Concatenation, Kleene Star, korsning med ett regelbundet språk). Om du kan visa att ett språk är * inte * stängt under en av dessa operationer kan det inte vara kontextfritt. Denna metod används mindre ofta för direkt bevis än pumpande lemma men kan vara till hjälp i kombination med andra tekniker.

    3. Ogdens Lemma: Detta är en kraftfullare version av pumpande lemma, så att du kan välja markerade positioner i strängen *w *. Det är användbart för språk där det enkla pumpande lemmaet är svårt att applicera.

    4. Parikhs sats: Detta teorem hänför sig till antalet förekomster för varje symbol i strängar på ett språk. Även om det inte direkt används för att bevisa ett språk * är inte * kontextfritt, kan det ibland hjälpa till att visa att ett språkstruktur är oförenligt med de begränsningar som CFL sätter. Det används ofta i samband med andra tekniker.

    Sammanfattningsvis är det pumpande lemma den vanligaste och generellt effektiva metoden för att bevisa att ett språk inte är kontextfritt. Valet av metod beror emellertid på det specifika språkets struktur och den enkelhet som varje teknik kan tillämpas med. Ogdens Lemma erbjuder mer kraft vid behov, och stängningsegenskaper kan ge kompletterande bevis.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur man tar bort AutoDesk Deployment bilder
    ·Hur man använder LESC & LINQ
    ·Konvertera DataTables till Strings
    ·Är alla ändliga språk regelbundna, enligt teorin om …
    ·Information om flödesscheman
    ·Vad är ett förfarande inom datavetenskap och hur fung…
    ·Hur översätter du italienska med Google Chrome till e…
    ·Hur man skriver GData Inmatningsvärden som en String
    ·Hur man skapar Nedsänkt Använda HTML- koder
    ·Vad betyder beräkning och hur används den inom datave…
    Utvalda artiklarna
    ·Vad innehåller många funktioner för att designa utve…
    ·Lägga till en Border Använda HTML Programmering
    ·Uppbyggnad av JavaScript
    ·Hur man installerar C + + kompilatorer för NetBeans
    ·Felsökning av en VBA med någon tom sida
    ·Processen att översätta en uppgift till seriekommando…
    ·Hur man gör ett verktygsfält för Visual Basic återu…
    ·JavaScript vs Java Applets Robust
    ·Hur man sparar en Array i Python
    ·Hur man hittar en Coder
    Copyright © Dator Kunskap https://www.dator.xyz