Hallo! Meine Frage hat mit der händischen Syntaxüberprüfung zu tun.
Und zwar geht es um die polnische Notation:
Beispiel: 4+8-2 = +(4,-(8,2))
D.h. man schreibt die Verknüpfungsoperatoren vorne und erst danach die Ausdrücke.
Die Ausdrücke sollen aus ganzen Zahlen, den mathematischen Grundoperationen +,-,*,/, runden Klammern () und Kommata zusammengesetzt sein.
Für die Einfachheit sind auch Zahlen mit führenden Nullen zugelassen.
Hieraus folgt die folgende lexikalische Grammatik:
Hierauf aufbauend besteht die Grammatik aus diesen Regeln:
Die Aufgabe besteht nun darin, für die folgenden Ausdrücke einen Ableitungsbaum zu entwickeln:
1.) *(+(4,12),/(10,3))
2.) -(-(4,*(3,4)))
3.) /(+(-3,04),-01)
Für 1.) habe ich das schon mittels graphviz erstellt (s. Anhang). Das Prinzip ist mir also - denke ich - klar.
Doch bei 2.) und 3.) komme ich nicht so einfach zurecht.
Wieso braucht man hier Zahlen mit führender Null, was bedeutet zum Beispiel:
+(-3,04) in "normaler" Schreibweise?
Und zwar geht es um die polnische Notation:
Beispiel: 4+8-2 = +(4,-(8,2))
D.h. man schreibt die Verknüpfungsoperatoren vorne und erst danach die Ausdrücke.
Die Ausdrücke sollen aus ganzen Zahlen, den mathematischen Grundoperationen +,-,*,/, runden Klammern () und Kommata zusammengesetzt sein.
Für die Einfachheit sind auch Zahlen mit führenden Nullen zugelassen.
Hieraus folgt die folgende lexikalische Grammatik:
Code:
binop = '+' | '/' | '*'
minop = '-'
lb = '('
rb = ')'
komma = ','
nums = num {nums}
num = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
Hierauf aufbauend besteht die Grammatik aus diesen Regeln:
Code:
TERM = BINTERM
| MINTERM
| nums
BINTERM = binop ARGS
MINTERM = minop MINREST
MINREST = ARGS
| nums
ARGS = lb TERM komma TERM rb
Die Aufgabe besteht nun darin, für die folgenden Ausdrücke einen Ableitungsbaum zu entwickeln:
1.) *(+(4,12),/(10,3))
2.) -(-(4,*(3,4)))
3.) /(+(-3,04),-01)
Für 1.) habe ich das schon mittels graphviz erstellt (s. Anhang). Das Prinzip ist mir also - denke ich - klar.
Doch bei 2.) und 3.) komme ich nicht so einfach zurecht.
Wieso braucht man hier Zahlen mit führender Null, was bedeutet zum Beispiel:
+(-3,04) in "normaler" Schreibweise?