Eine einfache Grammatik (S-Grammatik) ist eine, bei der jede Produktion die Form hat A → aB.1B.2. . .B.n wo ein ist ein Terminal und alles B.ich, i ≥ 0 sind keine Terminals und es gibt nur eine Produktion mit einem Paar ⟨ A , a ⟩.
Es ist klar, dass jede S-Sprache (erzeugt durch eine S-Grammatik) eindeutig und leicht zu analysieren ist, da jedes Terminalsymbol von links nach rechts und nicht-terminal die anzuwendende Produktion eindeutig bestimmt. Zum Beispiel, wenn die Zeichenfolge ista b cdann das Paar ⟨ S, Ein ⟩Bestimmt eindeutig die erste Produktion des Parsings usw. für jedes Terminal und das Nicht-Terminal rechts davon. Somit kann eine durch eine S-Grammatik definierte Sprache symbolweise ohne Lookahead analysiert werden, was eine lineare Analysezeit, tatsächlich Zeit, ergibt| x |.
S-Grammatiken sind an sich nicht besonders wichtig, da die meisten realen Sprachen ihre Fähigkeiten überschreiten. Aber sie sind ein Sprungbrett zu anderen Grammatiken, die in linearer Zeit analysiert werden, wie zL L ( k ) Grammatiken, in denen es eine Grenze gibt kauf dem Lookahead benötigt, um eine Produktion während des Parsens zu bestimmen. In der Tat ist eine S-Grammatik eineL L ( 0 ) Grammatik.
Die Verbindung zu Automaten besteht darin, dass eine S-Sprache mit einem Pushdown-Automaten mit einem einzelnen Status analysiert werden kann, der nur das Eingabesymbol und das oberste Stapelsymbol betrachtet, um eine Folge von zu drückenden Stapelsymbolen zu bestimmen. Aber seit der S-Grammatik ...
S.→ a S.B | #B → a
... erzeugt nicht reguläre {einich#einich: i ≥ 0 }, S-Sprachen können im Allgemeinen nicht durch deterministische oder nicht deterministische Automaten mit endlichen Zuständen erkannt werden.