// File: /workspace/github_c_makefile_star2_O2/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
xorl %edx, %edx
leaq 0x1144b(%rip), %rsi     # 0x15350
leaq 0x10e64(%rip), %rax     # 0x14d70
leaq 0x1145d(%rip), %rcx     # 0x15370
xorl %edi, %edi
cmpq $0x16, %rdi
je 0x3f51
movzbl (%rdi,%rsi), %r8d
xorl $0x1, %r8d
leal (%r8,%r8,2), %r8d
addl $0x4, %r8d
xorl %r9d, %r9d
cmpq $0x44, %r9
je 0x3f48
leaq (%rdx,%r9), %r10
andl $0x0, (%rax,%r10)
movl %r8d, (%rcx,%r10)
addq $0x4, %r9
jmp 0x3f2f
incq %rdi
addq $0x44, %rdx
jmp 0x3f15
xorl %edx, %edx
cmpq $0x44, %rdx
je 0x3f6a
andl $0x0, (%rdx,%rax)
movl $0x5, (%rdx,%rcx)
addq $0x4, %rdx
jmp 0x3f53
movabsq $0x200000001, %rdx      # imm = 0x200000001
movq %rdx, 0x11409(%rip)     # 0x15384
andl $0x0, 0x10e06(%rip)     # 0x14d88
movl $0xf, 0x10de8(%rip)     # 0x14d74
xorps %xmm0, %xmm0
movups %xmm0, 0x113de(%rip)    # 0x15374
movabsq $0xf0000000f, %rdx      # imm = 0xF0000000F
movq %rdx, 0x10dd1(%rip)     # 0x14d78
movq %rdx, 0x111c2(%rip)     # 0x15170
movaps %xmm0, 0x117bb(%rip)    # 0x15770
movq %rdx, 0x111bc(%rip)     # 0x15178
movq $0x10, 0x10db9(%rip) # 0x14d80
movl $0x10, 0x111ef(%rip)    # 0x151c0
andl $0x0, 0x117e8(%rip)     # 0x157c0
movl $0x11, 0x111fa(%rip)    # 0x151dc
andl $0x0, 0x117f3(%rip)     # 0x157dc
movl $0x12, %edx
andl $0x0, 0x117c3(%rip)     # 0x157b8
movl %edx, 0x111bd(%rip)     # 0x151b8
movl $0x7, 0x1121b(%rip)     # 0x15220
movl $0x6, 0x11811(%rip)     # 0x15820
movl $0x14, %esi
movl %esi, 0x111ea(%rip)     # 0x15204
andl $0x0, 0x117e3(%rip)     # 0x15804
movl %edx, 0x111d5(%rip)     # 0x151fc
andl $0x0, 0x117ce(%rip)     # 0x157fc
movl %esi, 0x1129c(%rip)     # 0x152d0
andl $0x0, 0x11895(%rip)     # 0x158d0
movl %edx, 0x11287(%rip)     # 0x152c8
andl $0x0, 0x11880(%rip)     # 0x158c8
movl $0x13, 0x11206(%rip)    # 0x15258
andl $0x0, 0x117ff(%rip)     # 0x15858
movl $0x15, %edx
andl $0x0, 0x117e3(%rip)     # 0x15848
movl %edx, 0x111dd(%rip)     # 0x15248
andl $0x0, 0x1181a(%rip)     # 0x1588c
movl %edx, 0x11214(%rip)     # 0x1528c
andl $0x0, 0x11895(%rip)     # 0x15914
movl %edx, 0x1128f(%rip)     # 0x15314
andl $0x0, 0x11314(%rip)     # 0x153a0
movl $0x1, 0x10d0a(%rip)     # 0x14da0
movl $0x2, 0x10d44(%rip)     # 0x14de4
movl $0x3, 0x1133a(%rip)     # 0x153e4
xorl %edx, %edx
cmpq $0x11, %rdx
je 0x40cd
movl $0x2, 0x88(%rax,%rdx,4)
movl $0x1, 0x88(%rcx,%rdx,4)
incq %rdx
jmp 0x40ac
movl $0x2, %edx
movl %edx, 0x10d38(%rip)     # 0x14e10
movl %edx, 0x11332(%rip)     # 0x15410
movl $0x3, 0x10d40(%rip)     # 0x14e28
movl $0x1, 0x11336(%rip)     # 0x15428
xorl %edx, %edx
cmpq $0x11, %rdx
je 0x4115
movl $0x3, 0xcc(%rax,%rdx,4)
movl $0x1, 0xcc(%rcx,%rdx,4)
incq %rdx
jmp 0x40f4
movl $0x3, 0x10d35(%rip)     # 0x14e54
movl $0x2, 0x1132b(%rip)     # 0x15454
andl $0x0, 0x10d3c(%rip)     # 0x14e6c
movl $0x1, 0x11332(%rip)     # 0x1546c
andl $0x0, 0x10c4b(%rip)     # 0x14d8c
movl $0x5, %eax
movl %eax, 0x11240(%rip)     # 0x1538c
movabsq $0x400000000, %rcx      # imm = 0x400000000
movq %rcx, 0x10c33(%rip)     # 0x14d90
movq $0x5, 0x11228(%rip) # 0x15390
andl $0x0, 0x10d35(%rip)     # 0x14ea4
movl %eax, 0x1132f(%rip)     # 0x154a4
movabsq $0x600000005, %rcx      # imm = 0x600000005
andq $0x0, 0x11211(%rip)     # 0x15398
movq %rcx, 0x10c0a(%rip)     # 0x14d98
andl $0x0, 0x10d53(%rip)     # 0x14ee8
movl %eax, 0x1134d(%rip)     # 0x154e8
andl $0x0, 0x11392(%rip)     # 0x15534
movl $0x7, 0x10d88(%rip)     # 0x14f34
andl $0x0, 0x111f1(%rip)     # 0x153a4
movl $0x8, 0x10be7(%rip)     # 0x14da4
andl $0x0, 0x10df0(%rip)     # 0x14fb4
movl %eax, 0x113ea(%rip)     # 0x155b4
movabsq $0xc00000009, %rcx      # imm = 0xC00000009
movq %rcx, 0x10bcd(%rip)     # 0x14da8
andq $0x0, 0x111c5(%rip)     # 0x153a8
andl $0x0, 0x10e0e(%rip)     # 0x14ff8
movl %eax, 0x11408(%rip)     # 0x155f8
movl $0xa, 0x10e12(%rip)     # 0x1500c
andl $0x0, 0x1140b(%rip)     # 0x1560c
movl $0xb, 0x10e45(%rip)     # 0x15050
andl $0x0, 0x1143e(%rip)     # 0x15650
andl $0x0, 0x10eab(%rip)     # 0x150c4
movl %eax, 0x114a5(%rip)     # 0x156c4
movl $0xd, 0x10eb3(%rip)     # 0x150dc
andl $0x0, 0x114ac(%rip)     # 0x156dc
movl $0xe, 0x10ee6(%rip)     # 0x15120
andl $0x0, 0x114df(%rip)     # 0x15720
popq %rbp
retq