2009-11-24 33 views
15

Scalaを解析し、抽象構文ツリー(AST)を作成するScalaライブラリはありますか?ScalaでのScala

理想的にはScalaライブラリに興味があります。プランBはJavaライブラリになります。

(私はScala Syntax SummaryからEBNFを活用する可能性が知っている。)

答えて

8

私はASTにアクセスするための最良の方法は、コンパイラプラグインであると思うだろう。 の前にsoft introductionとお読みください。

+1

Scalaのコンパイラプラグインは有望に見えるあなたはScalaのリフレクションを使用することができます。 – AWhitford

0

純粋なScalaのソリューションについて確認してください、しかし、あなた自身がプランBを実装する必要が見つけた場合、あなたはあなただけでは文法からScalaのためのASTを構築することはできませんANTLRまたはRats!

2

をチェックアウトすることで起動することができません。考慮すべきことがあります。それらを考慮するために、考慮する型推論があります。

しかし、コンパイラー自体を呼び出すことはできます。結局のところ、それは単なるjarファイルです。 Scala 2.8は特に、他のプログラムがMiles Sabinの作業をラッチするためのフックを数多く持っています。Miles Sabinは、ScalaのEclipseプラグインがこのようにコンパイラを活用できるように正確にこれを行っています。

あなたはScala Toolsメーリングリストにアクセスして、そこにいる人と連絡を取ることをお勧めします。

+3

型や暗黙のような言語の意味的な側面を考慮することなく、Scala用のASTを構築できます。非常に多くのアプリケーションでは、それらを考慮に入れたいと思いますが、必ずしもすべてではありません。 –

+1

私は、ユーザーが書いたものだけでなく、最終的にコード生成に使用される正確なASTに寄与するその他の要因を反映するものとしてASTを望む目的を想像することができます。 –

+0

当初、私はスカラコードの真の意味論的解釈については気にしなかったと思っていましたが、暗黙と型推論に関するあなたのポイントは良いものです...私は確かに後者を要求するでしょう。 Scalaコンパイラは賢明なようです。 – AWhitford

4

いくつかの既存のパーサー:

スペックからEBNFを使用している場合は明らかに存在し、注意してください:

は、「付録とインライン文法間のミスマッチ、およびScalaでscalacでコンパイル(と利用言語間のミスマッチソース)と、文法で主張されている言語 " - Scala Trac bug #1826。ここで

+0

あなたのEBNFに関するヒントは役に立ちます。これは、JavaCC、ANTLRなどが挑戦になる可能性があることを意味します。 IDEコンパイラはリアルタイムコンパイルに興味があるので、自分自身のニュアンスがある傾向があります。これは必要なものではありません。 – AWhitford