formal-languages

___ tag123grammar ___ Eine formale Grammatik ist eine Gruppe von Produktionsregeln, die beschreiben, wie Strings gültiger Syntax gebildet werden. Formale Grammatiken werden am häufigsten verwendet, um die Syntax einer Programmiersprache zu spezifizieren. ___ qstnhdr ___ Links-lineare und rechts-lineare Grammatiken ___ qstntxt ___

Ich brauche Hilfe beim Aufbau einer links-linearen und rechts-linearen Grammatik für die folgenden Sprachen?

%Vor%

Für a) Ich habe folgendes:

%Vor%

Stimmt das? Ich brauche Hilfe bei b & amp; c.

    
___ answer48356286 ___

Regeln zum Konvertieren regulärer Ausdrücke in lineare oder reguläre lineare reguläre Grammatik

    
___ tag123formallanguages ​​___ Das Studium formaler Sprachen betrifft die Definition, Beschreibung (Erzeugung) und Analyse (Erkennung) von Zeichenketten über endliche Mengen von Symbolen. Die Menge aller binären Darstellungen von ganzen Zahlen, die Menge aller Palindrome über dem lateinischen Kleinbuchstaben-Alphabet und die Menge aller binären Darstellungen von Turing-Maschinen, die sich selbst nicht akzeptieren, sind Beispiele für formale Sprachen. ___ tag123computationtheory ___ Die Theorie der Berechnung ist der Zweig, der sich mit der Frage befasst, ob und wie effizient Probleme mithilfe eines Algorithmus in einem Rechenmodell gelöst werden können. Das Gebiet ist in drei Hauptbereiche unterteilt: Automatentheorie, Berechenbarkeitstheorie und computational complexity theory. [Wikipedia] ___ tag123regularlanguage ___ Reguläre Sprache ist eine Sprache, die durch einen regulären Ausdruck dargestellt werden kann und somit jede Zeichenkette in der Sprache von dem entsprechenden deterministischen endlichen Automaten akzeptiert werden kann. Hinweis: Reguläre Sprache sollte nicht mit regulären Ausdrücken verwechselt werden. Bei Fragen zum Mustervergleich in Strings verwenden Sie stattdessen das [regex] -Tag. ___ answer13945932 ___

Konstruieren einer äquivalenten regulären Grammatik aus einem regulären Ausdruck

Zuerst beginne ich mit ein paar einfachen Regeln, um Reguläre Grammatik (RG) aus Regulärem Ausdruck (RE) zu konstruieren.
Ich schreibe Regeln für die rechte lineare Grammatik (als Übung lasse ich ähnliche Regeln für die linke lineare Grammatik schreiben)

HINWEIS: Großbuchstaben werden für Variablen verwendet und klein für Terminals in Grammatik. Das NULL-Symbol ist %code% . Term 'any number' bedeutet null oder mehr mal das ist * Sternschluss.

[ BASISIDEE ]

  • SINGLE TERMINAL: Wenn der RE einfach %code% ist, können wir %code% schreiben, mit nur einer Produktionsregel %code% (wobei %code% ) ein Äquivalent ist RG.

  • UNION OPERATION: Wenn der RE die Form %code% hat, wo beide %code% sind, können wir %code% schreiben, mit zwei Produktionsregeln %code% , ist ein gleichwertig RG.

  • KONZENTRATION: Wenn die RE die Form %code% hat, können wir %code% schreiben, %code% , mit zwei Produktionsregeln %code% , ist ein Äquivalent RG.

  • STAR CLOSURE: Wenn der RE die Form %code% hat, wobei %code% und %code% Operation, können wir zwei Produktionsregeln in %code% ,% co_de schreiben %, ist ein äquivalentes RG.

  • PLUS CLOSURE: Wenn die RE die Form e + hat, können wir in %code% und %code% operation zwei Produktionsregeln schreiben %code% , %code% , ist ein äquivalentes RG.

  • STAR CLOSURE ON UNION: Wenn der RE die Form (e + f) * hat, wo beide %code% sind, können wir drei Produktionsregeln in %code% ,% schreiben co_de%, ist ein äquivalentes RG.

  • PLUS VERSCHLUSS AUF UNION: Wenn der RE die Form (e + f) + hat, wo wir beide %code% , können wir vier Produktion schreiben Regeln in %code% , %code% , ist ein äquivalentes RG.

  • STAR CLOSURE ON CONCATENATION: Wenn der RE die Form (ef) * hat, wo beide %code% sind, können wir drei Produktionsregeln in %code% , %code% schreiben , ist ein äquivalentes RG.

  • PLUS VERSCHLUSS: Wenn der RE die Form (ef) + hat, wo beide %code% , können wir drei Produktionsregeln schreiben %code% , %code% , ist ein äquivalentes RG.

Stellen Sie sicher, dass Sie alle oben genannten Regeln verstehen, hier ist die Übersichtstabelle:

%Vor%
  

Hinweis: Das Symbol% ​​co_de% und %code% sind Terminals, ^ ist ein NULL-Symbol und %code% ist die Startvariable

[ANTWORT]

Jetzt können wir zu dir Problem kommen.

a) %code%

  

Sprachbeschreibung: Alle Strings bestehen aus 0s und 1s und enthalten mindestens ein Paar %code% .

  • Rechte lineare Grammatik:

    S - & gt; 0S | 1S | 00A
    A - & gt; 0A | 1A | ^

    String kann mit einer beliebigen Zeichenfolge von %code% s und %code% s beginnen, weshalb die Regeln %code% und Da mindestens ein Paar %code% enthalten sind, gibt es kein Nullsymbol. %code% ist enthalten, weil %code% , %code% nach %code% stehen können. Das Symbol% ​​co_de% kümmert sich um die 0 und 1 nach dem %code% .

  • Linke lineare Grammatik:

    S - & gt; S0 | S1 | A00
    A - & gt; A0 | A1 | ^

b) %code%

  

Sprachbeschreibung: Eine beliebige Anzahl von 0, gefolgt von einer beliebigen Zahl von 10 und 11.
        {weil 1 (0 + 1) = 10 + 11}

  • Rechte lineare Grammatik:

    S - & gt; 0S | A | ^
    A - & gt; 1B
    B - & gt; 0A | 1A | 0 | 1

    String beginnt mit einer beliebigen Anzahl von %code% , also wird Regel %code% eingeschlossen, dann Regel für das Erzeugen von %code% und %code% für beliebig viele Male mit %code% .

    Eine andere alternative rechtslineare Grammatik kann

    sein

    S - & gt; 0S | A | ^
    A - & gt; 10A | 11A | 10 | 11

  • Linke lineare Grammatik:

    S - & gt; A | ^
    A - & gt; A10 | A11 | B
    B - & gt; B0 | 0

    Eine alternative Form kann

    sein

    S - & gt; S10 | S11 | B | ^
    B - & gt; B0 | 0

c) %code%

  

Sprachbeschreibung: Erstens enthält die Sprache null (^) Zeichenkette, weil dort ein * (Stern) außerhalb jedes im Inneren vorhandenen Gegenstands () steht. Auch wenn eine Zeichenkette in der Sprache nicht Null ist, die trotzig mit 00 endet. Man kann einfach diesen regulären Ausdruck in Form von (((A) * B) * C) * denken, wobei (A) * (01 + 10) ist * Das ist eine beliebige Anzahl von Wiederholungen von 01 und 10.   Wenn es eine Instanz von A in der Zeichenkette gibt, würde ein B trotzig sein, weil (A) * B und B 11. ist   Einige Beispielstrings {^, 00, 0000, 000000, 1100, 111100, 1100111100, 011100, 101100, 01110000, 01101100, 0101011010101100, 101001110001101100 ....}

  • Linke lineare Grammatik:

    S - & gt; A00 | ^
    A - & gt; B11 | S
    B - & gt; B01 | B10 | A

    %code% , weil eine beliebige Zeichenkette entweder null ist, oder wenn sie nicht null ist, endet sie mit einem %code% . Wenn die Zeichenfolge mit %code% endet, stimmt die Variable %code% mit dem Muster %code% überein. Auch dieses Muster kann entweder null sein oder mit %code% enden. Wenn es null ist, stimmt %code% mit %code% überein, d. H. Die Zeichenfolge endet mit dem Muster wie %code% . Wenn das Muster nicht null ist, stimmt %code% mit %code% überein. Wenn %code% mit allem übereinstimmt, was es kann, beginnt %code% mit der Übereinstimmung der Zeichenfolge. Dies schließt das äußerste * in %code% .

  • Rechte lineare Grammatik:

    S - & gt; A | 00S | ^
    A - & gt; 01A | 10A | 11S

Zweiter Teil Ihrer Frage :

%Vor%

( Antwort )
Ihre Lösung ist aus folgenden Gründen falsch:

Links-lineare Grammatik ist falsch, da String %code% nicht generierbar ist. Die rechts-lineare Grammatik ist falsch. Da die Zeichenfolge %code% nicht generiert werden kann. Obwohl beide Sprachen durch den regulären Ausdruck der Frage (a) erzeugt werden.

BEARBEITEN
Hinzufügen von DFAs für jeden regulären Ausdruck damit man es hilfreich finden kann.

a) %code%

b) %code%

c) %code%

Das Zeichnen von DFA für diesen regulären Ausdruck ist ein Trick und komplex.
Dazu wollte ich DFAs

hinzufügen

Um die Aufgabe zu vereinfachen, sollten wir die Artbildung von RE denken für mich sieht die RE %code% wie %code%

aus %Vor%

Tatsächlich in obigem Ausdruck %code% it self in Form von %code% das ist %code%

RE %code% ist gleich %code% . Der DFA für (a b) lautet wie folgt:

DFA für %code% ist:

DFA für %code% ist:

Versuchen Sie, die Ähnlichkeit in der Konstruktion der obigen drei DFA zu finden. gehe nicht weiter, bis du den ersten nicht verstanden hast

    
___
4
Antworten

Tipps zum Erstellen einer "kontextfreien Grammatik"

Ich bin neu bei CFG's, Kann mir jemand Tipps zum Erstellen von CFG geben, das eine Sprache generiert? Zum Beispiel    L = {am bn | m >= n} Was ich habe ist:    So -> a | aSo | aS1 | e S1 -> b | bS1 | e...
28.02.2013, 03:20
3
Antworten

Zahlen als Strings lesen

Ich bin neu bei der R-Programmierung und möchte eine Textdatei in R. lesen. Eine der Spalten, sagen wir mal, Spalte 7 ist numerisch und jede Zahl stellt eine ID dar. Ich möchte, dass R die Zahlen liest, als wären sie Strings. Und zähle die Hä...
27.02.2013, 12:51
1
Antwort

Welche modernen Computersprachen sind LL (1)?

(Ich verbringe die Ferienzeit mit einer Sprachtheorie. Entschuldigen Sie, wenn das eine naive Frage ist.) Nach hier :    LL-Grammatiken, insbesondere LL (1) Grammatiken, sind von großem praktischen Nutzen   Interesse, wie Parser für diese...
01.01.2017, 11:08
2
Antworten

Links-lineare und rechts-lineare Grammatiken

Ich brauche Hilfe beim Aufbau einer links-linearen und rechts-linearen Grammatik für die folgenden Sprachen? %Vor% Für a) Ich habe folgendes: %Vor% Stimmt das? Ich brauche Hilfe bei b & amp; c.     
11.12.2012, 08:38