Der abstrakte Syntaxbaum verschiedener Sprachen ist normalerweise nicht kompatibel. Dies ist der Fall, weil der AST den Code repräsentiert, der in der jeweiligen Sprache geschrieben wurde. Das bedeutet, dass Sie den Baum durchqueren und ihn so formatieren können, dass er wieder mit der gleichen Syntax codiert (d. H. Die Leerzeichen unterscheiden sich, der Rest ist der gleiche). Sie können jedoch nicht kompatibel sein, da die Sprachen unterschiedliche Konstrukte haben. Zum Beispiel hat Groovy Schließungen, was bei Java nicht der Fall ist. Sie können normalerweise eine Zuordnung zu verschiedenen Konzepten finden, die äquivalent sind, aber das ist nicht der Punkt einer AST.
Der Grund, warum AST-Transformationen ein Teil von Groovy sind, während sie nicht Teil von Java sind, sind die gleichen Closures, die Teil von Groovy sind, aber nicht von Java: verschiedene Designentscheidungen. Java wurde entworfen, um einfach zu sein. Einfach zu lesen und leicht zu lesen, wenn auch oft ausführlich. Groovy hatte einen anderen Fokus. Die Syntax ist prägnanter und Dinge wie domänenspezifische Sprachen sind erwünscht.
Wenn Sie sich mehr für die Interna von Compilern interessieren, empfehle ich die "Dragon Book". Soweit ich weiß, ist das der Standard, den Sie in Akademikern lesen (ich habe es gelesen, als ich studierte).
Es ist eine andere Implementierung des gleichen AST-Musters. Können Sie genauere Fragen stellen? – talex
@talex genauer gemacht. Obwohl es keine spezifische Frage ursprünglich – lapots
ist, würde ich vorschlagen, einige Online-Kurs oder Tutorial von Lern-Compiler-Techniken zu nehmen. Das würde es viel einfacher machen, Ihr Problem zu beschreiben. Java, der Interpreter repräsentiert den Code nicht als Baum. der Compiler tut es, bis es mit der Analyse fertig ist. –