// File: /workspace/github_cpp_makefile_star2_O2/wo3kie[P]calc/calc.cpp
// Function: Calculator<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>::Calculator()
Calculator()
        : Calculator::base_type( expression )
    {
        qi::char_type char_;
        qi::digit_type digit_;
        qi::double_type double_;
        qi::lit_type lit_;
        qi::string_type string_;
        qi::alpha_type alpha_;
        qi::alnum_type alnum_;

        using qi::on_error;
        using qi::fail;
        using qi::lexeme;

        expression =
            relationalExpression
            >> *(   (string_( "&&" ) > relationalExpression )
                |   (string_( "||" ) > relationalExpression )
                )
            ;

        relationalExpression =
            additiveExpression
            >> *(   (string_( "<=" ) > additiveExpression )
                |   (string_( "<" ) > additiveExpression )
                |   (string_( ">=" ) > additiveExpression )
                |   (string_( ">" ) > additiveExpression )
                |   (string_( "!=" ) > additiveExpression )
                |   (string_( "==" ) > additiveExpression )
                )
            ;

        additiveExpression =
            multiplicativeExpression
            >> *(   (char_( '+' ) > multiplicativeExpression )
                |   (char_( '-' ) > multiplicativeExpression )
                )
            ;

        multiplicativeExpression =
            exponentialExpression
            >> *(   ( char_( '*' ) > exponentialExpression )
                |   ( char_( '/' ) > exponentialExpression )
                )
            ;

        exponentialExpression =
            unaryExpression
            >> -( '^' >> exponentialExpression );
        
        unaryExpression =
                ( char_( '-' ) > unaryExpression )
            |   ( char_( '+' ) > unaryExpression )
            |   ( char_( '!' ) > unaryExpression )
            |   primaryExpression
            ;

        primaryExpression =
                double_
            |   arg
            |   functionCall
            |   '(' > expression > ')'
            ;

        arg =
            ( '_' > digit_ )
            ;

        functionCall =
            ( +alnum_ > '(' > -unaryExpression > ')' )
            ;

        BOOST_SPIRIT_DEBUG_NODE( expression );
        BOOST_SPIRIT_DEBUG_NODE( relationalExpression );
        BOOST_SPIRIT_DEBUG_NODE( additiveExpression );
        BOOST_SPIRIT_DEBUG_NODE( multiplicativeExpression );
        BOOST_SPIRIT_DEBUG_NODE( exponentialExpression );
        BOOST_SPIRIT_DEBUG_NODE( unaryExpression );
        BOOST_SPIRIT_DEBUG_NODE( primaryExpression );
        BOOST_SPIRIT_DEBUG_NODE( arg );
        BOOST_SPIRIT_DEBUG_NODE( functionCall );

        on_error< fail >(
            expression,
            error_handler( qi::_4_type(), qi::_3_type(), qi::_2_type() )
        );
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movq %rdi, %r14
leaq 0xbd0a(%rip), %rsi      # 0x12c17
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x28(%r14), %r15
movq %r15, (%r14)
leaq 0x8(%r14), %rbx
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq 0x32a0
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbce4(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
movq %rbx, 0xd8(%rsp)
callq 0x5756
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x79d2
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbcb1(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
movq %r15, 0x80(%rsp)
callq 0x5756
leaq 0x70(%r14), %r12
leaq 0x10(%rsp), %rsi
movq %r12, %rdi
callq 0x79d2
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbc7a(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
movq %r12, 0xd0(%rsp)
callq 0x5756
leaq 0xb8(%r14), %rdi
leaq 0x10(%rsp), %rsi
movq %rdi, 0xc8(%rsp)
callq 0x79d2
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbc3b(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x100(%r14), %rdi
leaq 0x10(%rsp), %rsi
movq %rdi, 0xc0(%rsp)
callq 0x79d2
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbc04(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x148(%r14), %r15
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x79ea
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbbd2(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
movq %r15, 0xb8(%rsp)
callq 0x5756
leaq 0x190(%r14), %rdi
leaq 0x10(%rsp), %rsi
movq %rdi, 0xb0(%rsp)
callq 0x7a02
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbb93(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x1d8(%r14), %r15
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x7a02
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbb61(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
movq %r15, 0xa8(%rsp)
callq 0x5756
leaq 0x220(%r14), %r15
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0x7a1a
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xbb27(%rip), %rsi      # 0x12c27
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
movq %r15, 0xa0(%rsp)
callq 0x5756
leaq 0x268(%r14), %rdi
leaq 0x10(%rsp), %rsi
movq %rdi, 0x98(%rsp)
callq 0x7a32
leaq 0x10(%rsp), %r13
movq %r13, %rdi
callq 0x30c0
movb $0x0, 0x37(%rsp)
leaq 0xbaed(%rip), %rax      # 0x12c34
leaq 0x48(%rsp), %rdx
movq %rax, (%rdx)
leaq 0x38(%rsp), %rcx
movq %rdx, (%rcx)
movq %r12, 0x8(%rcx)
leaq 0xbad5(%rip), %rax      # 0x12c37
leaq 0x70(%rsp), %rbx
movq %rax, (%rbx)
leaq 0x60(%rsp), %rbp
movq %rbx, (%rbp)
movq %r12, 0x8(%rbp)
movq %rcx, (%rsp)
movq %rbp, 0x8(%rsp)
leaq 0x88(%rsp), %r15
movq %rsp, %rax
movq %rax, (%r15)
movq %r12, (%r13)
movq %r15, 0x8(%r13)
leaq 0x10(%rsp), %rsi
movq 0x80(%rsp), %rdi
callq 0x7b3c
leaq 0xba8b(%rip), %rax      # 0x12c3a
leaq 0xf0(%rsp), %rcx
movq %rax, (%rcx)
movq %rcx, 0x88(%rsp)
movq 0xc8(%rsp), %r13
movq %r13, 0x90(%rsp)
leaq 0xba64(%rip), %rax      # 0x12c3d
leaq 0x188(%rsp), %rcx
movq %rax, (%rcx)
leaq 0xe0(%rsp), %rax
movq %rcx, (%rax)
movq %r13, 0x8(%rax)
movq %r15, 0x70(%rsp)
movq %rax, 0x78(%rsp)
leaq 0xba3b(%rip), %rax      # 0x12c3f
leaq 0x168(%rsp), %rcx
movq %rax, (%rcx)
leaq 0x178(%rsp), %rax
movq %rcx, (%rax)
movq %r13, 0x8(%rax)
movq %rbx, 0x60(%rsp)
movq %rax, 0x68(%rsp)
leaq 0xba13(%rip), %rax      # 0x12c42
leaq 0x148(%rsp), %rcx
movq %rax, (%rcx)
leaq 0x158(%rsp), %rax
movq %rcx, (%rax)
movq %r13, 0x8(%rax)
movq %rbp, 0x48(%rsp)
movq %rax, 0x50(%rsp)
leaq 0xb9ea(%rip), %rax      # 0x12c44
leaq 0x128(%rsp), %rcx
movq %rax, (%rcx)
leaq 0x138(%rsp), %rax
movq %rcx, (%rax)
movq %r13, 0x8(%rax)
leaq 0x48(%rsp), %rcx
movq %rcx, 0x38(%rsp)
movq %rax, 0x40(%rsp)
leaq 0xb9bd(%rip), %rax      # 0x12c47
leaq 0x108(%rsp), %rcx
movq %rax, (%rcx)
leaq 0x118(%rsp), %rax
movq %rcx, (%rax)
movq %r13, 0x8(%rax)
leaq 0x38(%rsp), %rcx
movq %rcx, (%rsp)
movq %rax, 0x8(%rsp)
leaq 0x100(%rsp), %rax
movq %rsp, %rcx
movq %rcx, (%rax)
leaq 0x10(%rsp), %rsi
movq %r13, (%rsi)
movq %rax, 0x8(%rsi)
movq %r12, %rdi
callq 0xa32e
movb $0x2b, 0x70(%rsp)
movq %rbx, 0x38(%rsp)
movq 0xc0(%rsp), %r12
movq %r12, 0x40(%rsp)
movb $0x2d, 0x88(%rsp)
movq %r15, 0x48(%rsp)
movq %r12, 0x50(%rsp)
leaq 0x38(%rsp), %rax
movq %rax, (%rsp)
leaq 0x48(%rsp), %rax
movq %rax, 0x8(%rsp)
movq %rsp, %rax
movq %rax, 0x60(%rsp)
leaq 0x10(%rsp), %rsi
movq %r12, (%rsi)
movq %rbp, 0x8(%rsi)
movq %r13, %rdi
callq 0xb1ae
movb $0x2a, 0x70(%rsp)
movq %rbx, 0x38(%rsp)
movq 0xb8(%rsp), %r13
movq %r13, 0x40(%rsp)
movb $0x2f, 0x88(%rsp)
movq %r15, 0x48(%rsp)
movq %r13, 0x50(%rsp)
leaq 0x38(%rsp), %rax
movq %rax, (%rsp)
leaq 0x48(%rsp), %rax
movq %rax, 0x8(%rsp)
movq %rsp, %rax
movq %rax, 0x60(%rsp)
leaq 0x10(%rsp), %rsi
movq %r13, (%rsi)
movq %rbp, 0x8(%rsi)
movq %r12, %rdi
callq 0xbb96
movb $0x5e, 0x48(%rsp)
leaq 0x48(%rsp), %rax
movq %rax, (%rsp)
movq %r13, 0x8(%rsp)
movq %rsp, %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rsi
movq 0xb0(%rsp), %r12
movq %r12, (%rsi)
leaq 0x38(%rsp), %rax
movq %rax, 0x8(%rsi)
movq %r13, %rdi
callq 0xc542
movb $0x2d, 0x88(%rsp)
movq %r15, 0x48(%rsp)
movq %r12, 0x50(%rsp)
movb $0x2b, 0xf0(%rsp)
leaq 0xf0(%rsp), %rax
movq %rax, 0x60(%rsp)
movq %r12, 0x68(%rsp)
leaq 0x48(%rsp), %rbx
movq %rbx, 0x38(%rsp)
leaq 0x60(%rsp), %rbp
movq %rbp, 0x40(%rsp)
movb $0x21, 0xe0(%rsp)
leaq 0xe0(%rsp), %rax
movq %rax, 0x70(%rsp)
movq %r12, 0x78(%rsp)
leaq 0x38(%rsp), %rax
movq %rax, (%rsp)
movq %r15, %rbp
leaq 0x70(%rsp), %r15
movq %r15, 0x8(%rsp)
leaq 0x10(%rsp), %rsi
movq %rsp, %rax
movq %rax, (%rsi)
movq 0xa8(%rsp), %r13
movq %r13, 0x8(%rsi)
movq %r12, %rdi
callq 0xccfe
movq %rbx, %rcx
leaq 0x37(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0xa0(%rsp), %rbx
movq %rbx, 0x40(%rsp)
leaq 0x38(%rsp), %rax
movq %rax, (%rsp)
movq 0x98(%rsp), %rax
movq %rax, 0x8(%rsp)
movb $0x28, 0x70(%rsp)
movq %r15, 0x60(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x68(%rsp)
movb $0x29, 0x88(%rsp)
leaq 0x60(%rsp), %rax
movq %rax, 0x48(%rsp)
movq %rbp, 0x50(%rsp)
leaq 0x10(%rsp), %rsi
movq %rsp, %rax
movq %rax, (%rsi)
movq %rcx, 0x8(%rsi)
movq %r13, %rdi
callq 0xd852
movb $0x5f, (%rsp)
leaq 0x10(%rsp), %rsi
movq %rsp, %r15
movq %r15, (%rsi)
leaq 0x5f(%rsp), %rax
movq %rax, 0x8(%rsi)
movq %rbx, %rdi
callq 0xf206
leaq 0x5e(%rsp), %rax
movq %rax, 0x48(%rsp)
movb $0x28, 0x70(%rsp)
leaq 0x48(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x70(%rsp), %rax
movq %rax, 0x40(%rsp)
movq %r12, 0x60(%rsp)
leaq 0x38(%rsp), %rax
movq %rax, (%rsp)
leaq 0x60(%rsp), %rax
movq %rax, 0x8(%rsp)
movb $0x29, 0x88(%rsp)
leaq 0x10(%rsp), %rsi
movq %r15, (%rsi)
leaq 0x88(%rsp), %rax
movq %rax, 0x8(%rsi)
movq 0x98(%rsp), %rdi
callq 0xf788
leaq 0xb6fb(%rip), %rsi      # 0x12c4a
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x30(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb6da(%rip), %rsi      # 0x12c55
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x78(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb6c3(%rip), %rsi      # 0x12c6a
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0xc0(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb6a7(%rip), %rsi      # 0x12c7d
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x108(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb691(%rip), %rsi      # 0x12c96
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x150(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb678(%rip), %rsi      # 0x12cac
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x198(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb659(%rip), %rsi      # 0x12cbc
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x1e0(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb63c(%rip), %rsi      # 0x12cce
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
leaq 0x228(%r14), %rdi
leaq 0x10(%rsp), %rsi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
leaq 0xb611(%rip), %rsi      # 0x12cd2
leaq 0x10(%rsp), %rdi
movq %rsp, %rdx
callq 0x5756
addq $0x270, %r14            # imm = 0x270
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0x3110
leaq 0x10(%rsp), %rdi
callq 0x30c0
movq 0x80(%rsp), %rdi
callq 0x7a49
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x774e
jmp 0x772d
jmp 0x774e
jmp 0x772d
jmp 0x774e
jmp 0x772d
jmp 0x774e
jmp 0x772d
jmp 0x774e
jmp 0x772d
jmp 0x774e
jmp 0x772d
jmp 0x774e
jmp 0x772d
jmp 0x774e
jmp 0x772d
jmp 0x774e
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x7751
jmp 0x774e
jmp 0x774e
jmp 0x774e
jmp 0x774e
jmp 0x774e
jmp 0x774e
jmp 0x774e
jmp 0x774e
jmp 0x774e
movq %rax, %r14
movq 0x98(%rsp), %rdi
callq 0x7aba
movq 0xa0(%rsp), %rdi
callq 0x7ad4
movq 0xa8(%rsp), %rdi
callq 0x7aee
movq 0xb0(%rsp), %rdi
callq 0x7aee
movq 0xb8(%rsp), %rdi
callq 0x7b08
movq 0xc0(%rsp), %rdi
callq 0x7b22
movq 0xc8(%rsp), %rdi
callq 0x7b22
movq 0xd0(%rsp), %rdi
callq 0x7b22
movq 0x80(%rsp), %rdi
callq 0x7b22
movq 0xd8(%rsp), %rdi
callq 0x30c0
movq %r14, %rdi
callq 0x33a0
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x775e
movq %rax, %r14
jmp 0x775e
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x776b
movq %rax, %r14
jmp 0x776b
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x7778
movq %rax, %r14
jmp 0x7778
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x7785
movq %rax, %r14
jmp 0x7785
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x7792
movq %rax, %r14
jmp 0x7792
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x779f
movq %rax, %r14
jmp 0x779f
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x77ac
movq %rax, %r14
jmp 0x77ac
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x77b9
movq %rax, %r14
jmp 0x77b9
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x30c0
jmp 0x77c6
movq %rax, %r14
jmp 0x77c6
movq %rax, %r14
leaq 0x10(%rsp), %rdi
jmp 0x77ce
movq %rax, %r14
jmp 0x77d3