void datum(ConsVisitor cons, bool set_car) { if (Token.BOOL == lookahead || Token.NUM == lookahead || Token.CHAR == lookahead || Token.STRING == lookahead || Token.ID == lookahead) { AtomVisitor atom = set_car ? cons.visit_Atom_car() : cons.visit_Atom_cdr(); //atom.visit(); simple_datum(atom); //atom.visitEnd(); } else if (Token.OPEN_PAREN == lookahead) { match(Token.OPEN_PAREN); list(cons, set_car); } else if ( Token.QUOTE == lookahead || Token.BACKQUOTE == lookahead || Token.COMMA == lookahead || Token.SPLICE == lookahead) { ConsVisitor new_cons = set_car ? cons.visit_Cons_car() : cons.visit_Cons_cdr(); new_cons.visit(); abbreviation(new_cons); new_cons.visitEnd(); } else if (Token.VECTOR == lookahead) { VectVisitor vec = set_car ? cons.visit_Vect_car() : cons.visit_Vect_cdr(); vec.visit(); vector(vec); vec.visitEnd(); } else { // ERROR throw new SyntaxError(m_attrib.loc, lookahead, Token.BOOL, Token.NUM, Token.CHAR, Token.STRING, Token.ID, Token.OPEN_PAREN, Token.QUOTE, Token.BACKQUOTE, Token.COMMA, Token.SPLICE); } }