L L 1 - S C A N N E R
*****************************************************************
************* KURZE EINLEITUNG ZUR GRAMMATIK
LL1 ****************
*****************************************************************
Eine LL1-Grammatik ist eine vereinfachte
Kontextfreie-Grammatik.
Eine LL1-Grammatik kann zur Syntaxanalyse
von Programmiersprachen
verwendet werden (einfache deterministische
Top - Down- Methode).
*****************************************************************
*********** REGELN UND EINSCHRÄNKUNG
ZUR LL1 GRAMMATIK **********
*****************************************************************
Auf der linken Regelseite muß
genau ein NichTerminalSymbol (NT)
stehen. Auf der rechten Seite können
Terminals und NichTerminals
wild durcheinander sein. Sind die
NT- Symbole der linken Regel-
seite identisch, so muß die Schnittmenge
der Beschreibungsmengen
der einzelnen Regeln unterschiedlich
sein, d.h. beispielsweise
R1:= <S> -> (c)(f)
.
R2:= <S> -> (c)<g> Terminal 'c' ist
Schnittmenge aus R1 und R2,
und das ist unzulässig, da die LL1- Grammatik
nicht in der Lage
ist zwischen R1 und R2 zu entscheiden,
welch der Grammatikregel
zu nehmen ist. Weiterhin ist eine LL1-Grammatik
nicht in der Lage
links Rekursive Ausdrücke zu verarbeiten.
.
*****************************************************************
********* WAS MACHT DER SCANNER MIT DER LL1
GRAMMATIK ***********
*****************************************************************
Mit dem Scanner werden die einzelnen Regeln
der Grammatik durch-
gekämmt, es wird bestimmt, welche Terminals
mit der einzelnen .
Regel abgedeckt werden. z.B.
.
*****************************************************************
******* FUNKTIONSWEISEN UND EINSCHRÄNKUNGEN
ZUM PROGRAMM ********
*****************************************************************
Hinter dem Programmnamen des Scanners
muß eine Datei mit der Er-
weiterung ll1 stehen (z.B. C:\\>Scanner.exe
gramatik.ll1). Das
Programm ist in der Lage, 100 Terminal
& 100 NichterminalSymbole
zu verarbeiten. TerminalSymbole werden
in runden und Nichttermi-
nalSymbole werden in eckige Klammern
geschrieben. Namen für ein
Terminal bzw. NichtTerminal dürfen
maximal 19 Zeichen lang sein.
Zulässige Buchstaben für Namen:
alle Zeichen außer <>, () und die
ASCII-Zeichen mit der Nummer unterhalb von
32 außer ''. Zwischen
Groß- und Kleinbuchstaben
wird unterschieden. Zwischen T und NT
können beliebig viele FreiZeichen stehen.
Für jede Regel muß eine
neue Zeile begonnen werden. Ist eine
neue Zeile genau am Anfang
durch ein Semikolon eingeleitet, so wird diese
Zeile als Komentar
interpretiert und somit ignoriert. Es
darf also auch keine Leer-
zeilen geben. Nach dem ersten NT muß
ein Minus-Strich stehen. Das
Epsilon ist als '()' zu schreiben. Das
Programm ist in der Lage,
eine LL1- Grammatik vom Umfang 300 Zeilen
… 49 Symbole zu verar-
beiten. Eine fertig verarbeitete
Grammatik steht in der Datei
gramatik.ll1 -> 'gramatik.ll$.' Hier
noch ein Beispiel für eine
Grammatik:
.
;****** eine Grammatik .....
.
<type0> -> <simple>
.
;******* ZwischenKomentar
.
<t#e1> -> (^) (id) <simple>
.
<t_2> -> ()
.
;******* ENDE ***** ...
.
L L 1 - S C A N N E R