Reguliere grammatica
Een reguliere grammatica is een formele grammatica (N,
Definitie
[bewerken | brontekst bewerken]Formeel hebben de productieregels in een rechts-reguliere grammatica de volgende vorm:
- A → a - waarbij A een niet-terminaal symbool uit N is en a een terminaal symbool uit
Σ - A → aB - waarbij A en B uit N en a uit
Σ - A →
ε - waarbij A uit N enε geeft de lege string weer (een string met lengte 0)
In een links-reguliere grammatica hebben alle productieregels de volgende vorm:
- A → a - waarbij A een niet-terminaal symbool uit N is en a een terminaal symbool uit
Σ - A → Ba - waarbij A en B uit N en a uit
Σ - A →
ε - waarbij A uit N enε de lege string is
Kenmerken
[bewerken | brontekst bewerken]Reguliere grammatica's genereren de reguliere talen en zijn hierdoor equivalent aan eindigetoestandsautomaten en reguliere expressies. Zowel rechts-reguliere grammatica's als links-reguliere grammatica's zijn in staat alle reguliere talen te beschrijven. Elke reguliere grammatica is ook een context-vrije grammatica. Niet elke context-vrije grammatica is echter een reguliere grammatica. Daarnaast zijn er niet-reguliere talen (maar nog steeds context-vrije talen) die gebruikmaken van links- en rechts-reguliere productieregels; de context-vrije taal met de zinnen wordt gegenereerd door de grammatica G met N = {S, A},
- S → aA
- A → Sb
- S →
ε
en S het startsymbool. Deze grammatica bevat zowel links- als rechts-reguliere productieregels en is hierdoor niet meer regulier.
Voorbeeld
[bewerken | brontekst bewerken]De volgende formele grammatica G met N = {S, A} en
- S → aS
- S → bA
- A →
ε - A → cA
Het startsymbool is S. Deze grammatica beschrijft dezelfde taal als de reguliere expressie a*bc*.