===== Lösung von Aufgabe 1: ===== ==== Aufgabe: ==== Gegeben sei eine sehr einfache Programmiersprache, in der nur * Variablenbezeichner (bestehend aus den Buchstaben a bis z), * ganze Zahlen (ohne Vornullen, aber beliebig groß) * die Operatoren + und - * runde Klammern * der Zuweisungsoperator = * der Anweisungsende-Operator ; vorkommen, d.h. ein Programm besteht aus einer Folge von Zuweisunngen, z.B. alter=12+(3-4); r=3+(10-(alter+5)); a) Geben Sie eine Grammatik in EBNF an, die Programme dieser Programmiersprache beschreibt. b) Übersetzen Sie die Produktionsregeln dieser Grammatik in ein Syntaxdiagramm. ==== Lösung ==== Die Grammatik G = (A, V, P, S) mit * dem Alphabet A = {"0", "1", ..., "9", "+", "-", ";", "="}, * den Nichtterminalen V = {ZifferOhneNull, Ziffer, Buchstabe, Bezeichner, Term, Zuweisung, Programm} * dem Startsymbol S = Programm * und den nachfolgenden Produktionsregeln beschreibt die gegebene Sprache. === Produktionsregeln: === R1: ZifferOhneNull = "1" | "2" | "3" | ... | "9" R2: Ziffer = ZifferOhneNull | "0" R3: Zahl = ([ "-" ] ZifferOhneNull { Ziffer }) | "0" R4: Buchstabe = "a" | "b" | ... | "z" R4: Bezeichner = Buchstabe { Buchstabe } R5: Term = Zahl | Bezeichner | (Term "+" Term) | (Term "-" Term) | ("(" Term ")") R6: Zuweisung = Bezeichner "=" Term ";" R7: Programm = { Zuweisung } === b) Produktionsregeln als Syntaxdiagramm === {{ :formalesprachen:aufgabe1loesung:syntaxdiagramm_aufgabe_1.png?600 |}}