<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_to_ast(source_code: str) -> List[ast.stmt]: """ Parses the given vyper source code and returns a list of python AST objects for all statements in the source. Performs pre-processing of source code before parsing as well as post-processing of the resulting AST. :param source_code: The vyper source code to be parsed. :return: The post-processed list of python AST objects for each statement in ``source_code``. """

    class_types, reformatted_code = pre_parse(source_code)

    if '\x00' in reformatted_code:
        raise ParserException('No null bytes (\\x00) allowed in the source code.')

    parsed_ast = ast.parse(reformatted_code)
    annotate_and_optimize_ast(parsed_ast, reformatted_code, class_types)

    return parsed_ast.body