18.1.6.1 Emulation of compile()
Description: Emulation of compile()
Keywords: lib

### 18.1.6.1 Emulation of `compile()`

While many useful operations may take place between parsing and bytecode generation, the simplest operation is to do nothing. For this purpose, using the `parser` module to produce an intermediate data structure is equivalent to the code

    >>> code = compile('a + 5', 'file.py', 'eval')
    >>> a = 5
    >>> eval(code)
    10

The equivalent operation using the `parser` module is somewhat longer, and allows the intermediate internal parse tree to be retained as an AST object:

    >>> import parser
    >>> ast = parser.expr('a + 5')
    >>> code = ast.compile('file.py')
    >>> a = 5
    >>> eval(code)
    10

An application which needs both AST and code objects can package this code into readily available functions:

    import parser

    def load_suite(source_string):
        ast = parser.suite(source_string)
        return ast, ast.compile()

    def load_expression(source_string):
        ast = parser.expr(source_string)
        return ast, ast.compile()