BlueBasic Compiler
Worklogs
BlueBasic Compiler
Kommentare
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.
Zitat:
deklariert.
BB ist insgesamt eher an Anfänger gerichtet, daher wollte Mark vermutlich auf eine am Anfang verwirrende zwingende Deklaration verzichten. "Man braucht eine Variable? Einfach benutzen und gut ist!" war vermutlich seine Idee
Zitat:
Natürlich wird BB kompiliert! Einfach direkt nach ASM und nicht über C.
Zitat:
was einem in den Weg kommt.
Eigentlich ist eher das Gegenteil der Fall. Wenn man strikt deklarieren muss, dann muss der Compiler nur nach Local oder Global mit neuen Variablen rechnen. Trifft er irgendwo auf einen Bezeichner, den er nicht kennt, ist nur ein Fehler auszugeben und abzubrechen. Bei der Autodeklaration hingegen muss er bei jedem Bezeichner, der angetroffen wird, prüfen, ob dieser schon existiert, und ihn zu den existierenden Variablen hinzufügen, wenn er das nicht tut. Das ist einer der Gründe, warum BB mühsam zu parsen ist - ständig muss man mit neuen Variablen rechnen.
Abgesehen davon darf man nicht davon ausgehen, dass die Syntax einer Sprache nach dem Kriterium "möglichst einfach zu kompilieren" entwickelt wird. Man hat hier nicht mit einem Hobby-Entwickler zu tun, der komplizierte Features nicht in seine Sprache implementiert, weil er zu faul ist, komplizierteren Code zu parsen, sondern mit jemandem, der über ein Jahr oder länger die Sprache entwickelt, um am Ende damit seinen Lebensunterhalt zu verdienen
Weil ich C++ nur "flüchtig" kann(also über bestimmte C++-typische Konstrukte wenig bis nichts weiß) und nach C kompilieren sowieso schon ineffizient genug ist.
Ich habe zwar ein C/C++ Kompendium, aber den C++ Teil nur überflogen, da mich die OOP nicht sonderlich interessiert.
Allerdings finde ich, dass der Umstieg auf C gut ist, da alles plattformunabhängig ist und gcc auf jeder Linux-Distribution die ich kenne vorinstalliert ist - man müsste also nicht g++ runterladen.
Wegen den "optionalen Parametern" (Default-Parameter): Warum steigst du nicht einfach auf C++ um?
Vielen Dank!
Ist jetzt auf der gedanklichen ToDo-List ganz oben. Werde es wahrscheinlich morgen umsetzen (kommt darauf an, wieviele Komplikationen es noch geben wird).
mfg Thunder

