中間コードを静的単一代入形式に変換すると、
基本ブロックのドミネーターを計算する必要があります
方程式の不動点としてこれを行うやや明白な方法は遅いです
高速に実行するには、かなり複雑な Lengauer-Tarjan アルゴリズムを使用する必要があります
最初の 2 点はわかりますが、3 番目の理由がよくわかりません。特に、プレオーダードミネーターツリーを計算する過程だけでできない理由はありますか?私はJavaScriptでそのバージョンを実装しましたが、うまくいくようです:
var domPreorder = [];
function doms(b) {
b.children = [];
for (var c of b[b.length - 1].targets)
if (c.i == null) {
c.i = domPreorder.length
domPreorder.push(c)
b.children.push(c)
c.parent = b
doms(c)
}
}
f[0].i = 0
domPreorder.push(f[0])
doms(f[0])
この方法には、私が見ていない欠点がありますか?