home
projects
    http://rubinghsoftware.de/projects/dako_script/
 


Projekt
Entwicklung Parser und Interpreter für eine neue Script-Sprache
Für
DAKO GmbH, Jena
Datum
2 Monate in 2009-2010
Platforms
C++, MS Visual C++, Windows PC


Page contents
Kurzbeschreibung
Ziel und features
Implementierungsweise
Documentation sample

Kurzbeschreibung

Entwicklung Parser und Interpreter für eine neue, BASIC-ähnliche Script-Sprache, mit Funktionen und lokalen Variablen. 

Ziel und features

Einsatzgebiet war die von der Firma für seine Kunden (Hersteller von mechanischen Bauteilen) erstellten Kataloge.  Die Scripts wurden verwendet dazu, es dem Bauteile-Hersteller zu ermöglichen, die Konfiguration seiner Kataloge selbst zu programmieren. 
    Vorgabe war, dass die Scriptsprache sehr einfach sein sollte und verwendbar durch Leute die nicht viel Programmiererfahrung haben.  Die features und Syntax der Scriptsprache würde festgelegt von einem Team bestehend aus 2 Mitarbeitern der DAKO CAD- und Kataloge-Abteilung und mir.  (Sich zu einigen über den Syntax hat fast mehr Zeit gekostet als die gesamte Implementierung!:-)

Die Script-Sprache umfasste Funktionen und lokale Variablen. 
    Aus meiner vorherigen Erfahrung mit der Programmiersprache BASIC, wurde meine Empfehlung übernommen, dass Variablen vor ihrer Verwendung deklariert werden müssen.  Vorteil hiervon ist, dass Tippfehler in Variablen-Namen vom Parser detektiert werden (anstatt dass, wie in BASIC, für eine falschgeschriebene Variable ohne Warnung eine neue Variable erzeugt wird). 

Implementierungsweise

Als erster Schritt habe ich den Syntax der Sprache exact festgelegt und dokumentiert (siehe unten), denn dies ist Voraussetzung dafür, die Implementierung zu ermöglichen.  Danach habe ich einen "top down" predictive Parser und einen Interpreter für diese Sprache handkodiert. 
    Parser und Interpreter wurden implementiert als strikt getrennte Teile.  Beide wurden als Software-libraries verwendet in der Katalog-Software.  Parser und Interpreter wurden durch C++ "interfaces" (pure virtual classes) vom client code abgeschottet, um vorzubeugen dass der client code zugreift auf Interna der library. 

Documentation sample

Hier ist die Beschreibung der Syntax der Scriptsprache.