徳丸さん、お久しぶりです。
たまたま逆コンパイラの話題があったので書き込みしました。
逆コンパイラらしきもの?ならソースがありますよ。どこで見つけたか忘れましたけど。
(Generates C code for each procedure.の記述がある)
ソースをDLしてコンパイルしてみたのですが使い方が分かりませんでした。
ちょっと僕では手に負えないんですが、誰か見てもらえませんか?
〉その構文木は式に対してだけ作るんですか?
〉文の場合は作らない?
これは場合によりますね。簡易なコンパイラであれば、直接コード生成してしまうだろうし、
場合によってはステートメント・レベルで構文木を作る場合もあるでしょう。
要は、コンパイラを作る人が、作りやすい方法を選べば良いだけだと思いますよ。
徳丸さんこんにちは。
> 最適化
なるほど。やりやすくなるんですね。
> 作りやすさ
その構文木は式に対してだけ作るんですか?
文の場合は作らない?
Tobaさん、ようこそ
構文木を作る理由ですが、
・作りやすさ
yaccなど上昇系の構文解析を使うと、式がボトムアップに解析されていきます。そうすると、
式全体を見渡した処理ができないので、いったん構文木という形で「覚えて」おいて、式全体
の解析がすんでから、まとめて処理する方が、処理が楽と言う理由があります
・最適化のため
前項とも関係しますが、最適化を行うためには、できるだけ広い範囲の情報があった方が、
最適が可能になり、またやりやすいと言えます。そのための一つの方法が、構文木です。
大抵のインタプリタ、コンパイラなら内部で構文木、解析木を作ってから処理を
するそうですがなぜ作るんですか?
けいたろうさん、「インプリメンタの部屋」にようこそ。
逆コンパイラですか。逆アセンブラなら大昔(Z80の頃^^;)作ったことがありますが、
逆コンパイラは見たこともありませんねぇ。どなたか、知りませんか?
けいたろうさんは、逆コンパイラを使ってどんなことをしたいのでしょうか?それが
分かれば、アドバイスも受けやすいと思いますが。
逆コンパイラソフト作ってくれませんか
自分はC言語は初心者なのでできあがっているプログラムを参考にしたいんですが
できれば初心者なので簡単な設定でできあがっているプログラムをソースプログラムに変換するプログラムを作ってほしいです
X++が抜けてる。
NEXT:
DECB
BEQ ELSE
LEA X 2,X
BRA LOOP
これで正解、、、ははは。
つっこまれる前でよかった(^_^;
いつもリプライありがとうございます。
あのコンパイラは正確には PL/<STONG>Hといっていたような
MC68000のニモニック、もう忘れたんで MC6809で書きますと、、、、
LEA X,JMPTBL
LDB #JMPCTR
LOOP:
CMPA ,X+
BNE NEXT
JMP [,X]
NEXT:
DECB
BEQ ELSE
BRA LOOP
JMPTBL:
FCB #$00, FDB #Address1
FCB #$99, FDB #Address2
ではまた。
from (^^;)元Hな人。
わたぬさん、こんにちは
〉私はMC68000システムのクロスPL/Mコンパイラをオンライン端末より利用していた
〉プログラマでした。
PL/Mとは懐かしい言葉ですね。1993年当時でも現役だったのですね。
〉このコンパイラはいつも決まったマシン語に展開するので面白くなかった事を覚え
〉ています。もちろんCase文の実装も、修飾レジスタと飛び先テーブルをつかって、
〉まるで教科書の例題のようなコードしか作ってくれませんでした。
へー、そうですか。これはPascal/P4と同じですね。だとすると(敢えてC言語で書きますが)
以下のようなコードは、
swtich (n) {
case 0:
...
break;
case 30000:
....
break;
}
なんてプログラムは膨大なジャンプテーブルができてしまうのでしょうか?