Übersetzerbau - Reguläre Ausdrücke


Advertisements


Die Lexikalische Analysator muss zu scan und identifizieren nur eine endliche Menge gültiger String / Token / Lexem, die auf die Sprache in der Hand gehören. Es sucht nach dem von den Sprachregeln definierten Muster.

Reguläre Ausdrücke haben die Möglichkeit,ausdrücken endlich Sprachen durch definieren ein Muster für endliche Symbolketten , zum Ausdruck bringen. Die durch reguläre Ausdrücke definiert Grammatik wird als reguläre Grammatik bekannt. Die durch regelmäßige Grammatik definierten Sprache ist bekannt als reguläre Sprache.

Regulärer Ausdruck ist ein wichtiger Notation zur Angabe von Mustern. Jedes Muster entspricht einer Menge von Zeichenketten, so dass reguläre Ausdrücke dienen als Namen für einen Satz von Zeichenketten. Programmiersprache Token können durch reguläre Sprachen beschrieben werden. Die Spezifikation von regulären Ausdrücken ist ein Beispiel für eine rekursive Definition. Reguläre Sprachen sind einfach zu verstehen und effiziente Umsetzung.

Es gibt eine Reihe von algebraischen Gesetze, die von regulären Ausdrücken eingehalten werden, die benutzt werden können, um reguläre Ausdrücke in äquivalente Formen manipulieren.

Betrieb

Die verschiedenen operationen auf Sprachen werden:

  • Union der zwei Sprachen L und M geschrieben wie

    L U M = {s | s ist in L oder s ist in M}

  • Die Verkettung zweier Sprachen L und M geschrieben wie

    LM = {st | s ist in L und t ist in M}

  • Die Kleene Schließung einer Sprache L wird geschrieben als

    L * = Null oder mehr Auftreten von Sprache L.

Notationen

Wenn r und s regulären Ausdrücken bezeichnet die Sprachen L (r) und L (s), dann

  • Union : (r) | (s) ist ein regulärer Ausdruck, der L (r) UL (s)

  • Verkettung : (r) (s) ist ein regulärer Ausdruck, der L (r) L (s)

  • Kleene-Hülle : (r) * ist ein regulärer Ausdruck, bezeichnen (L (r)) *

  • (r) ist ein regulärer Ausdruck, bezeichnen L (r)

Rangfolge und Assoziativität

  • *, Verkettung (.) und | (Pipe-Zeichen) links sind assoziative
  • * hat die höchste Vorrang
  • Verkettung (.) hat die zweithöchste Vorrang.
  • | (Pipe-Zeichen) hat die niedrigste Vorrang aller.

Vertretung gültigen Zeichen einer Sprache in regulären Ausdruck

Vertretung gültigen Zeichen einer Sprache in regulären Ausdruck

  • x * bedeutet null oder mehr Vorkommen von x.

    dh sie erzeugen kann. { e, x, xx, xxx, xxxx, … }

  • x+bedeutet ein oder mehrere Vorkommen von x..

    dh sie erzeugen kann { x, xx, xxx, xxxx … } oder x.x*

  • x? bedeutet höchstens ein Auftreten x

    d.h., sie erzeugen kann entweder {x} oder {e}.

  • [a-z] ist alle Klein Alphabet der englischen Sprache.

    [A-Z] ist alle Großbuchstaben Alphabet der englischen Sprache.

    [0-9] ist alle natürlichen Zahlen in der Mathematik verwendet.

Vertretung Auftreten von Symbolen mit regulären Ausdrücken

Brief = [a – z] oder [A – Z]

Stelle = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 oder [0-9]

Zeichen = [ + | - ]

Vertretung Sprache Token mit regulären Ausdrücken

dezimal = (Zeichen)?(Stelle)+

Bezeichner = (Brief)(Brief | Stelle)*

Das einzige Problem, links mit dem Lexer ist, wie man die Gültigkeit eines regulären Ausdrucks in Festlegung der Muster der Schlüsselwörter einer Sprache verwendet, zu überprüfen. Eine allgemein anerkannte Lösung ist, endliche Automaten zur Prüfung zu verwenden.



Advertisements