Gibt es eine Möglichkeit, dot-freie dsl in scala mit zwei Bezeichnern zwischen Variablen zu erstellen?

8

Gibt es eine Möglichkeit, eine DSL zu definieren, die das folgende Formular zulassen würde?

%Vor%

Zum Beispiel:

%Vor%

Ich weiß, wie man eine einfachere Form erstellt: 1 equals to (2) , aber ich möchte Klammern vermeiden. Gibt es einen Weg, es zu tun?

    
Rogach 08.05.2012, 18:45
quelle

3 Antworten

13

Sie können den Parser fragen:

%Vor%

Es gibt jedoch ein Problem: Dies funktioniert nur, solange variable2 ein Bezeichner ist (damit er als Methodenname verwendet werden kann). Mit

%Vor%

bereits der Parser schlägt fehl:

%Vor%

Klammern sind wirklich Ihr einziger Weg (*):

%Vor%

(*) es sei denn, Sie machen 2 zu einem Bezeichner, indem Sie ihn mit Backticks verwenden

%Vor%

... nein, vielleicht nicht.

    
Debilski 08.05.2012, 19:21
quelle
3

Soweit ich weiß, ist es im Moment unmöglich, es so zu implementieren, wie Sie es wollen (ich würde mich freuen, dass es sich als falsch erwiesen hat). Ich sah mich auch diesem Problem gegenüber, als ich mein kleines DSL für die Injektion erstellte. Aber ich habe erkannt, dass, selbst wenn Sie nicht 2 Variablen zwischen 2 Bezeichnern haben können, Sie immer noch drei Bezeichner zwischen ihnen haben können. Es sieht so aus:

%Vor%

ist das gleiche wie:

%Vor%

Damit konnte ich mir ein sehr schönes DSL vorstellen, das so aussieht:

%Vor%

In dieser Spezifikation finden Sie weitere Anwendungsbeispiele:

Zypern

Die Implementierung finden Sie hier:

Zypern

Ich habe die Klassen ByWord und IdentifiedWord als Methodenargumente verwendet. Zum Beispiel:

%Vor%

Dies lässt die Möglichkeit, dass Benutzer der Bibliothek ByWorld -Klasse erweitern und generell ihre eigenen ByWorld Implementierungen bereitstellen können. Wenn ich jetzt darüber nachdenke, finde ich es nicht sehr nett. Besser wäre es, Singelton-Objekte für die konstanten Wörter zu erstellen und dann ihren Typ wie folgt zu verwenden:

%Vor%

Dies beschränkt das Argument im Allgemeinen auf nur eine mögliche by -Wort-Instanz.

    
tenshi 08.05.2012 19:42
quelle
1

Unäre Operatoren

Nun, Sie können zwei aufeinanderfolgende Bezeichner haben, wenn der letzte ein unärer Operator ist:

%Vor%

wird als

geparst %Vor%

Beachten Sie, dass unäre Funktionen nur sein können! ~ und -

Dynamische Methoden

Wenn es Ihnen nichts ausmacht, dass Ihr letzter Variablenname als String behandelt wird (zB können Sie später den Wert von einer Map oder dem Interpreter selbst ), können Sie folgende Dynamiken verwenden:

%Vor%

ergibt die Zeichenfolge "v2".

    
Mikaël Mayer 21.12.2013 14:52
quelle

Tags und Links