2011-12-21 15 views
0

私はレクサー、構文チェッカー、セマンティクスを手に入れることができました。今は中間コード生成に移りたいと思います。問題は、論理式をどのように処理するのか分からないことです。私はE.trueとE.falseについて何かを読んでいます。この例はどこにでもありますが、私はそれを理解しませんでした。例えば論理式と中間コードの生成

私は次のコード

if x>y and x<y or x == 1 then 
    //super duper code here 
    x = x+1  
else 
    //super duper wow code here 
    y = y+1 
endif 

を持っている場合、結果はこの

1: > x y 3 
2: jmp _ _ 9 
3: < x y 7 
4: jmp _ _ 5 
5: == x 1 _ 
6: jmp _ _ 9 
7: + 1 x $1 
8: = $1 _ x 
9: + 1 y $2 
10: = $2 _ y 

のようなものでなければなりませんが、あなたが実際にif文を解析し終わるまでジャンプのラベルが知られていません。

だから私はクワッドを生成してから、それらをバックパッチしなければなりません。この文法でどうすればいいですか?post

私は本当に混乱しているので誰かがどのように行くのか説明できますか?

+1

宿題をこの質問にも追加する必要がありますか? – AusCBloke

+0

@AusCBloke fixed – Takatakas

答えて

1

はい、シンボル/ラベルであるブランチターゲットを生成する必要があります。あなたの中間言語(IL)がこれをサポートしているのであれば、数字のある命令の場所を使うべきではないでしょう。 (数字の中間の命令位置は、最終的な命令のためのアドレス/オフセットに単純にマップされないため、最終的なコード生成を助けません。)

もう一つのヒントは、ほとんどの種類の単純な表現が含まれています。 ILがこれをサポートしていれば、それは事を単純化するだろう。すなわち、ターゲットラベル手段が次の命令に進むことはない。これにより、ILシーケンスのコード生成が簡単になります。

+0

私の投稿にあるコードの例を挙げることはできますか? – Takatakas

+0

@Takatakas - いいえ、できませんでした。それはあなたの宿題であり、私のものではありません。 –

+0

お元気ですか。あなたはとても役に立ちました。私はあなたに私のためのコードを書くよう依頼していませんでした。私はそれを自分で考え出した。 – Takatakas

関連する問題