2011-01-18 8 views
4

私はC言語用のインタプリタを作成しています。C++や他のPLを使ってCインタプリタを構築する方法

私はこのlinkを持っていますが、それを行うにはよりよい方法があるかどうかを知りたいと思います。今、私はC++を使って実装しようとしています。しかし、このタスクでより良い他の言語があるなら、私はこの目的のためにそれに変更して喜んでいます。

私は、ステートメントのラベル付け、アドレスの格納、ヒープアドレスの格納、およびこの分析に通常必要とされる他の操作のような操作を必要とする静的解析のためにインタープリタを構築しています。

私が開始に役立つリンクは素晴らしいでしょう。あなたの考えを分かち合いましょう。それは私にとってまったく新しい分野なので、本当に感謝しています。ありがとうございました

答えて

2

一部のコードを静的に解析するツールは、インタープリタではありません。

とにかく、そのようなツールを書くのは簡単なことではありません。コンパイラの仕組みをよく理解している必要があります。通常、このような仕事は多くのタスクに分割されています:コードをトークン化し、構文解析し、抽象構文木を構築します。

言語(このケースではC)規則を宣言すると、プロセスを自動化する多くのツール。最も有名なツールはおそらくバイソン(これはC言語用です)です。 boost.spiritのような多くの本当に良い使いやすいC++ライブラリや、これらのことを行うために設計された言語もあります。

私の提案は、コンパイラに関する知識を向上させ、より単純な言語のパーサを試してみることです。 Cをどこからでも解析することはできません。

+0

あなたの提案をありがとう。私はポインタ分析をしようとしているので、私はCに固執する必要があります。私はCやC++を知らないわけではありませんが、この作業をどのように進めるかについてはわかりません。 トークン化、解析のようなタスクはすべてコンパイルの一部です。つまり、それはコンパイラのようになりますか? – bsoundra

+1

はい、インタプリタまたはスタティックアナライザは、コンパイラと多くのことを共有します。 _High-level modules_はほんのわずかです。 C++について、私はあなたの仕事をするためにC++ライブラリを使うことを提案していました。それであなたのツールをC++で書くことができました。結果はもちろんCのみを解析します(Cルールを使用してツールを定義する場合)。ところで、C++を解析することは、Cを解析することに比べて地獄です。 – peoro

+0

どこが違うのか詳しく説明できますか?すなわちこのアプローチとの関連で?特定のリソースがありますか?私は非常に長い時間のためにグーグルを持っていますが、私は適切なヒットを開始することができませんでした!ちなみに、私もC++について言及していましたが、それは単に実装者としてだけでした。あなたが言及したように、仕事の地獄の1つになるC + +を解析する! – bsoundra

1

ライブラリを使用して解析することをお勧めしますか?

Clangは、自由に探索できるAST(抽象構文木)を生成するCパーサーを(他のものの中で)提供するモジュラープロジェクトです。

それはまた、あなたがおそらくチェックアウトする必要があること、テッドKremenek率いる進行中の静的アナライザ作業を、持っている...そして多分あなたはそれに貢献できるようになります:)

+0

を参照する必要があります。Clangも私が見てきたことの1つです。私はまだ私の前にある仕事の大きさを知っていないので(推測すると、私は今それがモンスターであることを知っています!)、私はすべてのオプションを見つけようとしています。 。 – bsoundra

1

クランはすでに述べました、だから、質問の "他のPL"の部分については、私は一見を見ることをお勧めしますhttp://cil.sourceforge.net/

関連する問題