0

私は、POS デバイスのプログラミングに使用される JavaScript に似た言語を使用しています。この言語は本当にひどいので、Java コードをこの言語に「変換」するある種のフレームワークを Java で構築しようとしています。

私はいくつかの正規表現を使用してこれを行い、Java ファイルを直接解析しました。今、これは正しい/より良い方法ではない可能性があることがわかり、代替手段を探しています。そうするのに役立つツールはありますか?

ASM (http://asm.ow2.org/index.html) などの高度なリフレクション ユーティリティを使用する必要があると考えました。パフォーマンスは重要ではないので、それが方法かもしれません。どう思いますか?

4

4 に答える 4

4

ANTLRは素晴らしいパーサージェネレーターです。私はそれを調べます。すでに利用可能な Java 文法があります。Java 5、6、または 7 かどうかはわかりません (おそらく 5 だと思います)。

AST を取得したら、問題はツリーをたどってターゲット コードを生成することです。幸運を。

于 2013-01-16T10:41:33.990 に答える
1

JavaCCまたは同様のツールを使用して Java 構文を解析することをお勧めします。Java 文法の説明はずっと前に書かれています。コンパイラーの作成に使用できるため、おそらくコンバーターの作成にも使用できます。正規表現は、プログラミング言語の解析にはあまり適していません。

于 2013-01-16T10:39:50.550 に答える
0

私自身は何もしたことがありませんが、altjs.orgにリストされているフレームワークの 1 つ、具体的には Java Ports セクションを見て、それらのフレームワークの 1 つを見て、特定のニーズに合わせて変更することができます。 .

于 2013-01-16T10:38:50.380 に答える
0

少なくとも 3 つの方法があります。

a) バイトコードを解釈します。DoppioVM など、JS にはいくつかの既存のインタープリターがあります。それらは非常に遅くなる可能性があります。

b) バイトコードを JS にコンパイルします。私はそのような試みを少なくとも 1 回見たことがありますが、結果として得られた JS は見苦しく、あまり高速ではありませんでした。しかし、このアプローチは優れたパフォーマンスを発揮する可能性があります (まあ、JS オブジェクトの代わりに HashMap を使用することになるかもしれません)。最大の問題は、IMHO while/if 再構築です。

編集:OK、おそらくそれほど遅くはありませんが、醜く、のようなゴミが含まれていますj2js.invokeStatic("j2js.client.Engine", "getEngine()j2js.client.Engine", null);。1 つのコンパイラはhttps://github.com/decatur/j2js-compilerでした。

c) Java を JS にコンパイルします。Google Web Toolkit またはhttp://j2s.sourceforge.net/を試すことができます。

于 2013-01-20T12:17:03.027 に答える