编辑: sunny爹 | 2015-08-28 |
R.in = h(A.in);
} R { A.a = R.s;
} R → Y { R1.r = g(R.r, Y.y, R.in);
R1.in = h(R.in);
} R1 { R.s = R1.s;
} R → ? { R.s = R.r;
} (Aho)5.18 将5.16(b)的结果消除左递归 解:消除左递归后如下 S → { L.ps = 10;
} L { S.ht = L.ht;
} L → { B.ps = L.ps;
} B { L'.in = B.ht;
L'.ps = L.ps;
} L' { L.ht = L'.ht;
} L'B.ps = L.ps;
} B { L'1.in = max(L.in, B.ht);
L'1.ps = L'.ps;
} L'1 { L'.ht = L'1.ht;
} L' → ? { L'.ht = L'.in;
} B → { F.ps = B.ps;
} F { B'.in = F.ht;
B'.ps = B.ps;
} B' { B.ht = B'.ht;
} B'F.ps = shrink(B.ps);
} sub F { B'1.in = disp(B.in, F.ht);
B'1.ps = F.ps;
} B'1 { B'.ht = B'1.ht;
} B' → ? { B'.ht = B'.in;
} F → { L.ps = F.ps;
} { L } { F.ht = L.ht;
} F → text { F.ht = text.h * F.ps;
}