Mein aktuelles Projekt (nur eine Spielzeug-Sprache wirklich) ist eine funktionale Skriptsprache. Und ich möchte das Methodenaufrufen zulassen, ohne Klammern für die Gruppierung zu benötigen.Implementieren Methode aufrufen ohne Klammern
sum 1 2 3
Hier ist der Haken, und ich bin mir nicht sicher, ob das eine gemeinsame Sache ist oder nicht, um ehrlich zu sein. Aber in meiner Sprache kann eine Methode Parameter definieren, die den Bezeichner ausführen.
def (a) plus (b)
a + b
end
Welche enden würde
1 plus 2
zu sein, aber was ist, wenn ich für diese Parameter Variablen/Funktionen? Wie würde ich wissen, zum Beispiel, dass „plus“ ist die Methode, ich rufe und nicht „getNum“ in dem folgenden
getnum plus 2
Und mehr weiter, wie kann ich wissen, dass getNum ein Parameter von plus und nicht umgekehrt? (Ist es einfach durch Überprüfung der Parametersignaturen?) EDIT: Ich habe mich einfach selbst wiederholt. Hoppla.
Und schließlich, sollte ein Lexer etwas Besonderes für diese Art von Sache tun? Wenn ja, wie würde die IT wissen, welche den "Methodenkopf" genannt wird? Oder pumpt der Lexer einfach Sachen wie "Identifiertoken" und "Literaltoken" raus und überlässt es der Laufzeit, herauszufinden, dass es sich um einen Methodenaufruf handelt?
Noch schlimmer, was ist, wenn 'getnum' und' plus' * beide * Funktionen sind? Im Allgemeinen klingt das wie eine mehrdeutige Grammatik. –
Was ich meine, ist, wenn Sie 'def f (x)' und 'def (x) g' haben, was sollte dann' f g' auflösen? –
Ich vermute, geschachtelte Funktionsaufrufe müssten Klammern (oder eine andere Gruppe von Gruppierungszeichen) verwenden, es sei denn, es könnte basierend auf der Tatsache, dass getnum keine Parameter benötigt. – RoyalPotato