Ich habe einige nette Java-Compiler Hacks gesehen, in denen Sie Ersetzungen durch throw-exception-Anweisungen ersetzen , Sie können automatisch generiert haben Eigenschaften für Felder und so weiter ...
Ich habe mich nur gefragt ...
Ist es möglich, den Java-Compiler so zu hacken, dass er das Überladen von Operatoren unterstützt?
BEARBEITEN:
Es ist nicht so, dass mir das Überladen von Operatoren in Java oder so ähnlich fehlt. Ich möchte nur wissen, ob es möglich ist, es unter Verwendung der Hacks zu implementieren, die in den Links erwähnt werden, die ich oben angegeben habe. Bitte schlage mir nicht vor, auf eine andere Sprache wie Scala zu wechseln (was ich sowieso schon lerne!: D).
BEARBEITEN:
Bitte sagen Sie mir, ob es möglich ist, JSR 269 oder etwas ähnliches zu verwenden. : |
Danke.
Als Antwort auf die bearbeitete Frage können Sie den true -Operator in Java nur implementieren, indem Sie ihn der Sprache hinzufügen. Dies bedeutet, dass Sie entweder den Compiler ändern müssen, um Ihren Code zu kompilieren, oder einen Präprozessor schreiben, der Ihren Code in Java-Standard konvertiert. Für Ersteres können Sie eine fast vollständige FOSS Java-Implementierung entweder von GNU oder von OpenJDK Projekt. Für Letzteres können Sie entweder Ihren eigenen Parser mit Dingen wie JavaCC usw. schreiben (Beispiele finden Sie auf dieser Seite ) oder Sie können JFront als Basis verwenden, um Ihre eigene Syntax hinzuzufügen.
JFront ist ein Vorprozessor für die Sprache Java, mit dem Sie das Überladen von Operatoren für Ihre eigenen Klassen implementieren können . Leider scheint es diese Fähigkeit nicht zu Standardklassen hinzuzufügen (BigInteger et al. Wäre ein guter Kandidat dafür).
Sie können die Bytecode-Injektion verwenden, um einen Typ wie float durch einen eigenen Typ zu ersetzen. Dies kann nach dem Kompilieren erfolgen, ohne den Compiler zu ändern.
Ein anderer Ansatz ist die Verwendung von Groovy-Bibliotheken, da Groovy bereits eine Überladung des Operators aufweist.
Die aktuelle Implementierung verwendet Groovy für die Überlastung. Dieser Ansatz hat Ein Nachteil: die groovigen Bibliotheken muss mit dem Projekt geliefert werden.
Tags und Links java compiler-construction