4. Aufgabenblatt
4. Aufgabenblatt
Zur letzten Aufgabe: Das mit dem ANTLR habe ich noch nicht so wirklich verstanden
Wie genau rufe ich ANTLR denn in der Console auf? Der Befehl in den Folien funktioniert bei mir nicht. Wenn ich ANTLRWorks starte kann ich auch nichts erstellen weil die CALC.tokens Datei fehlt. Sollen wir die auch selbst erstellen?
Wie genau rufe ich ANTLR denn in der Console auf? Der Befehl in den Folien funktioniert bei mir nicht. Wenn ich ANTLRWorks starte kann ich auch nichts erstellen weil die CALC.tokens Datei fehlt. Sollen wir die auch selbst erstellen?
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!
Re: 4. Aufgabenblatt
Calc.tokens sollte dir erstellt werden, wenn du ANTLR mit Calc.g als Parameter ausführst.Martek hat geschrieben:Zur letzten Aufgabe: Das mit dem ANTLR habe ich noch nicht so wirklich verstanden
Wie genau rufe ich ANTLR denn in der Console auf? Der Befehl in den Folien funktioniert bei mir nicht. Wenn ich ANTLRWorks starte kann ich auch nichts erstellen weil die CALC.tokens Datei fehlt. Sollen wir die auch selbst erstellen?
Die ANTLR Version auf der Webseite lässt sich wie folgt ausführen:
Code: Alles auswählen
java -jar antlr-3.5-complete.jar Calc.g
Compiler 1 Tutor WS 12/13
Re: 4. Aufgabenblatt
Okay ich habe nun alles kompilieren können und versuche nun den interpreter auszuführen.
Leider weiß ich nicht genau wie dieser zu benutzen ist.
nach hinzufügen von antlr im classpath kann ich java Calc aufrufen und ich bekomme eine Eingabemaske. Aber egal was ich eintippe, ich bekomme keine Ausgabe. Wie benutze ich Calc denn dann und gibt es die Möglichkeit etwas mit einer Textdatei einlesen und Calc speichert das Ergebnis auch in eine Textdatei? Wäre ja sinnvoll für die Aufgabe.
Leider weiß ich nicht genau wie dieser zu benutzen ist.
nach hinzufügen von antlr im classpath kann ich java Calc aufrufen und ich bekomme eine Eingabemaske. Aber egal was ich eintippe, ich bekomme keine Ausgabe. Wie benutze ich Calc denn dann und gibt es die Möglichkeit etwas mit einer Textdatei einlesen und Calc speichert das Ergebnis auch in eine Textdatei? Wäre ja sinnvoll für die Aufgabe.
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!
-
- Endlosschleifenbastler
- Beiträge: 192
- Registriert: 10. Nov 2011 19:42
Re: 4. Aufgabenblatt
Ich habe in der aktuellen Version von Calc.tgz leider das Testprogramm vergessen was ich Ihnen mitliefern wollte.
Das Programm enthält nur diesen Code, ich werde das Archiv so schnell es geht aktualisieren.
Calc arbeitet im Moment mit stdin und stdout. Beachten Sie das in der Version die ich Ihnen geliefert habe der Interpreteraufruf auskommentiert ist.
Edit:
Das Archiv enhält jetzt auch das obige Programm.
Das Programm enthält nur diesen Code, ich werde das Archiv so schnell es geht aktualisieren.
Code: Alles auswählen
// ex1.calc -- valid Calc program
var n: integer;
var x: integer;
n := 2+4-1;
x := n+3+7;
print(x);
Edit:
Das Archiv enhält jetzt auch das obige Programm.
Zuletzt geändert von Jens Huthmann am 13. Feb 2013 17:16, insgesamt 1-mal geändert.
Re: 4. Aufgabenblatt
Ich verstehe aber weiterhin nicht wie ich den Code eingebe. Ich habe den Interpreter einkommentiert und den TriangleConverter auskommentiert. Eigentlich müsste dann ja was passieren, wenn ich den Code eingebe. Aber leider bekomme ich keinerlei Ausgabe auf der Console wenn ich Calc starte. Ich habe natürlich den Code mal eingegeben, aber das Programm wartet soweit ich es erkenne ja dass stdin beendet wird oder nicht? Aber wie soll das gehen?
Edit: Unter Unix beendet man die Eingabe mit ctrl + d (war mir neu
)
Edit: Unter Unix beendet man die Eingabe mit ctrl + d (war mir neu

Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!
Re: 4. Aufgabenblatt
Du solltest normalerweise auch via "program < datei" den Inhalt aus einer Datei via stdin an ein Program leiten können. Ist vllt. nützlich wenn du nicht immer alles zum Testen abtippen willstMartek hat geschrieben:Ich verstehe aber weiterhin nicht wie ich den Code eingebe. Ich habe den Interpreter einkommentiert und den TriangleConverter auskommentiert. Eigentlich müsste dann ja was passieren, wenn ich den Code eingebe. Aber leider bekomme ich keinerlei Ausgabe auf der Console wenn ich Calc starte. Ich habe natürlich den Code mal eingegeben, aber das Programm wartet soweit ich es erkenne ja dass stdin beendet wird oder nicht? Aber wie soll das gehen?
Edit: Unter Unix beendet man die Eingabe mit ctrl + d (war mir neu)

Compiler 1 Tutor WS 12/13
Re: 4. Aufgabenblatt
Zu spät, bin nun schon fertig mit der Aufgabe
Hat dann ja auch so funktioniert ^^ Aber gut zu wissen ja.

Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!
Re: 4. Aufgabenblatt
Noch eine Frage zu Aufgabe 1:
Wie genau sollen wir denn den Visitor imitieren?
Um keine Lösung der Aufgabe selbst zu nennen, hier mal ein eigenes Beispiel:
Möglichkeit a)
__________________________________________
execute[if n > 4 then putint(4) else putint(n)]
__________________________________________
evaluate [n > 4]
JUMPIF(0) Lelse
execute [C1]
JUMP Lfi
execute [C2]
Lelse: Lfi:
__________________________________________
evaluate [n]
evaluate [4]
CALL lt
JUMPIF(0) Lelse
execute [C1]
JUMP Lfi
execute [C2]
Lelse: Lfi:
_________________________________________
Und so weiter
Möglichkeit b)
__________________________________________
execute[if n > 4 then putint(4) else putint(n)]
__________________________________________
evaluate [n > 4]
...
__________________________________________
evaluate [n]
...
__________________________________________
fetch[n]
...
__________________________________________
LOAD n
...
__________________________________________
LOAD n
evaluate[4]
...
__________________________________________
Und so weiter.
Die "..." meine ich wirklich wortwörtlich, weil der Rest hier noch nicht erzeugt ist. Der Visitor würde ja eher wie in Beispiel b) vorgehen und jeden Visitor-Knoten weiter absteigen, bevor die restliche Schablone benutzt wird. Durch den Rekursiven Abstieg im Baum wird jede Erzeugung intern ja unterbrochen wenn ein aufzulösender neuer Knoten gefunden wird.
Übersichtlicher und intuitiver zu verstehen als Mensch ist aber Lösung a) mMn.
Wie genau sollen wir denn den Visitor imitieren?
Um keine Lösung der Aufgabe selbst zu nennen, hier mal ein eigenes Beispiel:
Möglichkeit a)
__________________________________________
execute[if n > 4 then putint(4) else putint(n)]
__________________________________________
evaluate [n > 4]
JUMPIF(0) Lelse
execute [C1]
JUMP Lfi
execute [C2]
Lelse: Lfi:
__________________________________________
evaluate [n]
evaluate [4]
CALL lt
JUMPIF(0) Lelse
execute [C1]
JUMP Lfi
execute [C2]
Lelse: Lfi:
_________________________________________
Und so weiter
Möglichkeit b)
__________________________________________
execute[if n > 4 then putint(4) else putint(n)]
__________________________________________
evaluate [n > 4]
...
__________________________________________
evaluate [n]
...
__________________________________________
fetch[n]
...
__________________________________________
LOAD n
...
__________________________________________
LOAD n
evaluate[4]
...
__________________________________________
Und so weiter.
Die "..." meine ich wirklich wortwörtlich, weil der Rest hier noch nicht erzeugt ist. Der Visitor würde ja eher wie in Beispiel b) vorgehen und jeden Visitor-Knoten weiter absteigen, bevor die restliche Schablone benutzt wird. Durch den Rekursiven Abstieg im Baum wird jede Erzeugung intern ja unterbrochen wenn ein aufzulösender neuer Knoten gefunden wird.
Übersichtlicher und intuitiver zu verstehen als Mensch ist aber Lösung a) mMn.
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!
Re: 4. Aufgabenblatt
Hier sollen eigentlich die Codeschablonen so angewendet werden, wie sie in der Vorlesung vorgestellt wurden. Das sollte wie dein erster Vorschlag aussehen (genau geprüft habe ich es jetzt nicht), nur dass halt C1 etc. ersetzt werden müssen.Martek hat geschrieben:Noch eine Frage zu Aufgabe 1:
Wie genau sollen wir denn den Visitor imitieren?
Um keine Lösung der Aufgabe selbst zu nennen, hier mal ein eigenes Beispiel:
Möglichkeit a)
__________________________________________
execute[if n > 4 then putint(4) else putint(n)]
__________________________________________
evaluate [n > 4]
JUMPIF(0) Lelse
execute [C1]
JUMP Lfi
execute [C2]
Lelse: Lfi:
__________________________________________
evaluate [n]
evaluate [4]
CALL lt
JUMPIF(0) Lelse
execute [C1]
JUMP Lfi
execute [C2]
Lelse: Lfi:
_________________________________________
Und so weiter
Möglichkeit b)
__________________________________________
execute[if n > 4 then putint(4) else putint(n)]
__________________________________________
evaluate [n > 4]
...
__________________________________________
evaluate [n]
...
__________________________________________
fetch[n]
...
__________________________________________
LOAD n
...
__________________________________________
LOAD n
evaluate[4]
...
__________________________________________
Und so weiter.
Die "..." meine ich wirklich wortwörtlich, weil der Rest hier noch nicht erzeugt ist. Der Visitor würde ja eher wie in Beispiel b) vorgehen und jeden Visitor-Knoten weiter absteigen, bevor die restliche Schablone benutzt wird. Durch den Rekursiven Abstieg im Baum wird jede Erzeugung intern ja unterbrochen wenn ein aufzulösender neuer Knoten gefunden wird.
Übersichtlicher und intuitiver zu verstehen als Mensch ist aber Lösung a) mMn.
Compiler 1 Tutor WS 12/13
Re: 4. Aufgabenblatt
Das tue ich ja in beiden Versionen, nur schreibt Version 1 erst die Code-Schablone komplett hin und wertet dann den nächsten Ausdruck aus und Version 2 schreibt alles hin, bis ein Ausdruck auftaucht der rekursiv ausgewertet werden muss.
Aber das mit C1 habe ich nur vergessen hier zu ersetzen, das sollte natürlich putint(4) bzw putint(n) sein.
Aber das mit C1 habe ich nur vergessen hier zu ersetzen, das sollte natürlich putint(4) bzw putint(n) sein.
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!
Re: 4. Aufgabenblatt
Die Codeschablonen sind eher die Idee hinter der Methode, von daher sollen sie komplett "expandiert" werden.Martek hat geschrieben:Das tue ich ja in beiden Versionen, nur schreibt Version 1 erst die Code-Schablone komplett hin und wertet dann den nächsten Ausdruck aus und Version 2 schreibt alles hin, bis ein Ausdruck auftaucht der rekursiv ausgewertet werden muss.
Compiler 1 Tutor WS 12/13
-
- Windoof-User
- Beiträge: 24
- Registriert: 30. Apr 2011 17:44
Re: 4. Aufgabenblatt
Ist es eigentlich auch erlaubt für die letzte Aufgabe ANTLR 4 zu benutzen?
-
- Endlosschleifenbastler
- Beiträge: 192
- Registriert: 10. Nov 2011 19:42
Re: 4. Aufgabenblatt
Verwenden Sie bitte die vorgegebene ANTLR Version. Sie können aber wenn Sie das möchten es noch zusätzlich mit ANTLR4 machenStudyForFun hat geschrieben:Ist es eigentlich auch erlaubt für die letzte Aufgabe ANTLR 4 zu benutzen?

-
- Windoof-User
- Beiträge: 24
- Registriert: 30. Apr 2011 17:44
Re: 4. Aufgabenblatt
Reicht es in der letzten Aufgabe den Assemblercode auf der Konsole auszugeben oder muss der Code automatisch assembliert und ausgeführt werden?
-
- Endlosschleifenbastler
- Beiträge: 192
- Registriert: 10. Nov 2011 19:42
Re: 4. Aufgabenblatt
Auf der Konsole ausgeben, das kann man dann mit dem Umleitungsoperator > in eine Datei ausgeben.