4

教育目的で、Cコード(のサブセット)のJavaScriptインタープリターを段階的に構築しています。

基本的に、int、float ...、arrays、functions、for、while...ポインタはありません。javascriptインタープリターが完了し、ブール式がどのように評価されるかを説明できるようになり、変数スタックが表示されます...

今のところ、Cの例を手動でJavaScriptに変換して、アクションのスタック(影響、関数呼び出しなど)を実行および構築します。このスタックは、後で段階的に実行するために使用できます。Cのサブセットに限定しているので、非常に簡単です。

次に、CコードをJavaScript表現にコンパイルします。必要なのはCコードの抽象構文木だけで、JavaScriptの生成は簡単です。

そのようなツリーを生成できる優れたCパーサーを知っていますか?javascriptである必要はありません(しかしそれは完璧です)、これはオフラインで行うことができるのでどんな言語でも大丈夫です。

私はEmscripten(https://github.com/kripken/emscripten)を見てきましたが、それはC => javascriptコンパイラであり、私たちが望んでいるものではありません。

4

2 に答える 2

3

私は最近、Eli Benderskyのpycparserを使用して、CコードのASTをいじりました。私はそれがあなたの目的のためにうまくいくと思います。

于 2011-05-24T15:15:31.313 に答える
0

ANTLRにはフルCパーサーがあると思います。

翻訳タスクを実行するには、シンボルテーブルを完全にサポートする必要があると思います。記号の意味を知っておく必要があります。ここでは、ほとんどの「パーサー」が失敗します。完全なシンボルテーブルを作成するわけではありません。ANTLRはそうではないと思いますが、私は間違っている可能性があります。

Cフロントエンドを備えたDMSSoftwareReengineering Toolkitは、完全なC arserを提供し、完全なシンボルテーブルを構築します。(アプリケーションには必要ないかもしれませんが、完全なCプリプロセッサーも含まれています)。また、制御フロー、データフロー、ポイントツー分析、およびコールグラフの構築も提供します。これらはすべて、Cをターゲット仮想マシンに変換するのに役立ちます。

于 2011-06-06T04:41:14.483 に答える