boolean isDigit(char ch) { return ch >= '0' && ch <= '9'; } void p() { e(); while ( isDigit(token) ) e(); } void e() { t(); while ( token == '+' || token == '-' ) { char op = token; nextToken(); t(); sop("pop R1"); sop("pop R0"); if ( op == '+' ) sop("add R0, R1"); else sop("sub R0, R1"); sop("push R0"); } } void t() { f(); while ( token == '*' ) { char op = token; nextToken(); f(); sop("pop R1"); sop("pop R0"); sop("mul R0, R1"); sop("push R0"); } } void f() { if ( isDigit(token) ) { sop("mov R0, " + token); sop("push R0"); nextToken(); } else error(); }