Entwicklung & Design

Entwickeln domänenspezifischer Sprachen mit Ruby: Auf dem Weg zur nächsten Programmiersprache

Seite 2 / 5

Was ist nun der Unterschied zwischen externen domänenspezifischen Sprachen und vollwertigen Programmiersprachen (GPL)? Er besteht darin, dass eine GPL mit dem Ziel entworfen wurde, möglichst alle Probleme in den unterschiedlichsten Domänen zu lösen, während der Einsatzbereich von einer externen DSL auf eine Domäne beschränkt ist.

Grammatik, wie in der Schule?

Das wichtigste Werkzeug beim kreativen Prozess der Sprachentwicklung ist die Grammatik der jeweiligen Sprache. Grammatiken bilden dabei wie in der natürlichen Sprache den Regelsatz, nach dem Aussagen in der Sprache allgemein gültig formuliert werden.

In der Linguistik formulieren Grammatiken Ersetzungsregeln, die bestimmen, wie man von einem Ausgangspunkt zu einem Endpunkt kommt. Für den Sprachdesigner ist dabei das wichtigste Ziel, eine deterministische und finite Grammatik zu definieren.

Die Analyse der Eingabedaten beginnt mit der Zerlegung in die Grundbegriffe der Sprache, die Token, durch den Lexer. Übertragen auf die deutsche Sprache wäre dies die Zerlegung der ursprünglichen Zeichenkette (Beispiel: „Ich helfe dir.“) in die drei Grundelemente der Sprache, Subjekt, Prädikat und Objekt. Im nächsten Schritt werden mittels vordefinierter Regeln ( HS -> S P O ) die einzelnen Token (S, P, O) durch den Parser in ein Symbol (HS) ersetzt. Dies wird so lange fortgeführt, bis alle Token und Symbole durch Terminalsymbole – Symbole, für die keine weiteren Ersetzungsregeln definiert sind – ersetzt wurden.

Ein Rechenbeispiel

Das folgende Beispiel zeigt, trotz seines geringen Umfangs, die Möglichkeiten einer externen Sprache auf und stellt außerdem dar, wie einfach es ist, eine solche Sprache in Ruby mit Hilfe des Dhaka-Projekts [1] zu implementieren. Dhaka ist ein in Ruby geschriebener Parsergenerator zur einfachen Implementierung einer externen DSL. Dabei greift der Generator dem Entwickler hilfreich unter die Arme und bietet dennoch die von Ruby gewöhnte Flexibilität. Zielsetzung ist es, eine DSL zu erstellen, die einen in Präfixnotation eingegebenen String in das für Ruby verständliche Infixformat umwandelt, dieses evaluiert und das Ergebnis der Operation zurückgibt.

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Schreib den ersten Kommentar!

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.