// File: /workspace/github_c_makefile_star2_O0/sharmaeklavya2[P]cerplag/lexer.c
// Function: lexer_main
int lexer_main(FILE* ifp, FILE* ofp, int verbosity, token_printer tp)
{
    if(verbosity >= 4)
    {
        fprintf(stderr, "tokens:\n");
        for(int i=0; i<NUM_TOKENS; ++i)
            fprintf(stderr, "%s\n", TOK_STRS[i]);
        fprintf(stderr, "\ncclasses:\n");
        for(int i=0; i<NUM_CCLASSES; ++i)
            fprintf(stderr, "%s\n", CCLASS_STRS[i]);
        fprintf(stderr, "\nstates:\n");
        for(int i=0; i<NUM_STATES; ++i)
            fprintf(stderr, "%s\n", STATE_STRS[i]);
        fprintf(stderr, "\nactions:\n");
        for(int i=0; i<NUM_ACTIONS; ++i)
            fprintf(stderr, "%s\n", ACTION_STRS[i]);
    }

    init_lexer();

    if(verbosity >= 3)
    {
        int i, j;
        fprintf(stderr, "states: %d, cclasses: %d\n", NUM_STATES, NUM_CCLASSES);
        fprintf(stderr, "\nstate_table:\n");

        fprintf(stderr, "%7s", "");
        for(j=0; j<NUM_CCLASSES; ++j)
            fprintf(stderr, " %7s", CCLASS_STRS[j]);
        fputc('\n', stderr);
        for(i=0; i<NUM_STATES; ++i)
        {
            fprintf(stderr, "%7s", STATE_STRS[i]);
            for(j=0; j<NUM_CCLASSES; ++j)
                fprintf(stderr, " %7s", STATE_STRS[state_table[i][j]]);
            fputc('\n', stderr);
        }

        fprintf(stderr, "\naction_table:\n");
        fprintf(stderr, "%7s", "");
        for(j=0; j<NUM_CCLASSES; ++j)
            fprintf(stderr, " %7s", CCLASS_STRS[j]);
        fputc('\n', stderr);
        for(i=0; i<NUM_STATES; ++i)
        {
            fprintf(stderr, "%7s", STATE_STRS[i]);
            for(j=0; j<NUM_CCLASSES; ++j)
                fprintf(stderr, " %7s", ACTION_STRS[action_table[i][j]]);
            fputc('\n', stderr);
        }
    }

    Token tok;
    Dfa dfa;
    init_dfa(&dfa);
    init_token(&tok);
    bool debug = (verbosity >= 1);
    do
    {
        get_token(ifp, &dfa, &tok, debug);
        tp(&tok, ofp);
    }
    while(tok.tid != T_EOF);

    destroy_lexer();

    if(dfa.error_count > 0)
        return 1;
    else
        return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq %rcx, -0x28(%rbp)
cmpl $0x4, -0x1c(%rbp)
jl 0x5f92
movq 0x141bd(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe890(%rip), %rsi      # 0x146d5
movb $0x0, %al
callq 0x3120
movl $0x0, -0x2c(%rbp)
cmpl $0x3a, -0x2c(%rbp)
jge 0x5e8b
movq 0x14198(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x2c(%rbp), %rcx
leaq 0x14302(%rip), %rax     # 0x1a170
movq (%rax,%rcx,8), %rdx
leaq 0xec86(%rip), %rsi      # 0x14aff
movb $0x0, %al
callq 0x3120
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x5e53
movq 0x14166(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe842(%rip), %rsi      # 0x146de
movb $0x0, %al
callq 0x3120
movl $0x0, -0x30(%rbp)
cmpl $0x11, -0x30(%rbp)
jge 0x5ee2
movq 0x14141(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x30(%rbp), %rcx
leaq 0x1464b(%rip), %rax     # 0x1a510
movq (%rax,%rcx,8), %rdx
leaq 0xec2f(%rip), %rsi      # 0x14aff
movb $0x0, %al
callq 0x3120
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x5eaa
movq 0x1410f(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe7f7(%rip), %rsi      # 0x146ea
movb $0x0, %al
callq 0x3120
movl $0x0, -0x34(%rbp)
cmpl $0x16, -0x34(%rbp)
jge 0x5f39
movq 0x140ea(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x34(%rbp), %rcx
leaq 0x146c4(%rip), %rax     # 0x1a5e0
movq (%rax,%rcx,8), %rdx
leaq 0xebd8(%rip), %rsi      # 0x14aff
movb $0x0, %al
callq 0x3120
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x5f01
movq 0x140b8(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe7aa(%rip), %rsi      # 0x146f4
movb $0x0, %al
callq 0x3120
movl $0x0, -0x38(%rbp)
cmpl $0x8, -0x38(%rbp)
jge 0x5f90
movq 0x14093(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x38(%rbp), %rcx
leaq 0x1462d(%rip), %rax     # 0x1a5a0
movq (%rax,%rcx,8), %rdx
leaq 0xeb81(%rip), %rsi      # 0x14aff
movb $0x0, %al
callq 0x3120
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x5f58
jmp 0x5f92
callq 0x51c0
cmpl $0x3, -0x1c(%rbp)
jl 0x6239
movq 0x14050(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe74d(%rip), %rsi      # 0x146ff
movl $0x16, %edx
movl $0x11, %ecx
movb $0x0, %al
callq 0x3120
movq 0x1402e(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe745(%rip), %rsi      # 0x14719
movb $0x0, %al
callq 0x3120
movq 0x14016(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe73d(%rip), %rsi      # 0x14729
leaq 0xf139(%rip), %rdx      # 0x1512c
movb $0x0, %al
callq 0x3120
movl $0x0, -0x40(%rbp)
cmpl $0x11, -0x40(%rbp)
jge 0x6039
movq 0x13fea(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x40(%rbp), %rcx
leaq 0x144f4(%rip), %rax     # 0x1a510
movq (%rax,%rcx,8), %rdx
leaq 0xe701(%rip), %rsi      # 0x14728
movb $0x0, %al
callq 0x3120
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0x6001
movq 0x13fb8(%rip), %rax     # 0x19ff8
movq (%rax), %rsi
movl $0xa, %edi
callq 0x30f0
movl $0x0, -0x3c(%rbp)
cmpl $0x16, -0x3c(%rbp)
jge 0x60fd
movq 0x13f93(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x3c(%rbp), %rcx
leaq 0x1456d(%rip), %rax     # 0x1a5e0
movq (%rax,%rcx,8), %rdx
leaq 0xe6ab(%rip), %rsi      # 0x14729
movb $0x0, %al
callq 0x3120
movl $0x0, -0x40(%rbp)
cmpl $0x11, -0x40(%rbp)
jge 0x60db
movq 0x13f5f(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x3c(%rbp), %rcx
leaq 0x14ce9(%rip), %rax     # 0x1ad90
imulq $0x44, %rcx, %rcx
addq %rcx, %rax
movslq -0x40(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, %ecx
leaq 0x14522(%rip), %rax     # 0x1a5e0
movq (%rax,%rcx,8), %rdx
leaq 0xe65f(%rip), %rsi      # 0x14728
movb $0x0, %al
callq 0x3120
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0x608c
movq 0x13f16(%rip), %rax     # 0x19ff8
movq (%rax), %rsi
movl $0xa, %edi
callq 0x30f0
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x6054
movq 0x13ef4(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe61f(%rip), %rsi      # 0x1472d
movb $0x0, %al
callq 0x3120
movq 0x13edc(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
leaq 0xe603(%rip), %rsi      # 0x14729
leaq 0xefff(%rip), %rdx      # 0x1512c
movb $0x0, %al
callq 0x3120
movl $0x0, -0x40(%rbp)
cmpl $0x11, -0x40(%rbp)
jge 0x6173
movq 0x13eb0(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x40(%rbp), %rcx
leaq 0x143ba(%rip), %rax     # 0x1a510
movq (%rax,%rcx,8), %rdx
leaq 0xe5c7(%rip), %rsi      # 0x14728
movb $0x0, %al
callq 0x3120
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0x613b
movq 0x13e7e(%rip), %rax     # 0x19ff8
movq (%rax), %rsi
movl $0xa, %edi
callq 0x30f0
movl $0x0, -0x3c(%rbp)
cmpl $0x16, -0x3c(%rbp)
jge 0x6237
movq 0x13e59(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x3c(%rbp), %rcx
leaq 0x14433(%rip), %rax     # 0x1a5e0
movq (%rax,%rcx,8), %rdx
leaq 0xe571(%rip), %rsi      # 0x14729
movb $0x0, %al
callq 0x3120
movl $0x0, -0x40(%rbp)
cmpl $0x11, -0x40(%rbp)
jge 0x6215
movq 0x13e25(%rip), %rax     # 0x19ff8
movq (%rax), %rdi
movslq -0x3c(%rbp), %rcx
leaq 0x151af(%rip), %rax     # 0x1b390
imulq $0x44, %rcx, %rcx
addq %rcx, %rax
movslq -0x40(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, %ecx
leaq 0x143a8(%rip), %rax     # 0x1a5a0
movq (%rax,%rcx,8), %rdx
leaq 0xe525(%rip), %rsi      # 0x14728
movb $0x0, %al
callq 0x3120
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0x61c6
movq 0x13ddc(%rip), %rax     # 0x19ff8
movq (%rax), %rsi
movl $0xa, %edi
callq 0x30f0
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x618e
jmp 0x6239
leaq -0x88(%rbp), %rdi
callq 0x5930
leaq -0x60(%rbp), %rdi
callq 0x5990
cmpl $0x1, -0x1c(%rbp)
setge %al
andb $0x1, %al
movb %al, -0x89(%rbp)
movq -0x10(%rbp), %rdi
movb -0x89(%rbp), %al
leaq -0x88(%rbp), %rsi
leaq -0x60(%rbp), %rdx
andb $0x1, %al
movzbl %al, %ecx
callq 0x5c50
movq -0x28(%rbp), %rax
movq -0x18(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq *%rax
cmpl $0x1, -0x48(%rbp)
jne 0x625d
callq 0x51f0
cmpl $0x0, -0x68(%rbp)
jle 0x62a4
movl $0x1, -0x4(%rbp)
jmp 0x62ab
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x90, %rsp
popq %rbp
retq
nopw (%rax,%rax)