Japanese Compiler Phase Guide Add comment to Wiki View in Wiki Edit Wiki page Printable Version



GroovyのAST変換はcompiler phasesで定義されている9つのうちの一つで実行されなければなりません。



グローバル変換は任意のフェーズで適用される可能性がありますが、ローカル変換は意味解析フェーズかその後でのみ適用される可能性があります。手短かに言えばコンパイラフェーズは、

  • 初期化:ソースファイルが開かれ、環境が構成される
  • 構文解析:文法はソースコードを表すトークンツリーを作るために利用される
  • 変換:抽象構文木(AST)がトークンツリーから作成される
  • 意味解析:文法だけではチェックできない一貫性と妥当性チェックを行い、クラスを解析します
  • 正規化:AST構築完了
  • 命令選択:命令セットが選択されます、例えばJava5かJava5以前かといったような
  • クラス生成:メモリ上にバイナリ出力を生成します
  • 出力:ファイルシステムへバイナリ出力を書き込みます
  • 終了:最後のクリーンアップ実行



一般的に言えば、後フェーズになるほど、より多くの型情報を扱えるようになります。

もし変換がAST読み込みフェーズの場合、より豊富な後フェーズよい選択となるかもしれません。

もし変換がAST書き込みフェーズの場合、木がまばらな初期フェーズが便利かもしれません。

静的プロパティ変換



具体例として、Groovyの積極的で静的型付け、クラスの静的プロパティをここに示します。



なので、もしAST変換で静的プロパティを作りたい場合は、このチェックが実行される前にフックする必要があります。とりわけ、これは変換フェーズです(意味解析部分が捕獲されるところ)。早期のフェーズを使用したとしても、ほとんどの型は解決されていません。そしてだから型解決する限りにおいて重要な意味があります(例として、特定クラスへのアノテーション)。そして手巻きしなければならなくなります。

その他の情報



ASTが各々のフェーズで何を生成するかを学ぶために、GroovyコンソールのASTビューワを利用することで、違ったフェースでの出力を調査することができます。

 

Search

Results of your search request can come from various sources: the Groovy website itself, the JIRA issues, the API documentation, as well as a few other interesting Groovy-related blogs.

  By  -  pages  -  views  - last modified