3番地コード:翻訳 - 私のような特定の入力、転写するアルゴリズムにしようとしています
(a * b)/(c * d)
をして3ACに、このような入力を出力します:
t1: a * b
t2: c * d
t3= t1/t2
を
誰にでも提案はありますか?
3番地コード:翻訳 - 私のような特定の入力、転写するアルゴリズムにしようとしています
(a * b)/(c * d)
をして3ACに、このような入力を出力します:
t1: a * b
t2: c * d
t3= t1/t2
を
誰にでも提案はありますか?
このような式を転写するためのアルゴリズムはかなり簡単です。
明らかに、最初のタスクは、与えられた式をreverse polish notationに変換することです。ここからは、すでに完全に定義された実行順序があります。
ここで、オペランドのスタックを準備する必要があります。この時点では、通常のRPNのように、オペレーションを実行して結果をオペランドスタックに戻すのではなく、新しい番号の新しいTAC命令を出力し、結果の代わりにそのシンボルをスタックに戻さなければなりません。だから、a
a b * c d * /
とb
スタックに行く:
あなたの例ではRPNになります。 *
が出現すると、スタックから2つのアイテムがポップアップし、t1 := a * b
を印刷し、t1
をスタックに配置します。今度はRPNをもっとトラバースし、c
とd
をスタックに入れます。今度は別の*
に出会うようになりました。スタックから2アイテムを取り出し、新しいTACシンボルt2 := c * d
で印刷し、新しいシンボルt2
をスタックに戻します。
最後に/
が出ますので、再びスタックから2つのアイテムをポップし、新しいシンボルを作成して印刷してください:) t3 := t1/t2
。
これは、標準のRPN電卓よりもずっと簡単です。