Hallo Freunde,
im Zuge meiner Vorbereitung zur Prüfung von Prinzipien von Programmiersprachen tut sich mir folgende Frage auf.
Ich habe einen Term gegeben:
Syntaxbaum:
und ich soll das entsprechende Programm des Kellerautomaten erstellen und den Inhalt des Stacks in jedem Schritt angeben.
Ich habe folgendes (zur Vereinfachung gebe ich nur den Inhalt für signifikante Stellen an und lasse die pops raus):
push("foo"), push("bar")
stack={"foo"; "bar"}
(+)
stack={"foobar"}
push(length())----------->bin ich mir nicht sicher, was hier gemacht wird....ob das so stimmt (lenth() hat ja keinen Wert, wird das trotzdem gepusht?)
(.)
stack={6}
push(2)------------------->hier bin ich mir nicht sicher, ob erst 1 und 4 gepusht und berechnet werden
push(1)
push(4)
stack={6;2;1;4}
(+)
stack={6;2;5}
(*)
stack={6;10}
(<)
stack={true}
Was sagt ihr dazu? Ist das so richtig, oder hab ich irgendwas übersehen?
Der Aufruf des Bytecodes mittels "javap -c Classfile" ergab:
Aus diesem werde ich auch nicht so richtig schlau. Frage am Rand, wie kann man sich jede Zeile ausgeben lassen?
Kann mir jemand weiterhelfen?
Vielen Dank!
im Zuge meiner Vorbereitung zur Prüfung von Prinzipien von Programmiersprachen tut sich mir folgende Frage auf.
Ich habe einen Term gegeben:
Code:
("foo" + "bar").length() < 2 * (1+4)

und ich soll das entsprechende Programm des Kellerautomaten erstellen und den Inhalt des Stacks in jedem Schritt angeben.
Ich habe folgendes (zur Vereinfachung gebe ich nur den Inhalt für signifikante Stellen an und lasse die pops raus):
push("foo"), push("bar")
stack={"foo"; "bar"}
(+)
stack={"foobar"}
push(length())----------->bin ich mir nicht sicher, was hier gemacht wird....ob das so stimmt (lenth() hat ja keinen Wert, wird das trotzdem gepusht?)
(.)
stack={6}
push(2)------------------->hier bin ich mir nicht sicher, ob erst 1 und 4 gepusht und berechnet werden
push(1)
push(4)
stack={6;2;1;4}
(+)
stack={6;2;5}
(*)
stack={6;10}
(<)
stack={true}
Was sagt ihr dazu? Ist das so richtig, oder hab ich irgendwas übersehen?
Der Aufruf des Bytecodes mittels "javap -c Classfile" ergab:
Code:
Code:
0: ldc #2; //String foobar
2: invokevirtual #3; //Method java/lang/String.length:()I
5: bipush 10
7: if_icmpge 14
10: iconst_1
11: goto 15
14: iconst_0
15: ireturn
Kann mir jemand weiterhelfen?
Vielen Dank!