JavaScript promise rejection: Loading CSS chunk katex failed. (error: https://git.gaminggeneration.de/assets/css/katex.faca27c4.css). Open browser console to see more details. (43)
Files
.idea
Writerside
cfg
images
topics
02
04
Datenbanken
HCI
Informatik und Gesellschaft
Projektmanagement
Rechnernetze
Software Engineering
Theoretische Informatik
Hausaufgaben
Übungen
01Einleitung.md
02_GrundlagenFormaleSprachen.md
03_GrundlagenEndlicherAutomaten.md
04_GrenzenGroesseEA.md
05_GrundlagenGrammatiken.md
06_ReguläreSprachen.md
06
pdf
StartPage.md
c.list
in.tree
v.list
writerside.cfg
.gitlab-ci.yml
README.md
zusammenfassungen/Writerside/topics/04/Theoretische Informatik/06_ReguläreSprachen.md
David Schirrmeister 195bce294a update
2025-06-15 16:30:49 +02:00

3.7 KiB
Raw Blame History

Reguläre Sprachen

Eine Sprache ist dann regulär, wenn der Nerode-Index endlich ist

  • Bedeutet auch:
    • Für alle NEAs existiert eine reguläre Grammatik
    • Für alle regulären Sprachen existiert ein NEA

NEA → reguläre Grammatik

  • Gegebener NEA
    • N=(Σ,Q,q_s,Q_a,δ)
  • Definierbare Grammatik
    • G_N=(Σ,V,S,R)
    • V=Q
    • S=q_s
    • R
      • Regel q → x q' für alle q,q' ∈ Q, x ∈ Σ mit q' ∈ δ(q,x)
        • für alle Übergänge, welche in einen anderen Zustand übergehen, wird eine Regel der Form Ausgangszustand → Übergang Endzustand formuliert
      • Regel q → ε für alle q ∈ Q_a
        • alle akzeptierenden Zustände erhalten die Regel Zustand → ε
        • Grammatik darf beendet werden ohne weitere Übergänge
          • "Variable einfach entfernen"

Normalisieren einer Grammatik

  • Alle Regeln, die mehrere Terminale und eine Variable besitzen (bspw. V→aaaX, V→abcX)
    • Aufsplitten in mehrere Regeln mit je einem Terminal und einer Variable
      • Bspw:
        • V → abcX
        • wird zu
          • V → aV_1^{(abcX)}
          • V_1^{(abcX)} → bV_2^{(abcX)}
          • V_2^{(abcX)} → cX
  • Alle Regeln, die ≥1 Terminale besitzen und keine Variablen (bspw. V→aab, V→acb)
    • Aufsplitten in mehrere Regeln mit je einem Terminal und einer Variable
    • Hinzufügen einer Regel, die zu ε führt
      • Bspw:
        • V → abc
        • wird zu
          • V → aV_1^{(abc)}
          • V_1^{(abc)} → bV_2^{(abc)}
          • V_2^{(abc)} → cV_3^{(abc)}
          • V_1^{(abc)} → ε
  • Für alle Regeln der Form V→W
    • Ersetzen durch V → β für alle Regeln W → β
      • Bspw:
        • V → aV | cX | W
        • W → bX | ε
        • wird zu
        • V → aV | cX | bX | ε
        • W → bX | ε

Reguläre Grammatik → NEA

  1. Normalisiere Grammatik
  2. erstelle NEA
    • Q = V
    • q_s = S ∈ Q
    • Q_a := \{q ∈ Q | q → ε) ∈ R\}
      • Alle Variablen, die einen Übergang nach ε haben, sind akzeptierte Zustände
    • δ
      • für alle q, q' ∈ Q und x ∈ Σ gilt
        • q' ∈ δ(q,x) existiert Regel q → xq' in R
          • Terminale werden zu Übergängen
          • Nicht-Terminale sind der Zielzustand

Beispiel

image_921.png

Wortproblem für reguläre Sprachen

Der natürliche Algorithmus

  1. konstruiere NEA
  2. konstruiere Potenzmengenautomat A
  3. minimiere A und erhalte DEA
  4. überprüfe ob DEA Eingabe akzeptiert

Vorteile:

  • einfache, allgemeine Lösung
  • Wiederverwendung des DEAs

Nachteile:

  • Punkt 2 ist kostspielig
    • exponentiell in Grammatikgröße
    • insbesondere für einzelne Eingabe

NEA-basierter Algorithmus

  1. konstruiere NEA
  2. prüfe ob NEA Eingabe akzeptiert
    • aktuellen Metazustand merken, weiterrechnen, ...
    • image_922.png

Vorteile:

  • kein Potenzmengenautomat
    • keine exponentielle Laufzeit

Nachteile:

  • teuer für wiederholtes Wortproblem
    • NEA Wortproblem in O(|Q|²*|S|)
    • DEA Wortproblem in O(|S|)

Reguläre Ausdrücke

rekursiv definierte Zeichenkette über dem Alphabet Σ \{(,),|,.,*\}

  • ε ist regulärer (Basis-) Ausdruck
  • für jedes x ∈ Σ ist x ein regulärer (Basis-) Ausdruck
  • sind α und β reguläre Ausdrücke, dann auch
    • (α | β) (α oder β)
    • (α * β) (α und β)
    • (α*) (kleensche Hülle (beliebig oft das Zeichen))
  • Zusätzlich erlaubt:
    • weglassen des *
    • weglassen unnötiger Klammern
      • kleensche Hülle > Konkatenation > Vereinigung (Hoch vor Punkt vor Strich)
  • Zusätzliche syntaktische Merkmale
    • (a)^+: mind. 1x a
    • (a)^?: ggf. 1x a
    • [acfw]: a | c | f | w = a oder c oder f oder w
    • [^acfw]: nicht eins von denen
    • [1-4]: [1234]