4. Aufgabenblatt

Martek
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 28. Sep 2009 15:48
Wohnort: Darmstadt
Kontaktdaten:

4. Aufgabenblatt

Beitrag von Martek » 13. Feb 2013 15:41

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?
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 4. Aufgabenblatt

Beitrag von LordHoto » 13. Feb 2013 16:13

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?
Calc.tokens sollte dir erstellt werden, wenn du ANTLR mit Calc.g als Parameter ausführst.

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

Martek
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 28. Sep 2009 15:48
Wohnort: Darmstadt
Kontaktdaten:

Re: 4. Aufgabenblatt

Beitrag von Martek » 13. Feb 2013 16:39

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.
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

Re: 4. Aufgabenblatt

Beitrag von Jens Huthmann » 13. Feb 2013 16:55

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.

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);
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.
Zuletzt geändert von Jens Huthmann am 13. Feb 2013 17:16, insgesamt 1-mal geändert.

Martek
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 28. Sep 2009 15:48
Wohnort: Darmstadt
Kontaktdaten:

Re: 4. Aufgabenblatt

Beitrag von Martek » 13. Feb 2013 17:06

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 ;))
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 4. Aufgabenblatt

Beitrag von LordHoto » 13. Feb 2013 17:17

Martek 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 ;))
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 willst ;-)
Compiler 1 Tutor WS 12/13

Martek
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 28. Sep 2009 15:48
Wohnort: Darmstadt
Kontaktdaten:

Re: 4. Aufgabenblatt

Beitrag von Martek » 13. Feb 2013 19:20

Zu spät, bin nun schon fertig mit der Aufgabe :P 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!

Martek
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 28. Sep 2009 15:48
Wohnort: Darmstadt
Kontaktdaten:

Re: 4. Aufgabenblatt

Beitrag von Martek » 13. Feb 2013 21:02

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.
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 4. Aufgabenblatt

Beitrag von LordHoto » 13. Feb 2013 22:49

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.
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.
Compiler 1 Tutor WS 12/13

Martek
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 28. Sep 2009 15:48
Wohnort: Darmstadt
Kontaktdaten:

Re: 4. Aufgabenblatt

Beitrag von Martek » 14. Feb 2013 01:08

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.
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 4. Aufgabenblatt

Beitrag von LordHoto » 14. Feb 2013 12:36

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.
Die Codeschablonen sind eher die Idee hinter der Methode, von daher sollen sie komplett "expandiert" werden.
Compiler 1 Tutor WS 12/13

StudyForFun
Windoof-User
Windoof-User
Beiträge: 24
Registriert: 30. Apr 2011 17:44

Re: 4. Aufgabenblatt

Beitrag von StudyForFun » 26. Feb 2013 00:28

Ist es eigentlich auch erlaubt für die letzte Aufgabe ANTLR 4 zu benutzen?

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

Re: 4. Aufgabenblatt

Beitrag von Jens Huthmann » 26. Feb 2013 12:03

StudyForFun hat geschrieben:Ist es eigentlich auch erlaubt für die letzte Aufgabe ANTLR 4 zu benutzen?
Verwenden Sie bitte die vorgegebene ANTLR Version. Sie können aber wenn Sie das möchten es noch zusätzlich mit ANTLR4 machen :wink:

StudyForFun
Windoof-User
Windoof-User
Beiträge: 24
Registriert: 30. Apr 2011 17:44

Re: 4. Aufgabenblatt

Beitrag von StudyForFun » 27. Feb 2013 00:57

Reicht es in der letzten Aufgabe den Assemblercode auf der Konsole auszugeben oder muss der Code automatisch assembliert und ausgeführt werden?

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

Re: 4. Aufgabenblatt

Beitrag von Jens Huthmann » 27. Feb 2013 11:48

Auf der Konsole ausgeben, das kann man dann mit dem Umleitungsoperator > in eine Datei ausgeben.

Antworten

Zurück zu „Archiv“