<E> -> <T> <TT>
<TT1> -> + <T> <TT2>
<TT1> -> - <T> <TT2>
<TT> -> e
<T> -> <F> <FT>
<FT1> -> * <F> <FT2>
<FT1> -> / <F> <FT2>
<FT> -> e
<F1> -> - <F2>
<F> -> ( <E> )
<F> -> unsigned_int
|
TT.st := T.ptr; E.ptr := TT.ptr
TT2.st := mk_bin_op("+", TT1.st, T.ptr);
TT1.ptr := TT2.ptr
TT2.st := mk_bin_op("-", TT1.st, T.ptr);
TT1.ptr := TT2.ptr
TT.ptr := TT.st
FT.st := F.ptr; T.ptr := FT.ptr
FT2.st := mk_bin_op("*", FT1.st, F.ptr);
FT1.ptr := FT2.ptr
FT2.st := mk_bin_op("/", FT1.st, F.ptr);
FT1.ptr := FT2.ptr
FT.ptr := FT.st
F1.ptr := mk_un_op("-", F2.ptr)
F.ptr := E.ptr
F.ptr := make_leaf(unsigned_int.val)
|