|  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 pumpens lemma användas för att visa att följande språk inte är kontextfria?

    Pumpande lemma för kontextfria språk är ett kraftfullt verktyg för att bevisa att ett språk är * inte * kontextfritt. Det fungerar genom motsägelse:vi antar att språket * är * kontextfritt och visar sedan att detta antagande leder till en motsägelse. Så här tillämpas det, tillsammans med exempel:

    Pumpande lemma (för CFL):

    Om L är ett kontextfritt språk, finns det en konstant * p * (pumplängden) så att alla strängar * W * i L med | W | ≥ *p *kan skrivas som *w =uvxyz *, där:

    1. | Vxy | ≤ *p *

    2. | Vy | ≥ 1

    3. För alla *i *≥ 0, *uv i xy i Z* är i L.

    Bevisstrategin är att hitta en sträng *w *på språket så att oavsett hur vi sönderdelar det till *uvxyz *som uppfyller lemmas förhållanden, pumpar den (ökar *i *) kommer att producera en sträng som är *inte *på språket. Detta strider mot lemmaet och bevisar att språket inte är kontextfritt.

    Exempel:

    Låt oss illustrera med några exempel på språk och hur man kan bevisa att de inte är kontextfria med hjälp av pumpens lemma:

    1. L₁ ={a n b n c n | n ≥ 0}

    1. Antag att L₁ är kontextfri. Detta innebär att pumpens lemma gäller.

    2. Välj en sträng W: Låt oss välja *w =a p B p c p *, där *p *är pumplängden. | W | ≥ *p *.

    3. Pumpning: Eftersom | vxy | ≤ *p *, *vxy *kan sträcka sig över de flesta två av avsnitten (AAA ... BBB ... CCC ...). Det finns tre möjligheter:

    * vxy innehåller endast A och B: Pumpning kommer att ändra antalet A och/eller B utan att ändra antalet C, vilket resulterar i en sträng som inte är i L₁.

    * vxy innehåller endast B och C: I likhet med ovan kommer antalet B:er och/eller C kommer att förändras oproportionerligt.

    * vxy innehåller endast A: Pumpning påverkar endast antalet A.

    4. Motstånd: I alla fall producerar pumpning en sträng som inte är i L₁. Detta strider mot den pumpande Lemmas påstående att *uv i xy i z* är i l₁ för alla* i* ≥ 0.

    5. Slutsats: Därför är L₁ inte kontextfri.

    2. L₂ ={a n B m c n+m | n, m ≥ 0}

    1. Antag att L₂ är kontextfri.

    2. Välj en sträng W: Låt *w =a p B p C 2p *.

    3. Pumpning: Återigen, | vxy | ≤ *p *. Möjligheterna liknar l₁:om * vxy * bara innehåller A och B kommer pumpning att ändra antalet A och B utan att proportionellt ändra antalet C.

    4. Motstånd: Pumpning kommer att leda till strängar inte i L₂.

    5. Slutsats: L₂ är inte kontextfri.

    3. L₃ ={ww | w ∈ {a, b}*} (Språket i strängar som är sammankoppling av en sträng med sig själv)

    1. Antag att L₃ är kontextfri.

    2. Välj en sträng W: Låt *w =a p B p a p B p *.

    3. Pumpning: Eftersom | vxy | ≤ *p *, *vxy *kan inte korsa mitten av strängen (den kan inte sträcka sig över båda halvorna av `ww`). Om * vxy * är helt under första halvlek, kommer pumpen att obalansera de två halvorna.

    4. Motstånd: Den pumpade strängen kommer inte att vara i L₃.

    5. Slutsats: L₃ är inte kontextfri.

    Viktiga överväganden:

    * att välja rätt sträng *W *: Detta är avgörande. Strängen måste väljas noggrant för att utnyttja de begränsningar som ställs av | Vxy | ≤ *p *. Ofta är strängar med upprepade mönster användbara.

    * Hantering av alla fall: Du måste överväga alla möjliga sätt att sönderdelas * w * till * uvxyz * som uppfyller lemmas förhållanden och visa att pumpning leder till en motsägelse i båda fallen.

    * Pumplängden * P * är godtycklig: Du behöver inte veta värdet på *p *; Beviset fungerar för alla *p *.

    Genom att noggrant använda dessa steg kan du använda pumpningslemma för att visa att många språk inte är kontextfria. Kom ihåg att det pumpande lemmaet endast tillhandahåller en metod för att bevisa språk är * inte * kontextfria; Det kan inte användas för att bevisa att ett språk * är * kontextfritt.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Vad är ett exempel på ett skriptspråk?
    ·Hur du ändrar teckenstorlek Använda HTML Programmerin…
    ·Vad är Client Server Programmering
    ·Hur Decode felrättande koder via Linear Programming
    ·Hur att skicka en blankett till iFrame
    ·Hur ändrar jag lösenordet med en kommandotolk
    ·Varför liknar informationsbehandling datorprogrammerin…
    ·Hur man skriver ett skript för att fånga email
    ·WPF Border Styles
    ·Hur man skapar Implicit Structures i ColdFusion
    Utvalda artiklarna
    ·Vanliga fel i Turbo C
    ·Hur man gör en varningsruta på Touch på BYOND : Drea…
    ·Hur man sätter in en radbrytning efter ett visst antal…
    ·Hur att bädda in en Java-applet i HTML
    ·Hur man manipulerar XLS filer med Python
    ·Hur du ändrar markören till en anpassad markör för …
    ·Hur man gör en cool Loading Bar i Visual Basic
    ·Hur ladda upp filer till en SQL-databas
    ·Vilken roll har en kompilator i datorprogrammering och …
    ·Hur Practice Java Coding
    Copyright © Dator Kunskap https://www.dator.xyz