LL(1) Parsertabelle Größe
Anzahl der Felder in einer LL(1)-Parsertabelle: Einträge = Nichtterminale · Terminale (|M| = |N|·|T+$|).
LL(1) Parsertabelle Größe berechnen
Anzahl der Felder in einer LL(1)-Parsertabelle: Einträge = Nichtterminale · Terminale (|M| = |N|·|T+$|).
- Einträge — Tabelleneinträge
- Nichtterminale — Nichtterminale
- Terminale — Terminale
Worum geht es?
Ein LL(1)-Parser wählt seine nächste Produktion über eine zweidimensionale Tabelle M[A, a], indiziert mit dem aktuellen Nichtterminal A und dem Lookahead-Terminal a (einschließlich $/EOF). Die Tabelle hat damit immer genau |N| · |T| Felder, unabhängig davon, wie viele davon belegt sind — leere Zellen sind Fehlereinträge.
Diese Größe bestimmt den Speicherbedarf der erzeugten Parsertabelle eines Generators und ist die Grundgröße für Kollisionsanalysen: Trägt der Generator in dieselbe Zelle mehr als eine Produktion ein, ist die Grammatik nicht LL(1).
Die Formel
Einträge = Nichtterminale · Terminale
Umstellungen:
Nichtterminale = Einträge / Terminale
Terminale = Einträge / NichtterminaleDie Variablen
| Symbol | Bedeutung | Einheit | Erklärung |
|---|---|---|---|
| Nichtterminale | Nichtterminale | — | Anzahl Nichtterminalsymbole |N|. |
| Terminale | Terminale | — | Anzahl Terminalsymbole inkl. EOF (|T| + 1). |
| Einträge | Tabelleneinträge | — | Felder der LL(1)-Tabelle M[A, a]. |
Minimal-Beispiel
Ein Mini-Parser mit |N| = 4 Nichtterminalen und |T| = 6 Terminalen (inkl. $):
Einträge = 4 · 6
= 24Praxis-Beispiele
Beispiel 1 — Ausdrucks-Grammatik
|N| = 6, |T| = 8 (inkl. EOF):
Einträge = 6 · 8
= 48Beispiel 2 — Nichtterminale aus Tabellenausgabe
Eine generierte Tabelle hat 168 Einträge bei 14 Terminalen:
Nichtterminale = 168 / 14
= 12Beispiel 3 — JSON-Subset
|N| = 7 (Value, Object, Members, Pair, Array, Elements, Element), |T| = 12 (inkl. $):
Einträge = 7 · 12
= 84