| Autor |
Nachricht |
|
| Simson |
Verfasst am: 15 Dez 2010 22:51 |
|
|
|
Anmeldungsdatum: 23.10.2007
Beiträge: 55
|
Hey,
Ich hab den Interpreter mit JUnit mittlerweile anschmeißen können. Allerdings schmeißt er mir immer nur Fehler der Form "Unknown proc label xxx".
Das kommt auch wenn ich die Programme von hier parse und den Interpreter damit fütterere.
z.B.: Code: piglet.test.interpreter.EvalRuntimeError: Unknown proc label MT4_Change
Was könnte ich falsch machen? |
|
|
| Nach oben |
|
| konrada |
Verfasst am: 16 Dez 2010 10:07 |
|
|
|
Anmeldungsdatum: 19.10.2009
Beiträge: 160
Wohnort: Freiburg
|
Ich seh grad, in template 4.1 wird der ProcDefinitionCollector nicht benutzt. Bis 4.2 draussen ist, empfehle ich, in PigletInterpreter.java, Methode run, folgendes zu aendern:
Code:
Evaluator ev = new Evaluator(cpc);
EvalContextImpl ec = new EvalContextImpl();
try {
// EINFUEGEN ANFANG
ProcDefinitionCollector pdc = new ProcDefinitionCollector(ec);
prog.apply(pdc);
// EINFUEGEN ENDE
prog.apply(ev, ec);
}
Gehts dann? |
|
|
| Nach oben |
|
| Simson |
Verfasst am: 16 Dez 2010 12:08 |
|
|
|
Anmeldungsdatum: 23.10.2007
Beiträge: 55
|
|
| Nach oben |
|
| Simson |
Verfasst am: 04 Jan 2011 16:11 |
|
|
|
Anmeldungsdatum: 23.10.2007
Beiträge: 55
|
Der Interpreter funktioniert mit JUnit mittlerweile wunderbar. Aber bevor ich mich jetzt totsuche: Wie bekomme ich den Interpreter "einfach so" zum laufen? Also ich möchte ihm einfach ein piglet-Program geben und er schreibt mir die Ausgabe auf die Konsole oder in eine Datei. Sowas:
Code: PrintWriter pw = new PrintWriter("output.txt");
WriterPrintChannel wpc = new WriterPrintChannel(pw);
Evaluator e = new Evaluator(wpc);
PigletInterpreter.run(pProgram, wpc, pw); ist ja irgendwie nicht so sinnig (und funktioniert auch nicht =).
Code: PrintWriter pw = new PrintWriter("output.txt");
WriterPrintChannel wpc = new WriterPrintChannel(pw);
Evaluator e = new Evaluator(wpc);
pProgram.apply(e); geht auch nicht...
Ich bin mir sicher, es ist ganz einfach  |
|
|
| Nach oben |
|
| konrada |
Verfasst am: 04 Jan 2011 19:43 |
|
|
|
Anmeldungsdatum: 19.10.2009
Beiträge: 160
Wohnort: Freiburg
|
Beispielsweise auf der Kommandozeile:
Code:
java -cp /bla/blub/MiniJavaToSPiglet/bin piglet.test.PigletInterpreter /wuff/zack/Factorial.pg
Wenn Du was anderes brauchst, ist piglet.test.PigletInterpreter ein Einstieg. |
|
|
| Nach oben |
|
| Simon2 |
Verfasst am: 11 Jan 2011 2:02 |
|
|
|
Anmeldungsdatum: 07.01.2011
Beiträge: 11
|
Ich wollt mal gern wissen wie das ist, wenn der Interpreter mit nem StackOverflow aussteigt.
Ich habe das bei Euler.java (In meiner .tar im Testcase Thread) in der 3. Iteration, wo die Funktion mit 188 als Parameter aufgerufen wird (in der test_it() Funktion). Bei um die 100 läuft mein generierter piglet code mit dem Interpreter.
Das bescheuerte was ich nicht kapiere ist, dass es auch mit 188 funktioniert, wenn ich meine ca. 50 Testcases drin habe und der Euler irgendwann zwischendrin läuft. Packe ich nur die Euler.java in den "topiglet" Ordner, gibts den Overflow. Wieso hat das denn einen Einfluss auf den Interpreter, was vorher für ein Programm durchläuft?
Angenommen man kann jetzt aber effizienteren piglet Code generieren der im Interpreter in keinem Fall einen Stack Overflow verursacht, gäbs dann für mich Abzüge, weil mein Code zu Speicherhungrig ist?
Ich gehe mal nicht davon aus, dass ich einen Bug in der Übersetzung habe, wenn es für kleinere Werte läuft mit besagtem Programm. |
|
|
| Nach oben |
|
| konrada |
Verfasst am: 11 Jan 2011 10:11 |
|
|
|
Anmeldungsdatum: 19.10.2009
Beiträge: 160
Wohnort: Freiburg
|
Der Piglet-Interpreter macht fuer einen Piglet-Prozeduraufruf auch einen Java-Methodenaufruf; tiefe Rekursion in Piglet-Programmen frisst also auch Java-Speicher im Interpreter.
Man kann bei der JVM einstellen, wie viel Speicher sie max belegen soll. Fuer Eclipse muss man eh auf "gib ihm" stellen, davon profitieren dann wohl auch JUnit-Tests. Der Parameter fuer Stacksize ist laut http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/java.html "-Xss" Versuch doch mal
java -Xss4096k -cp undsoweiter |
|
|
| Nach oben |
|
| Simon2 |
Verfasst am: 11 Jan 2011 15:33 |
|
|
|
Anmeldungsdatum: 07.01.2011
Beiträge: 11
|
Alles Klar, mit größerem Stack läuft es dann tatsächlich.
Dann probier ich doch mal, noch das GameOfLife zum Laufen zu bekommen. |
|
|
| Nach oben |
|
|
|