func Parse(s string) (*ast.Program, error) {
	p := newParser(lexer.New(s))
	prog := p.parseProgram()
	if len(p.errors) > 0 {
		return prog, p.errors
	}
	return prog, nil
}
func Parse(s string) (*ast.Program, error) {
	p := newParser(lexer.New(s))
	prog := p.parseProgram()
	if len(p.errors) > 0 {
		return prog, p.errors
	}
	return prog, nil
}
func Parse ( s string ) ( * ast . Program , error ) { p := newParser ( lexer . New ( s ) ) prog := p . parseProgram ( ) if len ( p . errors ) > 0 { return prog , p . errors } return prog , nil }
// Parse the string and return an AST or an error
Parse the string and return an AST or an error