// File: /workspace/github_c_makefile_star2_O1/niho[P]elmc/src/eparse.c
// Function: elm_parser_init
static elm_parser_t *elm_parser_init(void) {
    elm_parser_t *p = malloc(sizeof(elm_parser_t));

    //mpc_parser_t *Whitespace = mpc_new("whitespace");
    p->Comment  = mpc_new("comment");
    p->True     = mpc_new("true");
    p->False    = mpc_new("false");
    p->Number   = mpc_new("number");
    p->Float    = mpc_new("float");
    p->Char     = mpc_new("char");
    p->String   = mpc_new("string");
    //p->MultiStr = mpc_new("multistr");
    p->Literal  = mpc_new("literal");
    p->Decl     = mpc_new("declaration");
    /*p->ValueDecl = mpc_new("valuedecl");
    p->TypeDecl  = mpc_new("typedecl");
    p->Type   = mpc_new("type");
    p->CustomType = mpc_new("customtype");
    p->TypeAlias = mpc_new("typealias");*/
    p->Var      = mpc_new("variable");
    p->Value    = mpc_new("value");
    p->Expr     = mpc_new("expression");
    p->List     = mpc_new("list");
    p->Tuple    = mpc_new("tuple");
    p->If       = mpc_new("if");
    p->Case     = mpc_new("case");
    /*p->Lexpr  = mpc_new("lexpr");
    p->Prod     = mpc_new("product");
    p->Value    = mpc_new("value");*/
    p->Module   = mpc_new("module");

    mpc_define(p->Comment, mpc_apply(elm_comment(), elm_ast_comment));

    mpc_define(p->True, mpc_apply(mpc_sym("True"), elm_ast_bool));
    mpc_define(p->False, mpc_apply(mpc_sym("False"), elm_ast_bool));

    mpc_define(p->Number, mpc_apply(elm_number(), elm_ast_number));
    mpc_define(p->Float, mpc_apply(elm_float(), elm_ast_float));

    mpc_define(p->Char, mpc_apply(mpc_char_lit(), elm_ast_char));
    mpc_define(p->String, mpc_apply(mpc_string_lit(), elm_ast_string));

    mpc_define(p->Literal, mpc_apply(mpc_or(7, p->True, p->False, mpc_or(2, p->Float, p->Number), p->Char, p->String, p->List, p->Tuple), elm_ast_literal));
    mpc_define(p->Var, elm_variable());

    mpc_define(p->Value, elm_value(p->Expr, p->Literal, p->Var, p->If, p->Case));
    mpc_define(p->Expr, elm_expr(p->Value));

    mpc_define(p->List, elm_list(p->Expr));
    mpc_define(p->Tuple, elm_tuple(p->Expr));

    mpc_define(p->If, elm_if(p->Expr));
    mpc_define(p->Case, elm_case(p->Expr, elm_pattern(mpc_or(6, p->True, p->False, p->Float, p->Number, p->Char, p->String))));

    mpc_define(p->Decl, elm_declaration(p->Var, p->Expr));

    mpc_define(p->Module, elm_module(p->Comment, p->Decl));
    
    return p;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movl $0x88, %edi
callq 0x1170
movq %rax, %rbx
leaq 0xaed4(%rip), %rdi      # 0xd4bc
callq 0x4d83
movq %rax, %rbp
movq %rax, (%rbx)
leaq 0xae40(%rip), %rdi      # 0xd43a
callq 0x4d83
movq %rax, 0x18(%rsp)
movq %rax, 0x8(%rbx)
leaq 0xae30(%rip), %rdi      # 0xd43f
callq 0x4d83
movq %rax, 0x8(%rsp)
movq %rax, 0x10(%rbx)
leaq 0xae21(%rip), %rdi      # 0xd445
callq 0x4d83
movq %rax, (%rsp)
movq %rax, 0x18(%rbx)
leaq 0xae14(%rip), %rdi      # 0xd44c
callq 0x4d83
movq %rax, 0x48(%rsp)
movq %rax, 0x20(%rbx)
leaq 0xae05(%rip), %rdi      # 0xd452
callq 0x4d83
movq %rax, 0x50(%rsp)
movq %rax, 0x28(%rbx)
leaq 0xadf5(%rip), %rdi      # 0xd457
callq 0x4d83
movq %rax, 0x58(%rsp)
movq %rax, 0x30(%rbx)
leaq 0xade7(%rip), %rdi      # 0xd45e
callq 0x4d83
movq %rax, 0x68(%rsp)
movq %rax, 0x38(%rbx)
leaq 0xadda(%rip), %rdi      # 0xd466
callq 0x4d83
movq %rax, 0x40(%rbx)
leaq 0xadd6(%rip), %rdi      # 0xd472
callq 0x4d83
movq %rax, 0x78(%rsp)
movq %rax, 0x48(%rbx)
leaq 0xadca(%rip), %rdi      # 0xd47b
callq 0x4d83
movq %rax, 0x80(%rsp)
movq %rax, 0x50(%rbx)
leaq 0xadb8(%rip), %rdi      # 0xd481
callq 0x4d83
movq %rax, 0x70(%rsp)
movq %rax, 0x58(%rbx)
leaq 0xadae(%rip), %rdi      # 0xd48c
callq 0x4d83
movq %rax, 0x40(%rsp)
movq %rax, 0x60(%rbx)
leaq 0xad9e(%rip), %rdi      # 0xd491
callq 0x4d83
movq %rax, 0x20(%rsp)
movq %rax, 0x68(%rbx)
leaq 0xad8f(%rip), %rdi      # 0xd497
callq 0x4d83
movq %rax, 0x10(%rsp)
movq %rax, 0x70(%rbx)
leaq 0xad7d(%rip), %rdi      # 0xd49a
callq 0x4d83
movq %rax, 0x60(%rsp)
movq %rax, 0x78(%rbx)
leaq 0xad6d(%rip), %rdi      # 0xd49f
callq 0x4d83
movq %rax, 0x80(%rbx)
movq %rbx, 0x28(%rsp)
callq 0x5537
leaq 0x3929(%rip), %r15      # 0x6078
movq %r15, %rdi
movq %rax, %rsi
callq 0x5b51
movq 0x1085f(%rip), %r13     # 0x12fc0
leaq 0xad44(%rip), %rdx      # 0xd4ac
leaq 0xad40(%rip), %rcx      # 0xd4af
movq %rax, %rdi
movq %r13, %rsi
callq 0x6d72
leaq 0xad31(%rip), %rsi      # 0xd4b2
movq %rax, %rdi
callq 0x53ce
movq %rax, %r12
leaq 0xad31(%rip), %rdi      # 0xd4c4
callq 0x56da
movq %rax, %r14
callq 0x5537
leaq 0xa48(%rip), %rdx       # 0x31ef
leaq 0xad19(%rip), %rcx      # 0xd4c7
movq %rax, %rdi
movq %r13, %rsi
callq 0x57ad
movq %r15, %rdi
movq %rax, %rsi
callq 0x5b51
movq %rax, %rdi
callq 0x6bee
leaq 0x4520(%rip), %r15      # 0x6cf3
movl $0x2, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rax, %rcx
movq %r13, %r8
xorl %eax, %eax
callq 0x5d16
movq %rax, %rdi
leaq 0xacc7(%rip), %r14      # 0xd4bc
movq %r14, %rsi
callq 0x53ce
movl $0x2, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5c05
movq %rax, %rdi
movq %r14, %rsi
callq 0x53ce
leaq -0x13a9(%rip), %rsi     # 0x1478
movq %rax, %rdi
callq 0x573b
movq %rbp, %rdi
movq %rax, %rsi
callq 0x5042
leaq 0xa8e5(%rip), %rdi      # 0xd120
callq 0x6caf
leaq -0x13ac(%rip), %r14     # 0x149b
movq %rax, %rdi
movq %r14, %rsi
callq 0x573b
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x5042
leaq 0xac40(%rip), %rdi      # 0xd4a6
callq 0x6caf
movq %rax, %rdi
movq %r14, %rsi
callq 0x573b
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x5042
leaq 0xac49(%rip), %rdi      # 0xd4d3
callq 0x56da
movq %rax, %r14
callq 0x64ba
movl $0x2, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rax, %rcx
movq %r13, %r8
movq %r13, %r15
xorl %eax, %eax
callq 0x5d16
leaq 0xac1d(%rip), %rsi      # 0xd4d6
movq %rax, %rdi
callq 0x53ce
movq %rax, %r14
callq 0x643d
movl $0x2, %edi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5c05
movq %rax, %rdi
leaq 0xab60(%rip), %rsi      # 0xd445
callq 0x53ce
leaq -0x140f(%rip), %rsi     # 0x14e2
movq %rax, %rdi
callq 0x573b
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x5042
leaq 0xabd6(%rip), %r14      # 0xd4e2
movq %r14, %rdi
callq 0x55df
leaq 0x3e8a(%rip), %rbp      # 0x67a5
movq %rax, %rdi
movq %rbp, %rsi
callq 0x5aea
movq %rax, 0x38(%rsp)
callq 0x6239
movq %rax, 0x30(%rsp)
movl $0x2e, %edi
callq 0x5564
movq %rax, %r13
callq 0x6239
movl $0x2, %edi
leaq 0x3725(%rip), %r12      # 0x6078
movq %r12, %rsi
movq %r13, %rdx
movq %rax, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x5d16
movq %rax, %r13
leaq 0xab75(%rip), %rdi      # 0xd4e5
callq 0x55df
movq %rax, %r15
movq %r14, %rdi
callq 0x55df
movq %rax, %rdi
movq %rbp, %rsi
callq 0x5aea
movq %rax, %r14
callq 0x6239
subq $0x8, %rsp
movl $0x3, %edi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
movq %rax, %r8
movq 0x10611(%rip), %r9      # 0x12fc0
xorl %eax, %eax
pushq %r9
movq %r9, %r14
callq 0x5d16
addq $0x10, %rsp
movq %rax, %rdi
movq %rbp, %rsi
callq 0x5aea
subq $0x8, %rsp
movl $0x4, %edi
movq %r12, %rsi
movq 0x40(%rsp), %rdx
movq 0x38(%rsp), %rcx
movq %r13, %r8
movq %rax, %r9
xorl %eax, %eax
pushq %r14
pushq %r14
pushq %r14
movq %r14, %r13
callq 0x5d16
addq $0x20, %rsp
leaq 0xaae7(%rip), %rsi      # 0xd4e8
movq %rax, %rdi
callq 0x53ce
leaq 0x3de8(%rip), %rsi      # 0x67f8
movq %rax, %rdi
callq 0x573b
movq %rax, %rdi
leaq 0xaa2a(%rip), %rsi      # 0xd44c
callq 0x53ce
leaq -0x1523(%rip), %rsi     # 0x150b
movq %rax, %rdi
callq 0x573b
movq 0x48(%rsp), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x5042
callq 0x6832
leaq -0x151e(%rip), %rsi     # 0x1534
movq %rax, %rdi
callq 0x573b
movq 0x50(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x5042
callq 0x68f8
leaq -0x1519(%rip), %rsi     # 0x155d
movq %rax, %rdi
callq 0x573b
movq 0x58(%rsp), %r12
movq %r12, %rdi
movq %rax, %rsi
callq 0x5042
movl $0x2, %edi
movq %r15, %rsi
movq (%rsp), %rdx
xorl %eax, %eax
callq 0x5c05
movl $0x7, %edi
movq 0x18(%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %rax, %rcx
movq %r14, %r8
movq %r12, %r9
xorl %eax, %eax
pushq 0x20(%rsp)
movq 0x48(%rsp), %rbp
pushq %rbp
callq 0x5c05
addq $0x10, %rsp
leaq -0x154f(%rip), %rsi     # 0x1586
movq %rax, %rdi
callq 0x573b
movq 0x68(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x5042
leaq 0xa9f9(%rip), %rdi      # 0xd4ed
callq 0x6e3d
leaq 0x6fb(%rip), %rdx       # 0x31fb
leaq 0xa9fa(%rip), %rcx      # 0xd501
movq %rax, %rdi
movq %r13, %r12
movq %r13, %rsi
callq 0x57ad
leaq -0x14fa(%rip), %rsi     # 0x1622
movq %rax, %rdi
callq 0x573b
movq %rax, %rdi
leaq 0xa944(%rip), %rsi      # 0xd472
callq 0x53ce
movq 0x78(%rsp), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x5042
movq 0x70(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x6df1
movl $0x5, %edi
movq 0x10(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r14, %rcx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x5c05
movq %rax, %rdi
leaq 0xa8ff(%rip), %rsi      # 0xd47b
callq 0x53ce
movq 0x80(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x5042
movq %r14, %rdi
callq 0x6c85
leaq -0x160a(%rip), %rdi     # 0x1599
movq %rax, %rsi
callq 0x5b87
movq %rax, %rdi
leaq 0xa8cc(%rip), %rsi      # 0xd481
callq 0x53ce
movq %r13, %rdi
movq %rax, %rsi
callq 0x5042
leaq -0x1581(%rip), %r14     # 0x164b
movq %r14, %rdi
movq %r13, %rsi
callq 0x5b51
movq %rax, %rdi
movq %r12, %rsi
callq 0x6e2a
movq %rax, %r15
movl $0x2c, %edi
callq 0x5564
movq %rax, %rdi
callq 0x6c85
movl $0x2, %edi
leaq 0x40f0(%rip), %rsi      # 0x6cf3
movq %rax, %rdx
movq %r13, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5d16
movq %r14, %rdi
movq %rax, %rsi
callq 0x5b51
leaq -0x1551(%rip), %rsi     # 0x16d4
movl $0x2, %edi
movq %r13, %rdx
movq %rax, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5d16
movq %rax, %rdi
movq %r12, %rsi
callq 0x6e2a
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5c05
movq %rax, %rdi
leaq 0xa82b(%rip), %rsi      # 0xd48c
callq 0x53ce
movq %rbp, %rdi
movq %rax, %rsi
callq 0x5042
leaq -0x145f(%rip), %r14     # 0x1819
movq %r14, %rdi
movq %r13, %rsi
callq 0x5b51
movq %rax, %rdi
movq %r12, %rsi
callq 0x6df1
movq %rax, %r15
movl $0x2c, %edi
callq 0x5564
movq %rax, %rdi
callq 0x6c85
movl $0x2, %edi
leaq 0x4044(%rip), %rsi      # 0x6cf3
movq %rax, %rdx
movq %r13, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5d16
movq %r14, %rdi
movq %rax, %rsi
callq 0x5b51
leaq -0x142f(%rip), %rsi     # 0x18a2
movl $0x2, %edi
movq %r13, %rdx
movq %rax, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5d16
movq %rax, %rdi
movq %r12, %rsi
callq 0x6df1
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5c05
movq %rax, %rdi
leaq 0xa784(%rip), %rsi      # 0xd491
callq 0x53ce
movq 0x20(%rsp), %rdi
movq %rax, %rsi
callq 0x5042
movq 0x58(%rbx), %r15
leaq 0xa76d(%rip), %rdi      # 0xd497
callq 0x6caf
movq %rax, %r14
movq %r15, %rdi
callq 0x6c85
movq %rax, %r12
leaq 0xa7d8(%rip), %rdi      # 0xd51c
callq 0x6caf
movq %rax, %r13
movq %r15, %rdi
callq 0x6c85
movq %rax, %rbp
leaq 0xa7c3(%rip), %rdi      # 0xd521
callq 0x6caf
movq %rax, %rbx
movq %r15, %rdi
callq 0x6c85
movq %rax, %r10
subq $0x8, %rsp
leaq -0x13b4(%rip), %rsi     # 0x19c8
movl $0x6, %edi
movq %r14, %rdx
movq %r12, %rcx
movq %r13, %r8
movq %rbp, %r9
xorl %eax, %eax
movq 0x1022a(%rip), %r11     # 0x12fc0
pushq %r11
pushq %r11
pushq %r11
pushq %r11
pushq %r11
pushq %r10
pushq %rbx
callq 0x5d16
addq $0x40, %rsp
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x5042
movq 0x28(%rsp), %rbx
movq 0x78(%rbx), %rax
movq %rax, 0x10(%rsp)
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rdx
movq 0x20(%rbx), %rcx
movq 0x18(%rbx), %r8
movq 0x28(%rbx), %r9
subq $0x8, %rsp
movl $0x6, %edi
xorl %eax, %eax
pushq 0x30(%rbx)
callq 0x5c05
addq $0x10, %rsp
movq %rax, %r14
movl $0x5f, %edi
callq 0x5564
leaq -0x10c4(%rip), %rsi     # 0x1d42
movq %rax, %rdi
callq 0x573b
leaq 0xa717(%rip), %rsi      # 0xd52c
movq %rax, %rdi
callq 0x53ce
movl $0x2, %edi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5c05
movq %rax, %r14
leaq 0xa661(%rip), %rdi      # 0xd49a
callq 0x6caf
movq %rax, (%rsp)
movq %r15, %r13
movq %r15, 0x8(%rsp)
movq %r15, %rdi
callq 0x6c85
movq %rax, %rbp
leaq 0xa6ca(%rip), %rdi      # 0xd526
callq 0x6caf
movq %rax, %r12
movq %r14, %rdi
callq 0x6c85
movq %rax, %r14
leaq 0xa6b3(%rip), %rdi      # 0xd529
callq 0x6caf
movq %rax, %r15
movq %r13, %rdi
movq 0x10138(%rip), %r13     # 0x12fc0
movq %r13, %rsi
callq 0x6df1
subq $0x8, %rsp
leaq -0x122f(%rip), %rsi     # 0x1c6c
movl $0x3, %edi
movq %r14, %rdx
movq %r15, %rcx
movq %rax, %r8
movq %r13, %r9
xorl %eax, %eax
pushq %r13
callq 0x5d16
addq $0x10, %rsp
movq %rax, %rdi
callq 0x6c85
leaq -0x12e5(%rip), %rdi     # 0x1be3
movq %rax, %rsi
callq 0x5b87
subq $0x8, %rsp
leaq -0x143c(%rip), %rsi     # 0x1a9f
movl $0x4, %edi
movq 0x8(%rsp), %rdx
movq %rbp, %rcx
movq %r12, %r8
movq %rax, %r9
xorl %eax, %eax
pushq %r13
pushq %r13
pushq %r13
callq 0x5d16
addq $0x20, %rsp
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x5042
movq 0x40(%rbx), %r12
movq 0x48(%rbx), %rdi
callq 0x6c85
leaq -0x10a7(%rip), %rdi     # 0x1e79
movq %rax, %rsi
callq 0x5b87
movq %rax, %r14
leaq 0xae3d(%rip), %rdi      # 0xdd6f
callq 0x6caf
movq %rax, %r15
movq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0x6df1
subq $0x8, %rsp
leaq -0x11d1(%rip), %rsi     # 0x1d81
movl $0x3, %edi
movq %r14, %rdx
movq %r15, %rcx
movq %rax, %r8
movq %r13, %r9
xorl %eax, %eax
pushq %r13
callq 0x5d16
addq $0x10, %rsp
movq %r12, %rdi
movq %rax, %rsi
callq 0x5042
movq (%rbx), %rdi
movq 0x80(%rbx), %r14
callq 0x6c85
movq %rax, %r15
movq %r12, %rdi
callq 0x6c85
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5c05
leaq -0xfd5(%rip), %rdi      # 0x1fd9
movq %rax, %rsi
callq 0x5b87
movq %rax, %rdi
movq %r13, %rsi
callq 0x6b59
movq %r14, %rdi
movq %rax, %rsi
callq 0x5042
movq %rbx, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq