2012-03-08 4 views
0

Javaプログラミング言語のパーサを書く必要があります。私はいくつかの実装(JavaCC、SableCC)を見てきました。私はそれを処理できると思います。Javaパーサーリネーム変数

私は変数の名前を変更する必要があります。パーサーを使ってこれを行うことができますか?

はいの場合はどうですか?

+1

多くのIDEには、そのようなリファクタリング機能があります。これはおそらくオプションですか? –

+0

このようなことは、私自身、リファクタリングをする必要があります。 – user1019710

+1

しかし、なぜIDEを使用しないのですか?まともな文法を見つけてパーサを生成したり、パーサーを自分で作成したりするのは、Eclipse、IntelliJ、Netbeansで簡単に行うことができる面倒な作業です。 –

答えて

1

変数の名前をグローバルに変更するだけの場合は、パーサーは必要ありません。あなたが必要とするのは、識別子を取り除くことができる(島の)レクサーだけなので、それらを置き換えることができます。そのようなレクサーは、パーサ部分を無視するだけで、Java文法を持つ任意のパーサジェネレータから取得できます。それはあなたに多くの問題を救うはずです。

これにパーサーを使用しようとすると、ASTが作成されます(IDENTIFIERツリーノードが存在する可能性があります)、おそらくツリーノードを破損して置き換えることも簡単になります。あなたの問題は合法的なソーステキストを再生成することになります。ほとんどのパーサジェネレータは、テキストからツリーへのテキスト機能を提供しません。

スコープに従って変数の名前を変更する場合は、パーサーと完全な名前と型の解決が必要です。それは単なるパーサよりも難しいことです。 Java 7の名前検索に関するルールはかなり複雑です。もう一度、そこにはJava文法のあるパーサジェネレータがあります。この場合、その名前と型解決を実装しない限り、あなたを助けません。あなたは期待以上に多くの作業を見つけるでしょう。