[Lambda] ist der [Parser|http://de.wikipedia.org/wiki/Parser]-Generator der [Intersult]. !!!Anwendung Einige Anwendungen können nicht in Java oder XML geschrieben werden, es wäre geschickter wenn man eine eigene Sprache hätte. [Lambda] vereinfacht die Implementierung einer Sprache extrem, zu wenigen Zeilen Code. Der Parser enthält bereits eine Reihe von Parsern für bestimmte Ausdrücke, die durch eine Metasprache angewendet werden können. !!!Metasprache Diese Metasprache (auch Parser-Parser) ist eine Sprache zur Erzeugung von Sprachen und an die [Backus-Naur-Form|http://de.wikipedia.org/wiki/Backus-Naur-Form] angelehnt. Die grundlegenden Elemente sind: ||Symbol||Parser||Beschreibung |"|quote-literal|Ein String (auch Literal) kann von zwei Quotes '"' (Anrührungsstrichen) umschlossen sein. |'|apos-literal|Ein String kann von zwei Apos "'" (Apostrophenzeichen) umschlossen sein. |~| |__choice-expression:__ Definiert eine Entscheidung dass entweder der linke oder der rechte Teil neben dem Symbol verwendet werden darf. |+|__sequence-expression:__ Legt fest, dass zuerst der linke Teil und dann der rechte Teil neben dem Symbol kommen muss. |#|__delimiter-repetition-parser:__ Drückt aus dass der linke Teil beliebig oft wiederholt werden darf, wenn sich zwischen den Wiederholungen jeweils der rechte Teil befindet. |!|__simple-repetition-parser:__ Drückt aus, dass der linke Teil beliebig oft wiederholt werden darf. |.|__terminal-parser-expression:__ Zeigt an, dass der linke Teil am Ende der Eingabe stehen muss. |;|__parser-set:__ Trennt zwei Parser-Definitionen voneinander ab. |:=|__parser-definition:__ Ordnet dem linken Teil "Parsernamen" die Definition auf der rechten Seite zu. !!!Beispiel {{{ Parsers parsers = Parsers.getGlobal().clone(); parsers.create("test := operation-low + eof;"); parsers.create("bracket-expression := '(' + operation-low + ')';"); parsers.create("operand-high := symbol | bracket-expression;");"); parsers.create("operation-high := operand-high #1 ('*'| '/');"); parsers.create("operand-low := operation-high | symbol;"); parsers.create("operation-low := operand-low #1 ('+' | '-')");)"; }}} !!!Parser-Klassen Parser können nicht nur über die Metasprache, sondern auch über Java-Klassen erzeugt werden. In der Praxis braucht man das nur, falls die Metasprache erweitert werden soll. {{{ new ChoiceParser(parsers, "sequence-element", "repetition-parser", "sequence-expression", "parser-element"); }}}