Example #1
0
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)
		}
	}
}