Scalaを解析し、抽象構文ツリー(AST)を作成するScalaライブラリはありますか?ScalaでのScala
理想的にはScalaライブラリに興味があります。プランBはJavaライブラリになります。
(私はScala Syntax SummaryからEBNFを活用する可能性が知っている。)
Scalaを解析し、抽象構文ツリー(AST)を作成するScalaライブラリはありますか?ScalaでのScala
理想的にはScalaライブラリに興味があります。プランBはJavaライブラリになります。
(私はScala Syntax SummaryからEBNFを活用する可能性が知っている。)
私はASTにアクセスするための最良の方法は、コンパイラプラグインであると思うだろう。 の前にsoft introductionとお読みください。
をチェックアウトすることで起動することができません。考慮すべきことがあります。それらを考慮するために、考慮する型推論があります。
しかし、コンパイラー自体を呼び出すことはできます。結局のところ、それは単なるjarファイルです。 Scala 2.8は特に、他のプログラムがMiles Sabinの作業をラッチするためのフックを数多く持っています。Miles Sabinは、ScalaのEclipseプラグインがこのようにコンパイラを活用できるように正確にこれを行っています。
あなたはScala Toolsメーリングリストにアクセスして、そこにいる人と連絡を取ることをお勧めします。
型や暗黙のような言語の意味的な側面を考慮することなく、Scala用のASTを構築できます。非常に多くのアプリケーションでは、それらを考慮に入れたいと思いますが、必ずしもすべてではありません。 –
私は、ユーザーが書いたものだけでなく、最終的にコード生成に使用される正確なASTに寄与するその他の要因を反映するものとしてASTを望む目的を想像することができます。 –
当初、私はスカラコードの真の意味論的解釈については気にしなかったと思っていましたが、暗黙と型推論に関するあなたのポイントは良いものです...私は確かに後者を要求するでしょう。 Scalaコンパイラは賢明なようです。 – AWhitford
いくつかの既存のパーサー:
PsiBuilder
APIに対してScalaで記述されています。スペックからEBNFを使用している場合は明らかに存在し、注意してください:
は、「付録とインライン文法間のミスマッチ、およびScalaでscalacでコンパイル(と利用言語間のミスマッチソース)と、文法で主張されている言語 " - Scala Trac bug #1826。ここで
あなたのEBNFに関するヒントは役に立ちます。これは、JavaCC、ANTLRなどが挑戦になる可能性があることを意味します。 IDEコンパイラはリアルタイムコンパイルに興味があるので、自分自身のニュアンスがある傾向があります。これは必要なものではありません。 – AWhitford
あなたはコードの一部のASTを生成する場合は、コンパイラのコミッターhttp://github.com/paulp/scala-lang-combinators
の一つのプロジェクトです。上記のコードはASTを生成します
showRaw(reify{
//your code here like:
print(2)
})
:
Expr(Apply(Select(Ident(scala.Predef), TermName("print")), List(Literal(Constant(2)))))
参考:
http://docs.scala-lang.org/overviews/reflection/symbols-trees-types.html
Scalaのコンパイラプラグインは有望に見えるあなたはScalaのリフレクションを使用することができます。 – AWhitford