Devilmarkus Geschrieben 21. Februar 2010 Geschrieben 21. Februar 2010 Hallo zusammen, Ich habe ein (kleineres) Problemchen: Ich möchte einen Compiler basteln, welcher mir zunächst in einer Schleife die einzelnen Zeilen die "remarked" Inhalte herausschneiden soll. Das Ganze soll ein Assembler werden. Das "Remark" Zeichen ist also in diesem Fall das Semikolon ; Nun versuche ich also, jede Zeile um den Text hinter diesem Semikolon herauszuschneiden. (Inkl. dem Semikolon natürlich) Mein "Versuch" scheitert leider noch: for (int p = 0; p < line; p++){ for (int i = 0; i < compiledLine[p].length(); i++){ if (compiledLine[p].charAt(i) == 0x03B){ compiledLine[p] = compiledLine[p].substring(compiledLine[p].length()-i,compiledLine[p].length()); break; } } } Was mache ich hier falsch? Beispiel: Dieses soll mein Assembler werden. Die gewünschte Ausgabe in den Compiler soll nun also wie folgt aussehen: ORG &4000 LD DE,&1111 LD DE,&1111 LD DE,&1111 LD DE,&0001 Zitieren
flashpixx Geschrieben 21. Februar 2010 Geschrieben 21. Februar 2010 Ich verweise auf "indexOf" der String-Klasse String (Java 2 Platform SE v1.4.2) Zitieren
Devilmarkus Geschrieben 21. Februar 2010 Autor Geschrieben 21. Februar 2010 Ja, Du hast Recht! Wieso habe ich nicht gleich dran gedacht? *andiestirnpatsch* So "zerstückel" ich nun meinen Code: for (int p = 0; p < line; p++) { compiledLine[p] = removeSpaces(compiledLine[p]); for (int i = 0; i < compiledLine[p].length(); i++) { if (compiledLine[p].charAt(i) == 0x03B) { compiledLine[p] = compiledLine[p].substring(0, compiledLine[p].indexOf(";")); break; } } } for (int p = 0; p < line; p++) { System.out.println("# " + compiledLine[p]); } (Der letzte Loop ist nur zum Test. Das muss noch gegen den eigentlichen Compiler getauscht werden) Ausgabe: # # # # # ORG &4000 # # LD DE,&1111 # LD DE,&1111 # LD DE,&1111 # LD DE,&0001 ..... Zitieren
flashpixx Geschrieben 21. Februar 2010 Geschrieben 21. Februar 2010 Denk mal über Deine For-Schleife mit charAt nach ! Returns the index within this string of the first occurrence of the specified character. If a character with value ch occurs in the character sequence represented by this String object, then the index of the first such occurrence is returned -- that is, the smallest value k such that: this.charAt(k) == ch is true. If no such character occurs in this string, then -1 is returned. Zitieren
Devilmarkus Geschrieben 21. Februar 2010 Autor Geschrieben 21. Februar 2010 (bearbeitet) Habe es nun so: for (int p = 0; p < line; p++) { compiledLine[p] = removeSpaces(compiledLine[p]); int check = compiledLine[p].indexOf(";"); if (check != -1) compiledLine[p] = compiledLine[p].substring(0, check); } Ergebnis: http://cpc-live.com/disass2.png Man kann hier nun im unteren Fenster sehen, welcher Code an den eigentlichen Kompiler gesendet wird. (Alle überflüssigen SPACE entfernt, ';' Remarks entfernt, Upper-Case usw...) Bearbeitet 21. Februar 2010 von Devilmarkus Zitieren
Devilmarkus Geschrieben 27. Februar 2010 Autor Geschrieben 27. Februar 2010 (bearbeitet) Dank schon so einiger Tips hier, habe ich nun meinen Z80 Assembler/Disassembler so gut wie fertig... Video: JavaCPC Assembler / Disassembler Test Wer hat Lust, meinen Code zu überschauen und eventuell zu optimieren? :old :cool: Bearbeitet 27. Februar 2010 von Devilmarkus Zitieren
perdian Geschrieben 1. März 2010 Geschrieben 1. März 2010 Wer hat Lust, meinen Code zu überschauen und eventuell zu optimieren?Wieviel bietest du denn als Stundensatz? Zitieren
Devilmarkus Geschrieben 1. März 2010 Autor Geschrieben 1. März 2010 Wieviel bietest du denn als Stundensatz? 500 Z80 Zyklen? (virtuelle) :floet: Nein, im Ernst, kann nichts bieten... Wenn, dann macht das jemand aus Spass an der Freude. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.