2009-11-24 6 views
15

Gibt es eine Scala-Bibliothek, die Scala analysiert und einen Abstract Syntax Tree (AST) erstellt?Scala AST in Scala

Idealerweise interessiert mich eine Scala-Bibliothek. Plan B wäre eine Java-Bibliothek.

(ich weiß, ich könnte die EBNF vom Scala Syntax Summary nutzen.)

Antwort

8

Ich würde denken, der beste Weg, um die AST für den Zugriff mit einem Compiler-Plugin ist. Sie sollten eine vor diving in deep lesen.

+1

Die Scala Compiler Plugin sieht vielversprechend aus

showRaw(reify{ //your code here like: print(2) }) 

Der obige Code ein AST erzeugen wird. – AWhitford

0

nicht sicher über die reinen scala Lösungen, aber wenn Sie sich Plan B finden, um zu implementieren, können Sie, indem Sie aus ANTLR oder Rats!

2

Sie bauen können keinen AST für Scala aus der Grammatik allein zu starten. Es gibt Implikationen, die zu berücksichtigen sind, und um sie zu berücksichtigen, muss der Typinterferenzen berücksichtigt werden.

Sie können jedoch den Compiler selbst aufrufen - es ist schließlich nur eine JAR-Datei. Vor allem Scala 2.8 hat einige Haken für andere Programme, um daran zu hängen - eine Arbeit von Miles Sabin, der genau das tut, damit das Eclipse-Plugin für Scala den Compiler auf diese Weise nutzen kann.

Ich schlage vor, dass Sie auf die Mailingliste von Scala Tools gehen und dort mit Leuten in Kontakt treten.

+3

Sie können einen AST für Scala erstellen, ohne semantische Aspekte der Sprache zu berücksichtigen, wie Typen und Implikationen. Es ist sicherlich richtig, dass Sie für eine Vielzahl von Anwendungen diese berücksichtigen möchten, aber nicht unbedingt alle. –

+1

Ich kann mir vorstellen, eine AST für genau das, was der Benutzer geschrieben hat, sowie eine reflektierende implicits und was auch immer andere Faktoren beitragen, um die genaue AST letztlich für die Code-Generierung verwendet. –

+0

Zuerst dachte ich, dass mir eine wirklich semantische Interpretation des Scala - Codes egal wäre, aber dein Punkt über Implicits und Type Inference ist ein guter ... Ich denke, dass ich definitiv Letzteres benötige, also schaue näher auf den Scala-Compiler scheint vorsichtig zu sein. – AWhitford

4

Einige bestehende Parser:

vorsichtig sein, wenn die EBNF von der Spezifikation verwendet, gibt es offenbar:

„Mismatches zwischen dem Anhang und der Inline-Grammatik und Diskrepanzen zwischen der Sprache von scalac zusammengestellt (und in der scala genutzt Quellen) und die von der Grammatik beanspruchte Sprache "- Scala Trac bug #1826. Hier

+0

Ihr Tipp zum EBNF ist nützlich. Dies bedeutet, dass JavaCC, ANTLR usw. wahrscheinlich eine Herausforderung darstellen. Die IDE-Compiler neigen dazu, ihre eigenen Nuancen zu haben, weil sie an der Echtzeit-Kompilierung interessiert sind - was ich nicht brauche. – AWhitford