code: func Parse(input string) (result *ast.Program, err error) {
  	// recover error
  	defer errRecover(&err)
  
  	parser := new(input)
  
  	// parse
  	result = parser.parseProgram()
  
  	// check last token
  	token := parser.shift()
  	if token.Kind != lexer.TokenEOF {
  		// Parsing ended before EOF
  		errToken(token, "Syntax error")
  	}
  
  	// fix whitespaces
  	processWhitespaces(result)
  
  	// named returned values
  	return
  }
docs: // Parse analyzes given input and returns the AST root node.