Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static Exp parse(Tokenizer t) throws ParseException {
- t.gotoEnd();
- return parseExp(t);
- }
- private static Exp parseExp(Tokenizer t) throws ParseException {
- Exp term = parseTerm(t);
- if (!t.done()) {
- Exp exp;
- if (t.current().isTheSymbol('+')) {
- t.previous();
- exp = parseExp(t);
- return new BinExp(exp, '+', term);
- } else if (t.current().isTheSymbol('-')) {
- t.previous();
- exp = parseExp(t);
- return new BinExp(exp, '-', term);
- } else {
- return term;
- }
- } else {
- return term;
- }
- }
- private static Exp parseTerm(Tokenizer t) throws ParseException {
- if (t.current().isTheSymbol(')')) {
- t.previous();
- Exp e = parseExp(t);
- if (t.current().isTheSymbol('(')) {
- t.previous();
- return e;
- } else {
- throw new ParseException("( expected");
- }
- } else if (t.current().isNumber()) {
- int v = t.current().number();
- t.previous();
- return new LitExp(v);
- } else {
- throw new ParseException("bracket or number expected");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement