func (p *Parser) parseTree(tree *ast.ListCell) (ast.Cell, error) { for { switch t := <-p.tokens; t.Type { // tree is done case token.RParen: return tree, nil // EOF found before tree is done, error case token.EOF: return ast.NewEOF(), fmt.Errorf( "syntax error: hanging parenthese, s-expression %v does not close", tree) default: val, err := p.parseAST(t) if err != nil { return val, err } tree.Add(val) } } }