// File: /workspace/github_c_makefile_star2_O3/sharmaeklavya2[P]cerplag/lexer.c
// Function: precompute_dfa
void precompute_dfa()
{
    state_t s;
    cclass_t c;

    for(s=0; s < NUM_STATES; ++s)
        for(c=0; c < NUM_CCLASSES; ++c)
        {
            state_table[s][c] = S_START;
            if(is_final[s])
                action_table[s][c] = A_TOKS;
            else
                action_table[s][c] = A_ERR;
        }

    // whitespace and restricted chars

    for(c=0; c < NUM_CCLASSES; ++c)
        add_edge(S_START, c, S_START, A_TOKF);
    add_edge(S_START, C_WS, S_START, A_IGN);
    add_edge(S_START, C_NL, S_START, A_NL);

    // identifiers

    add_edge(S_START, C_ALPHA, S_ID, A_ADD);
    add_edge(S_START, C_E, S_ID, A_ADD);
    add_edge(S_START, C_UNSC, S_ID, A_ADD);
    // undescrore isn't allowed as the first character in an identifier
    // but we'll handle it later
    add_edge(S_ID, C_ALPHA, S_ID, A_ADD);
    add_edge(S_ID, C_E, S_ID, A_ADD);
    add_edge(S_ID, C_DIG, S_ID, A_ADD);
    add_edge(S_ID, C_UNSC, S_ID, A_ADD);

    // numbers

    add_edge(S_START, C_DIG, S_I1, A_ADD);

    add_edge(S_I1, C_DIG, S_I1, A_ADD);
    add_edge(S_I1, C_DOT, S_I2, A_ADD);
    add_edge(S_I1, C_E, S_E, A_ADD);

    add_edge(S_I2, C_DOT, S_DOT2, A_TOKN);
    add_edge(S_I2, C_DIG, S_R1, A_ADD);
    add_edge(S_I2, C_E, S_E, A_ADD);

    add_edge(S_R1, C_DIG, S_R1, A_ADD);
    add_edge(S_R1, C_E, S_E, A_ADD);

    add_edge(S_E, C_PM, S_E2, A_ADD);
    add_edge(S_E, C_DIG, S_R2, A_ADD);
    add_edge(S_E2, C_DIG, S_R2, A_ADD);

    add_edge(S_R2, C_DIG, S_R2, A_ADD);

    // multiplication and comments

    add_edge(S_START, C_STAR, S_STAR, A_ADD);
    add_edge(S_STAR, C_STAR, S_STAR2, A_CLR);
    for(c=0; c < NUM_CCLASSES; ++c)
        add_edge(S_STAR2, c, S_STAR2, A_IGN);
    add_edge(S_STAR2, C_NL, S_STAR2, A_NL);
    add_edge(S_STAR2, C_STAR, S_STAR3, A_IGN);
    for(c=0; c < NUM_CCLASSES; ++c)
        add_edge(S_STAR3, c, S_STAR3, A_IGN);
    add_edge(S_STAR3, C_NL, S_STAR3, A_NL);
    add_edge(S_STAR3, C_STAR, S_START, A_IGN);

    // operators

    add_edge(S_START, C_SCO, S_START, A_TOKF);
    add_edge(S_START, C_PM, S_START, A_TOKF);

    add_edge(S_START, C_EQ, S_EQ, A_ADD);
    add_edge(S_EQ, C_EQ, S_START, A_TOKF);

    add_edge(S_START, C_EXCL, S_EXCL, A_ADD);
    add_edge(S_EXCL, C_EQ, S_START, A_TOKF);

    add_edge(S_START, C_DOT, S_DOT, A_ADD);
    add_edge(S_DOT, C_DOT, S_DOT2, A_ADD);

    add_edge(S_START, C_COLON, S_COLON, A_ADD);
    add_edge(S_COLON, C_EQ, S_START, A_TOKF);

    add_edge(S_START, C_LT, S_LT, A_ADD);
    add_edge(S_LT, C_EQ, S_START, A_TOKF);
    add_edge(S_LT, C_LT, S_LT2, A_ADD);
    add_edge(S_LT2, C_LT, S_LT3, A_ADD);

    add_edge(S_START, C_GT, S_GT, A_ADD);
    add_edge(S_GT, C_EQ, S_START, A_TOKF);
    add_edge(S_GT, C_GT, S_GT2, A_ADD);
    add_edge(S_GT2, C_GT, S_GT3, A_ADD);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
pushq %rax
leaq 0x112f9(%rip), %rdi     # 0x15db0
xorl %ebx, %ebx
movl $0x598, %edx            # imm = 0x598
xorl %esi, %esi
callq 0x30f0
leaq 0x118a4(%rip), %rax     # 0x16370
leaq 0x1187d(%rip), %rcx     # 0x16350
movzbl (%rbx,%rcx), %edx
xorl $0x1, %edx
leal (%rdx,%rdx,2), %edx
addl $0x4, %edx
xorl %esi, %esi
movl %edx, (%rax,%rsi,4)
incq %rsi
cmpq $0x11, %rsi
jne 0x4ae2
incq %rbx
addq $0x44, %rax
cmpq $0x16, %rbx
jne 0x4ad3
xorps %xmm0, %xmm0
movaps %xmm0, 0x1129b(%rip)    # 0x15da0
movaps %xmm0, 0x11284(%rip)    # 0x15d90
movaps %xmm0, 0x1126d(%rip)    # 0x15d80
movaps %xmm0, 0x11256(%rip)    # 0x15d70
movl $0x0, 0x1128c(%rip)     # 0x15db0
xorl %ecx, %ecx
leaq 0x11843(%rip), %rax     # 0x16370
movl $0x5, (%rcx,%rax)
addq $0x4, %rcx
cmpq $0x44, %rcx
jne 0x4b2d
movabsq $0x200000001, %rcx      # imm = 0x200000001
movq %rcx, 0x11835(%rip)     # 0x16384
xorl %ecx, %ecx
movl %ecx, 0x11231(%rip)     # 0x15d88
movl $0xf, 0x11213(%rip)     # 0x15d74
xorps %xmm0, %xmm0
movups %xmm0, 0x11809(%rip)    # 0x16374
movabsq $0xf0000000f, %rdx      # imm = 0xF0000000F
movq %rdx, 0x111fc(%rip)     # 0x15d78
movq %rdx, 0x115ed(%rip)     # 0x16170
movaps %xmm0, 0x11be6(%rip)    # 0x16770
movq %rdx, 0x115e7(%rip)     # 0x16178
movq $0x10, 0x111e4(%rip) # 0x15d80
movl $0x10, 0x1161a(%rip)    # 0x161c0
movl %ecx, 0x11c14(%rip)     # 0x167c0
movl $0x11, 0x11626(%rip)    # 0x161dc
movl %ecx, 0x11c20(%rip)     # 0x167dc
movl $0x12, %edx
movl %edx, 0x115f1(%rip)     # 0x161b8
movl %ecx, 0x11beb(%rip)     # 0x167b8
movl $0x7, 0x11649(%rip)     # 0x16220
movl $0x6, 0x11c3f(%rip)     # 0x16820
movl $0x14, %esi
movl %esi, 0x11618(%rip)     # 0x16204
movl %ecx, 0x11c12(%rip)     # 0x16804
movl %edx, 0x11604(%rip)     # 0x161fc
movl %ecx, 0x11bfe(%rip)     # 0x167fc
movl %esi, 0x116cc(%rip)     # 0x162d0
movl %ecx, 0x11cc6(%rip)     # 0x168d0
movl %edx, 0x116b8(%rip)     # 0x162c8
movl %ecx, 0x11cb2(%rip)     # 0x168c8
movl $0x13, 0x11638(%rip)    # 0x16258
movl %ecx, 0x11c32(%rip)     # 0x16858
movl $0x15, %edx
movl %edx, 0x11617(%rip)     # 0x16248
movl %ecx, 0x11c11(%rip)     # 0x16848
movl %edx, 0x1164f(%rip)     # 0x1628c
movl %ecx, 0x11c49(%rip)     # 0x1688c
movl %edx, 0x116cb(%rip)     # 0x16314
movl %ecx, 0x11cc5(%rip)     # 0x16914
movl $0x1, 0x11147(%rip)     # 0x15da0
movl %ecx, 0x11741(%rip)     # 0x163a0
movl $0x2, 0x1117b(%rip)     # 0x15de4
movl $0x3, 0x11771(%rip)     # 0x163e4
leaq 0x110f6(%rip), %rdx     # 0x15d70
movl $0x2, 0x88(%rdx,%rcx,4)
movl $0x1, 0x88(%rax,%rcx,4)
incq %rcx
cmpq $0x11, %rcx
jne 0x4c7a
movl $0x2, %ecx
movl %ecx, 0x1116c(%rip)     # 0x15e10
movl %ecx, 0x11766(%rip)     # 0x16410
movl $0x3, 0x11174(%rip)     # 0x15e28
movl $0x1, 0x1176a(%rip)     # 0x16428
xorl %ecx, %ecx
movl $0x3, 0xcc(%rdx,%rcx,4)
movl $0x1, 0xcc(%rax,%rcx,4)
incq %rcx
cmpq $0x11, %rcx
jne 0x4cc0
movl $0x3, 0x1116b(%rip)     # 0x15e54
movl $0x2, 0x11761(%rip)     # 0x16454
xorl %eax, %eax
movl %eax, 0x11171(%rip)     # 0x15e6c
movl $0x1, 0x11767(%rip)     # 0x1646c
movl %eax, 0x11081(%rip)     # 0x15d8c
movl $0x5, %ecx
movl %ecx, 0x11676(%rip)     # 0x1638c
movabsq $0x400000000, %rdx      # imm = 0x400000000
movq %rdx, 0x11069(%rip)     # 0x15d90
movq $0x5, 0x1165e(%rip) # 0x16390
movl %eax, 0x1116c(%rip)     # 0x15ea4
movl %ecx, 0x11766(%rip)     # 0x164a4
movabsq $0x600000005, %rdx      # imm = 0x600000005
movq %rdx, 0x11049(%rip)     # 0x15d98
movq %rax, 0x11642(%rip)     # 0x16398
movl %eax, 0x1118c(%rip)     # 0x15ee8
movl %ecx, 0x11786(%rip)     # 0x164e8
movl $0x7, 0x111c8(%rip)     # 0x15f34
movl %eax, 0x117c2(%rip)     # 0x16534
movl $0x8, 0x11028(%rip)     # 0x15da4
movl %eax, 0x11622(%rip)     # 0x163a4
movl %eax, 0x1122c(%rip)     # 0x15fb4
movl %ecx, 0x11826(%rip)     # 0x165b4
movabsq $0xc00000009, %rdx      # imm = 0xC00000009
movq %rdx, 0x11009(%rip)     # 0x15da8
movq %rax, 0x11602(%rip)     # 0x163a8
movl %eax, 0x1124c(%rip)     # 0x15ff8
movl %ecx, 0x11846(%rip)     # 0x165f8
movl $0xa, 0x11250(%rip)     # 0x1600c
movl %eax, 0x1184a(%rip)     # 0x1660c
movl $0xb, 0x11284(%rip)     # 0x16050
movl %eax, 0x1187e(%rip)     # 0x16650
movl %eax, 0x112ec(%rip)     # 0x160c4
movl %ecx, 0x118e6(%rip)     # 0x166c4
movl $0xd, 0x112f4(%rip)     # 0x160dc
movl %eax, 0x118ee(%rip)     # 0x166dc
movl $0xe, 0x11328(%rip)     # 0x16120
movl %eax, 0x11922(%rip)     # 0x16720
addq $0x8, %rsp
popq %rbx
popq %rbp
retq