Programmierkonzept für eigene mini Scriptsprache
-
Hallo,
ich habe vor eine eigene mini Scriptsprache zu schreiben, um bestimmte Programmabläufe (eines beliebigen übergeordneten Programmes) gut in einem Konfigurationsfile beschreiben zu können.
Ich habe zwar schgon diverse Ideen und kleine Implementationen ausprobiert, wollte mir aber gerne an dieser Stelle noch einmal gerne Rat holen. Es wäre doch sehr unschön, wenn ich in der Mitte des programmiens bemerkte, das ich vom Ansatz her schon etwas falsch genacht habe.
Ich erwarte jetzt keine ausgiebigen Klassenmodelle und Programmablaufpläne (auch wennich natürlich nix dagegen einzuwenden hätte..
)), eher grundlegende Tips, wie so etwas anzugehen ist.Die Sprache selber soll nicht fürchterlich komplex werden. Zur Übersicht einmal die Anforderungen, welche ich mir bis jetzt ausgedacht habe. Es geht hauptsächlich darum Stringoperationen in ein Konfigfile auslagern zu können. Variablen sind z.Zt. nicht angedacht, und müssen eigentlich auch nicht unterstützt werden.
Befehle:
if([Ausdruck]){} else{} else if([Ausdruck]){} for (int ; [Ausdruck]; [Operator]){} // erstmal nicht so wichtig while ([Ausdruck]){} // erstmal nicht so wichtig row{} // Gibt eine Zeile aus endOperatoren:
== != < <= > >= || + ++ - --Funktionen:
bool SubString(Sring, von, bis) bool SubString(Sring, von) int Pos(Sring, Key) int Length(String) bool Contains(String, Key) String SubString-Before(String, Key) String SubString-After(String, Key) bool Starts-With(Sring, Key) bool Ends-With(String, Key) bool IsString(String) bool IsInt(int) bool AsString(int) bool AsInt(String)Für Anregungen und Tips fürs Programmdesign wäre ich sehr dankbar!

-
schau mal unter http://www.gnu.org/software/bison/bson.html
Bison nimmt die spezifikation einer Grammatik als eingabe und erzeugt daraus C-quelltext für einen geeigneten parser
(hab ich noch nicht selbst ausprobiert)
Ich wäre an deinen Erfahrungen mal interessiert, da ich in absehbarer zeit ähnliches vor mir hab.
-
Wenn Du wirklich den Weg über eine Grammatik und PArsergeneratoren gehen willst, würde ich empfehlen auch mal einen Blick auf ANTLR zu werfen, das ist ein Generator (in Java geschrieben, aber das ist ja irrelevant, nur ein Kommandozeilentool), der auch Code für C++ (und Java, C# und nochwas) erzeugen kann, man kann damit Lexer, Parser und Treeparser erzeugen lassen und er wuppt auch komplexere Grammatiken klaglos. Zudem ist die Mailingliste dazu ist hilfsbereit und recht aktiv.
Ich habe selber schon eine Sprache damit implementiert und bin zufrieden mit dem Handling. Habe auch schon mit Bison und boost::Spirit++ gearbeitet, das normale Bison erzeugt halt nur C-Code und man muß einiges beachten, die C++-Varianten haben mich noch nicht so überzeugt. Spirit++ ist sicher eine coole Idee, und spannend im Einsatz, aber leider erwächst ein nicht unerheblicher Teil der Spannung aus der Tatsache, das es je nach Compiler sofort oder ab einer gewissen Komplexität Probleme macht.
Wie man von da weitergeht ist dann eine andere Frage, der Weg über Grammatiken ist sicher für den ungeübten am Anfang etwas abstrakt. Wenn man noch keine Formale-Sprachen-Vorlesung hatte und auch keine Bücher aus der Compilerbau-Ecke gelesen hat, muß man sicher ein wenig mehr investieren um ans Ziel zu kommen.
Dann stellt sich die Frage was danach passieren soll, direkt beim Parsen ausführen, oder einen Syntaxbaum erzeugen und den "ausführen" oder gar eine eigene Zwischendarstellung erzeugen und ausführen... das ist ohne nähere Kenntnisse der Anforderungen schwer zu sagen. Spielt Performance eine Rolle oder geht Einfachheit vor? Letztlich ist alles Abwägungssache.

-
*Hutzli merk* ich werd dich mal nerven und auf deine Erfahrungen in dem Bereich ansprechen wenn ich soweit bin, tatsächlich die Sprache implementieren zu dürfen (wird n "etwas" größeres Projekt sein fürchte ich)