Im Rahmen meiner Studienarbeit entwickle ich einen Interpreter für eine Javascript-ähnliche Sprache, zusammen mit einem kleinen Editor für den ATMega644. Das (vorläufige) Ergebnis stelle ich jetzt allen Interessierten als Open Source-Projekt zur Verfügung. Aktuell fehlt leider noch einiges an Dokumentation (insbesondere was die interpretierte Sprache und die von mir verwendete ATMega-Platine angeht), und man kann sicher noch viel verbessern, aber es sollte reichen um einen ersten Eindruck zu bekommen. Features: - Geringer RAM-Bedarf Der Interpreter arbeitet aus C-Sicht ohne Rekursion, so dass der Speicherbedarf für den C-Stack beschränkt bleibt. Der interpretierte Programmcode kann in kleinen Blöcken von einem externen Speichermechanismus bereitgestellt werden. - Einfach portierbar Der Kern des Interpreters ist in plattformunabhängigem C geschrieben. - Einfach erweiterbar Zusätzliche Funktionen lassen sich ohne großen Aufwand in die Sprache integrieren. - "Moderne" Sprachsyntax Funktionen mit lokalen Variablen, for-, while- und do- Schleifen, if-else-Bedingungen und Ausdrücke ähnlich wie man sie aus C oder Javascript gewohnt ist. Der ATMega-spezifische Texteditor erlaubt Speichern und Laden von einem Programm ins/vom EEPROM, und benutzt PS/2-Tastatur zur Eingabe und VGA zur Bildschirmausgabe. Diese beiden Module bauen auf Vorarbeiten aus dem Seminar Einchipcomputer sowie der Vorlesung Technische Informatik C von Dr. Merten Joost auf. Aktuell ist das Projekt noch nicht sehr benutzerfreundlich und vermutlich nur für erfahrenere Entwickler von Interesse. Verbesserungsvorschläge - besonders in Form von Feature-Branches - sind sehr willkommen. Projekt-URL: https://launchpad.net/femto
hab mir das projekt mal angeschaut. respekt. sieht echt gut aus :-) so einen interpreter wollt ich mir immer schonmal selbst zusammengeklöppelt haben. na ja. vllt gibt mein parser das ja demnächst auch her ^^. jedenfalls verlier ich solangsam die scheu davor auf einem großen avr auch mal nen malloc zu verwenden :-) aber eine frage hab ich mal zum code. ich habe an einer stelle gesehen das du sowas machst : while (funca (), func b ()) { ... } ich verstehe nicht ganz was der compiler daraus machen soll bzw was das genau ist. ich kenne nur "while (cond) { ... }", aber "while (cond1, cond2) { ... }". ist das eine "spezialität" von C99 ?! wie würde sich die zweite condition auf das while auswirken ? wird das ergebnis ver-odert ?
Der Kommaoperator führ erst das vor dem Komma aus, ein evtl. Ergebnis (hier: Rückgabewert) wird wegegworfen, dann wird das nach dem Komma ausgeführt und dessen Ergebnis wird zum Ergebnis des ganze Ausdrucks. Also entspricht:
1 | irgendwas = funca(), funcb(); |
dem Folgenden:
1 | funca(); |
2 | irgendwas = funcb(); |
Nur halt formal in einer Anweisung, daher auch als while-Bedingung geeignet.
PS: Mehrere Parameter beim Funktionsaufruf haben nichts mit dem Kommaoperator zu tun. Es sieht nur zufällig genauso aus.
>PS: Mehrere Parameter beim Funktionsaufruf haben nichts mit >dem Kommaoperator zu tun. das ist mir schon klar. da bezieht sich das komma ja auf den funktionsaufruf selbst (also die übergebenen parameter). ich wusste nur nicht wie sich das mit dem : irgendwas = funca(), funcb(); -> funca(); irgendwas = funcb(); verhält. und wieder was dazugelernt :-) danke.
Hallo nochmal. Inzwischen ist einiges an Zeit vergangen, und seit einer ganzen Weile ist auch die Studienarbeit (und damit die Dokumentation) fertig. Leider kümmere ich mich erst jetzt darum, das auch mal auf der Projektseite (https://launchpad.net/femto) und auch hier kund zu tun. Am Interpreter hat sich seit dem Original-Post noch einiges verbessert. Jetzt ist es z.B. auch zulässig, Variablen sofort bei der Deklaration einen Wert zuzuweisen. Außerdem gibt es jetzt Zeilenkommentare (//), und das Verbot von geschweiften Klammern in Stringliteralen wurde entfernt (die Funktionen zum Erkennen von Blockgrenzen sind jetzt etwas intelligenter.) Viel Spaß beim Experimentieren damit. Ich würde mich freuen, von Euren Erfahrungen zu hören.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.