void list_contents_tail(ConsVisitor cons) { if (Token.CLOSE_PAREN == lookahead) { cons.visit_cdr(); } else if ( Token.BOOL == lookahead || Token.NUM == lookahead || Token.CHAR == lookahead || Token.STRING == lookahead || Token.ID == lookahead || Token.OPEN_PAREN == lookahead || Token.QUOTE == lookahead || Token.BACKQUOTE == lookahead || Token.COMMA == lookahead || Token.SPLICE == lookahead || Token.VECTOR == lookahead) { ConsVisitor cdr = cons.visit_Cons_cdr(); cdr.visit(); datum(cdr, true); list_contents_tail(cdr); cdr.visitEnd(); } else if (Token.DOT == lookahead) { dot_tail(cons); } else { throw new SyntaxError(m_attrib.loc, lookahead, Token.DOT, Token.CLOSE_PAREN, Token.BOOL, Token.NUM, Token.CHAR, Token.STRING, Token.ID, Token.OPEN_PAREN, Token.QUOTE, Token.BACKQUOTE, Token.COMMA, Token.SPLICE); } }
void list(ConsVisitor cons, bool set_car) { if (Token.CLOSE_PAREN == lookahead) { match(Token.CLOSE_PAREN); if (set_car) { cons.visit_car(); } else { cons.visit_cdr(); } } else if ( Token.BOOL == lookahead || Token.NUM == lookahead || Token.CHAR == lookahead || Token.STRING == lookahead || Token.ID == lookahead || Token.OPEN_PAREN == lookahead || Token.QUOTE == lookahead || Token.BACKQUOTE == lookahead || Token.COMMA == lookahead || Token.SPLICE == lookahead || Token.VECTOR == lookahead) { ConsVisitor new_cons = set_car ? cons.visit_Cons_car() : cons.visit_Cons_cdr(); new_cons.visit(); list_contents(new_cons); new_cons.visitEnd(); match(Token.CLOSE_PAREN); } else { throw new SyntaxError(m_attrib.loc, lookahead, Token.CLOSE_PAREN, Token.BOOL, Token.NUM, Token.CHAR, Token.STRING, Token.ID, Token.OPEN_PAREN, Token.QUOTE, Token.BACKQUOTE, Token.COMMA, Token.SPLICE, Token.VECTOR); } }