// File: /workspace/github_cpp_makefile_star2_O3/sighingnow[P]compile-pascal/pl0_parser.cpp
// Function: pl0_identify_fn(input_t*)
pair<int, pl0_ast_identify *> pl0_identify_fn(input_t *text) {
    static std::array<string, 17> keywords = {{
        "begin", "end", "for", "downto", "to", "do", "if", "then", "else", "case",
        "const", "var", "array", "of", "case", "integer", "char"}};
    function<string (pair<pl0_ast_alnum *, vector<pl0_ast_alnum *>>)> fn = [](pair<pl0_ast_alnum *, vector<pl0_ast_alnum *>> const & p) {
        string ans = string(1, p.first ? p.first->val : 0); for (pl0_ast_alnum *c: p.second) { ans.push_back(c ? c->val : 0); } return ans;
    };
    auto parser = pl0_alpha + (++(pl0_alpha | pl0_digit));
    auto res = (spaces >> (parser / fn) << spaces)(text);
    pair<int, pl0_ast_identify *> ans;
    if (std::get<0>(res) != -1 && std::none_of(keywords.begin(), keywords.end(), [&, res](string s) { return s == std::get<1>(res); })) {
        ans = make_pair(std::get<0>(res), new pl0_ast_identify(text->locate(), std::get<1>(res)));
    }
    else {
        ans = make_pair(-1, new pl0_ast_identify(text->locate(), ""));
    }
    if (verbose) {
        cout << "parsing: Identifier" << endl;
    }
    return ans;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x608, %rsp            # imm = 0x608
movq %rdi, %rbx
movb 0xaf11a(%rip), %al      # 0xba938
testb %al, %al
je 0xbee6
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
leaq 0xa767(%rip), %rax      # 0x15f9c
movq %rax, 0x28(%rsp)
leaq 0xa7eb(%rip), %rax      # 0x1602c
movq %rax, 0x20(%rsp)
leaq 0xafccb(%rip), %rsi     # 0xbb518
leaq 0xafd0c(%rip), %rdx     # 0xbb560
leaq 0x2d8(%rsp), %rdi
callq 0x26736
leaq 0x110(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
callq 0x26548
leaq 0xafc9b(%rip), %rsi     # 0xbb518
leaq 0x530(%rsp), %rdi
leaq 0x110(%rsp), %rdx
callq 0x27a7a
leaq 0x158(%rsp), %rdi
callq 0x26610
leaq 0x110(%rsp), %rdi
callq 0x26610
leaq 0x320(%rsp), %rdi
callq 0x26610
leaq 0x2d8(%rsp), %rdi
callq 0x26610
leaq 0x438(%rsp), %rdi
leaq 0x530(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x27e6e
leaq 0xaedc9(%rip), %rsi     # 0xba6b0
leaq 0x2d8(%rsp), %rdi
leaq 0x438(%rsp), %rdx
callq 0x27d40
leaq 0xaedad(%rip), %rdx     # 0xba6b0
leaq 0x110(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
callq 0x27b04
leaq 0x38(%rsp), %rdi
leaq 0x110(%rsp), %rsi
movq %rbx, %rdx
callq 0x187d0
leaq 0x110(%rsp), %rdi
callq 0x18d08
movq 0x428(%rsp), %rax
testq %rax, %rax
je 0xb959
leaq 0x418(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x340(%rsp), %r14
leaq 0x388(%rsp), %r15
leaq 0x3d0(%rsp), %rdi
callq 0x26610
movq %r15, %rdi
callq 0x26610
movq %r14, %rdi
callq 0x26610
movq -0x58(%r15), %rax
testq %rax, %rax
je 0xb9a1
leaq 0x320(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x2d8(%rsp), %rdi
callq 0x161f6
movq 0x520(%rsp), %rax
testq %rax, %rax
je 0xb9cd
leaq 0x510(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
leaq 0x480(%rsp), %r14
leaq 0x4c8(%rsp), %rdi
callq 0x26610
movq %r14, %rdi
callq 0x26610
leaq 0x438(%rsp), %rdi
callq 0x26610
cmpl $-0x1, 0x78(%rsp)
je 0xbd9b
leaq 0x80(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x27f16
movl 0x78(%rsp), %eax
leaq 0x80(%rsp), %rsi
movl %eax, 0x40(%rsi)
leaq 0xc8(%rsp), %rdi
callq 0x27f16
movl 0xc0(%rsp), %eax
leaq 0xc8(%rsp), %rsi
movl %eax, 0x40(%rsi)
leaq 0x438(%rsp), %rdi
callq 0x27f16
movl 0x108(%rsp), %eax
leaq 0x438(%rsp), %rsi
movl %eax, 0x40(%rsi)
leaq 0x110(%rsp), %rdi
callq 0x3d2fe
movl 0x478(%rsp), %eax
leaq 0x110(%rsp), %rsi
movl %eax, 0x40(%rsi)
leaq 0x2d8(%rsp), %rdi
callq 0x3d2fe
leaq 0x140(%rsp), %r15
movl 0x10(%r15), %eax
movl %eax, 0x318(%rsp)
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0xbab9
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x120(%rsp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0xbadb
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x5260
movq %rbx, 0x8(%rsp)
leaq 0x110(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
callq 0x27f16
movl 0x318(%rsp), %eax
leaq 0x110(%rsp), %r14
movl %eax, 0x40(%r14)
movl $0x5, %ebx
xorl %r13d, %r13d
leaq 0xaec01(%rip), %rbp     # 0xba718
movq (%r13,%rbp), %rsi
movq 0x8(%r13,%rbp), %rdx
movq %r14, %rdi
callq 0x1607a
testb %al, %al
jne 0xbba5
movq 0x20(%r13,%rbp), %rsi
movq 0x28(%r13,%rbp), %rdx
movq %r14, %rdi
callq 0x1607a
testb %al, %al
jne 0xbbb0
movq 0x40(%r13,%rbp), %rsi
movq 0x48(%r13,%rbp), %rdx
movq %r14, %rdi
callq 0x1607a
testb %al, %al
jne 0xbbbd
movq 0x60(%r13,%rbp), %rsi
movq 0x68(%r13,%rbp), %rdx
movq %r14, %rdi
callq 0x1607a
testb %al, %al
jne 0xbbca
decq %rbx
subq $-0x80, %r13
cmpq $0x1, %rbx
ja 0xbb17
movl $0x220, %eax            # imm = 0x220
subq %r13, %rax
sarq $0x5, %rax
movq %rbp, %r14
addq %r13, %r14
cmpq $0x3, %rax
je 0xbbd7
cmpq $0x2, %rax
je 0xbbfd
cmpq $0x1, %rax
je 0xbc19
jmp 0xbc31
addq %r13, %rbp
movq %rbp, %r14
jmp 0xbc38
leaq 0x20(,%rbp), %r14
addq %r13, %r14
jmp 0xbc38
leaq 0x40(,%rbp), %r14
addq %r13, %r14
jmp 0xbc38
leaq 0x60(,%rbp), %r14
addq %r13, %r14
jmp 0xbc38
movq (%r13,%rbp), %rsi
movq 0x8(%r13,%rbp), %rdx
leaq 0x110(%rsp), %rdi
callq 0x1607a
testb %al, %al
jne 0xbc38
leaq 0x20(,%rbp), %r14
addq %r13, %r14
movq (%r14), %rsi
movq 0x8(%r14), %rdx
leaq 0x110(%rsp), %rdi
callq 0x1607a
testb %al, %al
jne 0xbc38
addq $0x20, %r14
movq (%r14), %rsi
movq 0x8(%r14), %rdx
leaq 0x110(%rsp), %rdi
callq 0x1607a
testb %al, %al
jne 0xbc38
leaq 0xaed00(%rip), %r14     # 0xba938
movq 0x130(%rsp), %rdi
cmpq %r15, %rdi
je 0xbc55
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x110(%rsp), %rdi
cmpq %r12, %rdi
je 0xbc72
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x308(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbc93
movq 0x308(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x2e8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbcb4
movq 0x2e8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x468(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbcd5
movq 0x468(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x448(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbcf6
movq 0x448(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xf8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbd17
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xd8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbd38
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xb0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbd59
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x90(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbd86
leaq 0xaebc7(%rip), %rbx     # 0xba938
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
cmpq %rbx, %r14
jmp 0xbd90
leaq 0xaebab(%rip), %rax     # 0xba938
cmpq %rax, %r14
movq 0x8(%rsp), %rbx
je 0xbe1d
movl $0x28, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rbx
leaq 0x120(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x87750(%rip), %rdx     # 0x9350f
leaq 0x110(%rsp), %rdi
movq %rdx, %rsi
callq 0x253d0
movq %rbx, (%r14)
leaq 0x8(%r14), %rdi
movq %r14, %rax
addq $0x18, %rax
movq %rax, 0x8(%r14)
movq 0x110(%rsp), %rsi
movq 0x118(%rsp), %rdx
addq %rsi, %rdx
callq 0x351dc
movq 0x110(%rsp), %rdi
cmpq %r15, %rdi
je 0xbe16
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x5260
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
jmp 0xbe56
movl $0x28, %edi
callq 0x5250
movq %rax, %r14
movq 0x8(%rbx), %rax
movq %rax, (%r14)
leaq 0x8(%r14), %rdi
movq %r14, %rax
addq $0x18, %rax
movq %rax, 0x8(%r14)
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
addq %rsi, %rdx
callq 0x351dc
movl 0x78(%rsp), %ebx
leaq 0x68(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbe71
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x48(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xbe8c
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x578(%rsp), %r15
leaq 0x5c0(%rsp), %rdi
callq 0x26610
movq %r15, %rdi
callq 0x26610
leaq 0x530(%rsp), %rdi
callq 0x26610
movq 0x20(%rsp), %rax
testq %rax, %rax
je 0xbecf
leaq 0x10(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movl %ebx, %eax
movq %r14, %rdx
addq $0x608, %rsp            # imm = 0x608
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xaea4b(%rip), %rdi     # 0xba938
callq 0x5400
testl %eax, %eax
je 0xb826
leaq 0xae827(%rip), %rax     # 0xba728
movq %rax, 0xae810(%rip)     # 0xba718
leaq 0xae809(%rip), %r14     # 0xba718
leaq 0x851cb(%rip), %rsi     # 0x910e1
leaq 0x851c9(%rip), %rdx     # 0x910e6
movq %r14, %rdi
callq 0x253d0
leaq 0xae81c(%rip), %rax     # 0xba748
movq %rax, 0xae805(%rip)     # 0xba738
leaq 0xae7fe(%rip), %r15     # 0xba738
leaq 0x851a6(%rip), %rsi     # 0x910e7
leaq 0x851a2(%rip), %rdx     # 0x910ea
movq %r15, %rdi
callq 0x253d0
leaq 0xae811(%rip), %rax     # 0xba768
movq %rax, 0xae7fa(%rip)     # 0xba758
leaq 0xae7f3(%rip), %r15     # 0xba758
leaq 0x8517f(%rip), %rsi     # 0x910eb
leaq 0x8517b(%rip), %rdx     # 0x910ee
movq %r15, %rdi
callq 0x253d0
leaq 0xae806(%rip), %rax     # 0xba788
movq %rax, 0xae7ef(%rip)     # 0xba778
leaq 0xae7e8(%rip), %r15     # 0xba778
leaq 0x85158(%rip), %rsi     # 0x910ef
leaq 0x85157(%rip), %rdx     # 0x910f5
movq %r15, %rdi
callq 0x253d0
leaq 0xae7fb(%rip), %rax     # 0xba7a8
movq %rax, 0xae7e4(%rip)     # 0xba798
leaq 0xae7dd(%rip), %r15     # 0xba798
leaq 0x85131(%rip), %rsi     # 0x910f3
leaq 0x8512c(%rip), %rdx     # 0x910f5
movq %r15, %rdi
callq 0x253d0
leaq 0xae7f0(%rip), %rax     # 0xba7c8
movq %rax, 0xae7d9(%rip)     # 0xba7b8
leaq 0xae7d2(%rip), %r15     # 0xba7b8
leaq 0x85109(%rip), %rsi     # 0x910f6
leaq 0x85104(%rip), %rdx     # 0x910f8
movq %r15, %rdi
callq 0x253d0
leaq 0xae7e5(%rip), %rax     # 0xba7e8
movq %rax, 0xae7ce(%rip)     # 0xba7d8
leaq 0xae7c7(%rip), %r15     # 0xba7d8
leaq 0x850e1(%rip), %rsi     # 0x910f9
leaq 0x850dc(%rip), %rdx     # 0x910fb
movq %r15, %rdi
callq 0x253d0
leaq 0xae7da(%rip), %rax     # 0xba808
movq %rax, 0xae7c3(%rip)     # 0xba7f8
leaq 0xae7bc(%rip), %r15     # 0xba7f8
leaq 0x850b9(%rip), %rsi     # 0x910fc
leaq 0x850b6(%rip), %rdx     # 0x91100
movq %r15, %rdi
callq 0x253d0
leaq 0xae7cf(%rip), %rax     # 0xba828
movq %rax, 0xae7b8(%rip)     # 0xba818
leaq 0xae7b1(%rip), %r15     # 0xba818
leaq 0x85093(%rip), %rsi     # 0x91101
leaq 0x85090(%rip), %rdx     # 0x91105
movq %r15, %rdi
callq 0x253d0
leaq 0xae7c4(%rip), %rax     # 0xba848
movq %rax, 0xae7ad(%rip)     # 0xba838
leaq 0xae7a6(%rip), %r15     # 0xba838
leaq 0x8506d(%rip), %rsi     # 0x91106
leaq 0x8506a(%rip), %rdx     # 0x9110a
movq %r15, %rdi
callq 0x253d0
leaq 0xae7b9(%rip), %rax     # 0xba868
movq %rax, 0xae7a2(%rip)     # 0xba858
leaq 0xae79b(%rip), %r15     # 0xba858
leaq 0x85790(%rip), %rsi     # 0x91854
leaq 0x8578e(%rip), %rdx     # 0x91859
movq %r15, %rdi
callq 0x253d0
leaq 0xae7ae(%rip), %rax     # 0xba888
movq %rax, 0xae797(%rip)     # 0xba878
leaq 0xae790(%rip), %r15     # 0xba878
leaq 0x8501c(%rip), %rsi     # 0x9110b
leaq 0x85018(%rip), %rdx     # 0x9110e
movq %r15, %rdi
callq 0x253d0
leaq 0xae7a3(%rip), %rax     # 0xba8a8
movq %rax, 0xae78c(%rip)     # 0xba898
leaq 0xae785(%rip), %r15     # 0xba898
leaq 0x86958(%rip), %rsi     # 0x92a72
leaq 0x86956(%rip), %rdx     # 0x92a77
movq %r15, %rdi
callq 0x253d0
leaq 0xae798(%rip), %rax     # 0xba8c8
movq %rax, 0xae781(%rip)     # 0xba8b8
leaq 0xae77a(%rip), %r15     # 0xba8b8
leaq 0x84f10(%rip), %rsi     # 0x91055
leaq 0x84f0b(%rip), %rdx     # 0x91057
movq %r15, %rdi
callq 0x253d0
leaq 0xae78d(%rip), %rax     # 0xba8e8
movq %rax, 0xae776(%rip)     # 0xba8d8
leaq 0xae76f(%rip), %r15     # 0xba8d8
leaq 0x84f96(%rip), %rsi     # 0x91106
leaq 0x84f93(%rip), %rdx     # 0x9110a
movq %r15, %rdi
callq 0x253d0
leaq 0xae782(%rip), %rax     # 0xba908
movq %rax, 0xae76b(%rip)     # 0xba8f8
leaq 0xae764(%rip), %r15     # 0xba8f8
leaq 0x84f74(%rip), %rsi     # 0x9110f
leaq 0x84f74(%rip), %rdx     # 0x91116
movq %r15, %rdi
callq 0x253d0
leaq 0xae777(%rip), %rax     # 0xba928
movq %rax, 0xae760(%rip)     # 0xba918
leaq 0xae759(%rip), %r15     # 0xba918
leaq 0x87005(%rip), %rsi     # 0x931cb
leaq 0x87002(%rip), %rdx     # 0x931cf
movq %r15, %rdi
callq 0x253d0
leaq 0xc5b4(%rip), %rdi      # 0x18790
leaq 0xae535(%rip), %rsi     # 0xba718
leaq 0xae03e(%rip), %rdx     # 0xba228
callq 0x5200
leaq 0xae742(%rip), %rdi     # 0xba938
callq 0x5180
jmp 0xb826
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
jmp 0xc21e
movq %rax, %rbx
addq $-0x10, %r15
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0xc239
movq (%r15), %rsi
incq %rsi
callq 0x5260
leaq -0x20(%r15), %rax
addq $-0x10, %r15
cmpq %r14, %r15
movq %rax, %r15
jne 0xc225
leaq 0xae6e8(%rip), %rdi     # 0xba938
callq 0x5170
jmp 0xc3ed
movq %rax, %rbx
jmp 0xc249
jmp 0xc379
jmp 0xc2d8
jmp 0xc2ed
jmp 0xc3f5
movq %rax, %rbx
jmp 0xc389
movq %rax, %rbx
leaq 0x110(%rsp), %rdi
callq 0xc3fe
jmp 0xc396
movq %rax, %rbx
jmp 0xc396
movq %rax, %rbx
jmp 0xc3a3
movq %rax, %rbx
jmp 0xc3b0
jmp 0xc2ed
jmp 0xc3f5
jmp 0xc3f5
jmp 0xc3f5
movq %rax, %rbx
movq 0x110(%rsp), %rdi
cmpq %r15, %rdi
je 0xc2db
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0xc2db
movq %rax, %rbx
movl $0x28, %esi
movq %r14, %rdi
callq 0x5260
jmp 0xc3bd
movq %rax, %rbx
jmp 0xc3bd
movq %rax, %rbx
leaq 0x110(%rsp), %rdi
callq 0x18d08
jmp 0xc30a
movq %rax, %rbx
leaq 0x2d8(%rsp), %rdi
callq 0x18dae
jmp 0xc31c
movq %rax, %rbx
leaq 0x438(%rsp), %rdi
callq 0x18e28
jmp 0xc3c7
movq %rax, %rbx
jmp 0xc3c7
movq %rax, %rbx
leaq 0x158(%rsp), %rdi
callq 0x26610
leaq 0x110(%rsp), %rdi
callq 0x26610
jmp 0xc358
movq %rax, %rbx
leaq 0x320(%rsp), %rdi
callq 0x26610
leaq 0x2d8(%rsp), %rdi
callq 0x26610
jmp 0xc3d4
movq %rax, %rbx
jmp 0xc3d4
movq %rax, %rbx
leaq 0x110(%rsp), %rdi
callq 0x16044
leaq 0x2d8(%rsp), %rdi
callq 0x16044
leaq 0x438(%rsp), %rdi
callq 0xc3fe
leaq 0xc8(%rsp), %rdi
callq 0xc3fe
leaq 0x80(%rsp), %rdi
callq 0xc3fe
leaq 0x38(%rsp), %rdi
callq 0x17a9c
leaq 0x530(%rsp), %rdi
callq 0x18e7c
movq 0x20(%rsp), %rax
testq %rax, %rax
je 0xc3ed
leaq 0x10(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq %rbx, %rdi
callq 0x53d0
movq %rax, %rdi
callq 0x253c4
nop