private Node parseExp(Token t) { token t = Scanner.getNextToken(); if(t == null) return null; else if(t.getType == TokenType.LPAREN) return parseRest(); else if(t.getType == TokenType.TRUE) return new BoolLit(true); else if(t.getType == TokenType.FALSE) return new BoolLit(false); else if(t.getType == TokenType.INT) return new IntLit(t.getIntVal()); else if(t.getType == TokenType.IDENT) return new Ident(t.getName()); else if(t.getType == TokenType.QUOTE) return new Cons(new Ident("quote"), new Cons(parseExp(), null)); else if(t.getType == TokenType.STRING) return new StrLit(t.getStringVal()); else if(t.getType == TokenType.RPAREN || t.getType == DOT) Console.write("Error, can't have right parenthesis"); return null; //INCLUDE RPAREN AND DOT ERRORS }
private Node parseExp(Token t) { if (t == null) { //Console.Error.WriteLine("Warning null token!!!"); return null; } else if (t.getType() == TokenType.LPAREN) { return parseRest(); } else if (t.getType() == TokenType.FALSE) { return BoolLit.getFalse(); } else if (t.getType() == TokenType.TRUE) { return BoolLit.getTrue(); } else if (t.getType() == TokenType.QUOTE) { // quote token does not have a name, so give it name "quote" // cons // / \ // quote cons // / \ // exp Nil return new Cons(new Ident("quote"), new Cons(parseExp(), Nil.getNil())); } else if (t.getType() == TokenType.INT) { return new IntLit(t.getIntVal()); } else if (t.getType() == TokenType.STRING) { return new StringLit(t.getStringVal()); } else if (t.getType() == TokenType.IDENT) { return new Ident(t.getName()); } else if (t.getType() == TokenType.DOT) { Console.Error.WriteLine("Warning illegal DOT token"); return parseExp(); } else if (t.getType() == TokenType.RPAREN) { Console.Error.WriteLine("Warning illegal RPAREN token"); return parseExp(); } else { Console.Error.WriteLine("Warning illegal token"); return parseExp(); } }
private Node parseExp(Token token) { if(token == null) { return null; } else if(token.getType() == TokenType.LPAREN) { return parseRest(); } else if(token.getType() == TokenType.IDENT) { return new Ident(token.getName()); } else if(token.getType() == TokenType.TRUE) { return new BoolLit(true); } else if(token.getType() == TokenType.FALSE) { return new BoolLit(false); } else if(token.getType() == TokenType.INT) { return new IntLit(token.getIntVal()); } else if(token.getType() == TokenType.STRING) { return new StringLit(token.getStringVal()); } else if(token.getType() == TokenType.QUOTE) { // return new Cons(new Ident("\'"), new Cons(parseExp(), new Nil())); return new Cons(new Ident("\'"), parseExp()); } else { Console.Error.WriteLine("PARSING ERROR in parseExp: "); return null; } }
// Takes a token as input and makes a node out of it public Node makeExp(Token t) { if (t == null) return nodeNil; TokenType tt = t.getType(); // If this token is a LPAREN, parse the rest of the list if (tt == TokenType.LPAREN) { return parseRest(); } // If token is TRUE or FALSE, // return pointers to the nodes we initialized at the beginning else if (tt == TokenType.FALSE) { return nodeFalse; } else if (tt == TokenType.TRUE) { return nodeTrue; } // If this token in a QUOTE, make a Cons node // with ' as its car // and the parsing of a node (or node tree) as its cdr // because what follows a QUOTE token should be treated // as a regular list to parse. else if (tt == TokenType.QUOTE) { return new Cons ( new Ident ("\'"), parseExp () ); } // For INT, STRING, and IDENT tokens, // just return their respective nodes while keeping node data // consistent with the original token values else if (tt == TokenType.INT) return new IntLit(t.getIntVal()); else if (tt == TokenType.STRING) return new StringLit(t.getStringVal()); else /*(tt == TokenType.IDENT)*/ return new Ident(t.getName()); }
private Node parseExp(Token tok) { if (tok.getType() == TokenType.INT) return new IntLit(tok.getIntVal()); else if (tok.getType() == TokenType.STRING) return new StringLit(tok.getStringVal()); else if (tok.getType() == TokenType.TRUE) return BoolLit.getTrue(); else if (tok.getType() == TokenType.FALSE) return BoolLit.getFalse(); else if (tok.getType() == TokenType.QUOTE) return new Cons(new Ident("'"), parseExp()); else if (tok.getType() == TokenType.IDENT) return new Ident(tok.getName()); else if (tok.getType() == TokenType.LPAREN) return parseRest(); return null; }