// File: philpoore[P]Math/main.cpp
// Function: run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void run(string input) {
    Lexer lexer(input);
    auto tokens = lexer.tokenize();

#ifdef DEBUG
    // Debug tokens
    for (auto token : tokens) cerr << to_string(token) << endl;
#endif

    Parser parser(tokens);

    AstStmts* ast = parser.parse();

#ifdef DEBUG
    // Debug AST
    cerr << to_string(ast) << endl;
    cerr << to_expr_string(ast) << endl;
#endif

    interp.exec(ast);
    // cout << setprecision(16) << value << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
movq %rdi, %rsi
movq %rsi, -0x8(%rbp)
leaq -0x58(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
callq 0x4160
movq -0x1a0(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0xd170
jmp 0xa8f4
leaq -0x58(%rbp), %rdi
callq 0x4200
leaq -0x80(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x7f30
jmp 0xa90c
leaq -0x80(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rdi
callq 0xd1c0
movq %rax, -0x90(%rbp)
movq -0x88(%rbp), %rdi
callq 0xd1f0
movq %rax, -0x98(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0xd220
testb $0x1, %al
jne 0xa959
jmp 0xaa93
leaq -0x90(%rbp), %rdi
callq 0xd260
movq %rax, %rsi
leaq -0xc8(%rbp), %rdi
callq 0xce00
jmp 0xa976
leaq -0x118(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xce00
jmp 0xa98b
leaq -0xe8(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x5540
jmp 0xa9a0
movq 0x15649(%rip), %rdi     # 0x1fff0
leaq -0xe8(%rbp), %rsi
callq 0x42b0
movq %rax, -0x1a8(%rbp)
jmp 0xa9bc
movq -0x1a8(%rbp), %rdi
movq 0x15536(%rip), %rsi     # 0x1ff00
callq 0x4320
jmp 0xa9d1
leaq -0xe8(%rbp), %rdi
callq 0x4200
leaq -0x118(%rbp), %rdi
callq 0xcb70
leaq -0xc8(%rbp), %rdi
callq 0xcb70
leaq -0x90(%rbp), %rdi
callq 0xd280
jmp 0xa93d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x4200
jmp 0xac41
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xac38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xac2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xaa82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xaa76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x4200
leaq -0x118(%rbp), %rdi
callq 0xcb70
leaq -0xc8(%rbp), %rdi
callq 0xcb70
jmp 0xac2f
leaq -0x150(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0xd2a0
jmp 0xaaa5
leaq -0x138(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0xd390
jmp 0xaaba
leaq -0x150(%rbp), %rdi
callq 0xcd80
leaq -0x138(%rbp), %rdi
callq 0x8e70
movq %rax, -0x1b0(%rbp)
jmp 0xaadb
movq -0x1b0(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rsi
leaq -0x178(%rbp), %rdi
callq 0x5fa0
jmp 0xaafe
movq 0x154eb(%rip), %rdi     # 0x1fff0
leaq -0x178(%rbp), %rsi
callq 0x42b0
movq %rax, -0x1b8(%rbp)
jmp 0xab1a
movq -0x1b8(%rbp), %rdi
movq 0x153d8(%rip), %rsi     # 0x1ff00
callq 0x4320
jmp 0xab2f
leaq -0x178(%rbp), %rdi
callq 0x4200
movq -0x158(%rbp), %rsi
leaq -0x198(%rbp), %rdi
callq 0x6820
jmp 0xab50
movq 0x15499(%rip), %rdi     # 0x1fff0
leaq -0x198(%rbp), %rsi
callq 0x42b0
movq %rax, -0x1c0(%rbp)
jmp 0xab6c
movq -0x1c0(%rbp), %rdi
movq 0x15386(%rip), %rsi     # 0x1ff00
callq 0x4320
jmp 0xab81
leaq -0x198(%rbp), %rdi
callq 0x4200
movq -0x158(%rbp), %rsi
leaq 0x15805(%rip), %rdi     # 0x203a0
callq 0x79e0
jmp 0xaba2
leaq -0x138(%rbp), %rdi
callq 0xd3e0
leaq -0x80(%rbp), %rdi
callq 0xcd80
leaq -0x38(%rbp), %rdi
callq 0xd400
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x150(%rbp), %rdi
callq 0xcd80
jmp 0xac2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0xac23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x4200
jmp 0xac23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x4200
leaq -0x138(%rbp), %rdi
callq 0xd3e0
leaq -0x80(%rbp), %rdi
callq 0xcd80
leaq -0x38(%rbp), %rdi
callq 0xd400
movq -0x60(%rbp), %rdi
callq 0x44f0
nopw (%rax,%rax)