BlueBasic Compiler
Gehe zu Seite 1, 2, 3, 4 Weiter
Worklogs

Danke! Ich schreibe BlueBasic auch hauptsächlich, weil ich am Compilerbau Interesse habe. Der spätere Zweck wäre natürlich super, aber ich habe das Gefühl, dass ich noch eine ganze Weile vor einem unfertigen Programm sitzen werde ^^
ich find das projekt sehr intressant. compilerbau hat mich immer schon interessiert. viel erfolg!
Bezüglich Int habe ich ja nichts anderes behauptet, aber das mit Long ist natürlich ärgerlich. Irgendwie bin ich davon ausgegangen, es sei unsigned. Wird gleich sowohl im Quelltext als auch im Worklog ausgebessert.
Danke dir!
Nur zur Info: Int und Long sind in BMax signed, nur Byte und Short sind unsigned.
Könnte ansonsten zu Problemen führen.
Muss sagen, das Projekt klingt sehr intressant. Zum Mitarbeiten fehlt mir im Moment wohl leider die Zeit, aber verwenden würde ich das Fertige schon gerne.
@Silver_knee: Das ginge aber nicht, wenn die Kommentarzeichen (egal ob ; oder ') vor dem kompilieren entfernt würden. Dann würde es die gar nicht im Code geben und daher kam diese Umstellung auf Entfernung der Kommentarzeichen zur Kompilierzeit.
Der Präprozessor kann nämlich nicht wirklich unterscheiden, ob da jetzt das InlineC 1. an einer richtigen Stelle steht und nicht zu einem Syntaxerror führt, 2. ob es in einem String steht ...
Es ist viel komplizierter das alles zu berücksichtigen, als einfach die Entfernung dem Compiler selbst zu überlassen, wobei Compiler und Präprozessor eigentlich ein Programm sind (bei BlueBasic).
mfg Thunder
na ganz einfach:
Code: [AUSKLAPPEN]
printf("x=y+1 und y=x-1\n");
EndInlineC
ab dem Wort InlineC wird alles 1:1 in den C-Code übertragen bis zu der Zeichenfolge "EndInlineC"
brrr... das mit den Strings habe ich bedacht. Damit gibt es keine Probleme, aber für den Tipp ganz unten bin ich dir sehr dankbar. Das wäre mir wahrscheinlich erst einige Zeit später aufgefallen.
Mein Compiler ist allerdings anders aufgebaut und lässt es zwar eigentlich zu, Kommentarzeichen zur Laufzeit zu entfernen, aber ich habe mich dazu entschieden das in den Präprozessor zu packen.
Bei mir werden die Tokens zur Laufzeit eingelesen - kein Syntaxbaum oder Ähnliches.
Mal sehen, wie ich diese Probleme mit den Kommentarzeichen behebe.
mfg Thunder
Zitat:
Compiler bekäme ihn gar nicht zu Gesicht.
Ein Kontextunabhängiger Präprozessor ist aber gefährlich

Wegen solchen Problemen sollte der Präprozessor eigentlich nicht auf dem Quelltext als String arbeiten, sondern während der Konvertierung zu Tokens seine Arbeit tun. Dabei liest er den Quelltext Zeichen für Zeichen ein und setzt diese zu Token zusammen. Trifft er während diesem Schritt auf ein Anführungszeichen, liest er alles überprüfungsfrei ein bis zum nächsten Anführungszeichen. Trifft er auf ein InlineC, liest er alles überprüfungsfrei ein bis zum nächsten EndInlineC. Treffen die vorherigen Bedingungen nicht ein und trifft er dann noch auf ein ;, dann überspringt er alles nachfolgende bis zum nächsten Zeilenvorschub. So kannst du das Kommentarzeichen problemlos beim ; belassen.
Und nur so als Tipp: ' ist ebenfalls ein Sprachbestandteil von C. Bei folgender Zeile würde dir der Compiler also um die Ohren fliegen [code]printf( "Hello %corld!", 'W' );[code]
ich muss anscheinend einsehen, dass BB kompiliert wird.
Allerdings; wenn man den Compiler so aufbaut, wie ich das getan habe, bin ich mir ziemlich sicher, dass es einfach gewesen wäre, alles zu deklarieren. Überprüfen, ob es die Variable schon gibt, muss ich so und so, damit der Benutzer nicht vor irgendeiner Fehlermeldung des gcc sitzt, die er möglicherweise gar nicht versteht.
Ich hab es mir auch nie einfach vorgestellt BASIC zu kompilieren; ich habe schon davor oft gehört, dass das ein weitverbreiteter Irrtum ist.
Bevor ichs vergesse: komplizierten Code parsen IST mit komplizierten Komplikationen verbunden.
Aber wie gesagt, gebe ich mein Bestes.
Trotzdem danke, wegen der Klarstellung in Sachen BB und Kompilation.
Gehe zu Seite 1, 2, 3, 4 Weiter