// ifstmt: recognize an if statement
private void ifstmt() {
scan();
if (next != T.lprtok) {
error(3); return;
}
scan();
expr();
if (next != T.rprtok) {
error(4); return;
}
scan();
stmt();
if (next == T.ELSEtok) { // optional else
scan();
stmt();
}
}
Stack (top at right) Curr Rest of Input Action
Sym
--------------------------------------------------------------------------
$ id * ( id + id ) $ shift
$ id * ( id + id ) $ reduce: F ---> id
$ F * ( id + id ) $ reduce: T ---> F
$ T * ( id + id ) $ shift
$ T * ( id + id ) $ shift
$ T * ( id + id ) $ shift
$ T * ( id + id ) $ reduce: F ---> id
$ T * ( F + id ) $ reduce: T ---> F
$ T * ( T + id ) $ reduce: E ---> T
$ T * ( E + id ) $ shift
$ T * ( E + id ) $ shift
$ T * ( E + id ) $ reduce: F ---> id
$ T * ( E + F ) $ reduce: T ---> F
$ T * ( E + T ) $ reduce: E ---> E + T
$ T * ( E ) $ shift
$ T * ( E ) $ reduce: F ---> ( E )
$ T * F $ reduce: T ---> T * F
$ T $ reduce: E ---> T
$ E $ reduce: S ---> E
$ S $ accept