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
flashpixx Geschrieben 21. Februar 2010 Geschrieben 21. Februar 2010 Ich verweise auf "indexOf" der String-Klasse String (Java 2 Platform SE v1.4.2)
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 .....
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.
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
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
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?
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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden