예제 #1
0
 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
     
 }
예제 #2
0
 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();
     }
 }
예제 #3
0
 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;
     }
 }
예제 #4
0
        // 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());
        }
예제 #5
0
 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;
 }