14

デモプロジェクト用の静的分析ツールを構築しようとしています。分析する言語は自由に選択できます。ANTLRを使用してJavaコードアナライザーを作成することから始めました。Scalaコードについても同じことをしたいと思います。しかし、ScalaのANTLR文法が見つかりませんでした。それは存在しますか?Scala文法の他の機械可読形式はありますか?

4

4 に答える 4

14

私はそのようなことがあるとは信じていません。

問題は、どの言語にとっても、特にScala のようなライブラリ言語の場合、字句解析と構文解析は、静的解析の最も面白くなく、最も些細な部分です。少しでも興味深いことを行うには、かなりの量のセマンティック分析を実行する必要があります。脱糖、型推論、型チェック、種類チェック、マクロ展開、オーバーロードの解決、暗黙の解決、名前のバインドなどです。要するに、実際のコード生成部分をモジュロにして、多かれ少なかれ Scala コンパイラ全体を再実装する必要があります。Scala のマクロ システムと Scala の型システムの両方がチューリング完全であることを思い出してください (実際、Scala のマクロ システムScala!): 実際にマクロ展開、型推論、型チェックを実行しないと分析できない、コンパイル時および型レベルの計算がかなり行われている可能性があります。

これは大規模な作業であり、実際に成功したプロジェクトは 2 つだけです。1 つは Scala コンパイラ自体、もう 1 つは IntelliJ IDEA Scala プラグインです。

また、ほとんど任意の方法で Scala の構文とセマンティクスを変更できるコンパイラ プラグインについても説明しません。

しかし、そこには希望があります。Scala コンパイラ自体は、IDE、コード ハイライター、あらゆる種類の静的分析ツールで使用するために特別に設計された、プレゼンテーション コンパイラと呼ばれる API を提供します。これにより、最適化およびコード生成フェーズの直前に、コンパイル中にコンパイラが保持するすべての情報にアクセスできます。これは、ScalaDoc、Scala REPL、Scala Eclipse プラグイン、NetBeans Scala プラグイン、SimplyScala.Com、Emacs 用の ENSIME プラグイン、いくつかの静的分析ツール、およびその他多数で使用されています。

于 2012-09-12T16:18:11.703 に答える
8

ANTLR の Scala 文法はhttps://github.com/lrlucena/grammars-v4/tree/master/scalaにあります。これは、Scala 言語仕様http://www.scala-lang.org/files/archive/spec/2.11/13-syntax-summary.htmlに基づいています。

于 2014-04-12T13:03:50.700 に答える
2

Scala 言語リファレンスの付録 A は役に立ちますか? EBNF形式です。

于 2012-09-11T16:10:12.223 に答える
1

Scalastyle はスカラリフォームを使用して解析を行います。これにより、ケース クラスの AST が得られます。ただし、ファイル内にある情報のみを取得するため、たとえば、推論された型は取得されません。

すべての追加情報が必要でない場合は、Scalariform を参照してください。Scalastyle のコードは非常に理解しやすいので、Checker.scalaから始めてください。

于 2012-11-22T13:07:02.760 に答える