Forum: Projekte & Code Femto - Portabler Interpreter mit Programmierumgebung für ATMega(644)


von Simeon Maxein (Gast)


Lesenswert?

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

von Rene B. (themason) Benutzerseite


Lesenswert?

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 ?

von Klaus W. (mfgkw)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

PS: Mehrere Parameter beim Funktionsaufruf haben nichts mit
dem Kommaoperator zu tun.
Es sieht nur zufällig genauso aus.

von Rene B. (themason) Benutzerseite


Lesenswert?

>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.

von Simeon Maxein (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.