// File: /workspace/github_c_makefile_star2_O3/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 0xaf58(%rip), %rdi      # 0xd4bc
callq 0x4d72
movq %rax, %rbp
movq %rax, (%rbx)
leaq 0xaec4(%rip), %rdi      # 0xd43a
callq 0x4d72
movq %rax, 0x18(%rsp)
movq %rax, 0x8(%rbx)
leaq 0xaeb4(%rip), %rdi      # 0xd43f
callq 0x4d72
movq %rax, 0x8(%rsp)
movq %rax, 0x10(%rbx)
leaq 0xaea5(%rip), %rdi      # 0xd445
callq 0x4d72
movq %rax, (%rsp)
movq %rax, 0x18(%rbx)
leaq 0xae98(%rip), %rdi      # 0xd44c
callq 0x4d72
movq %rax, 0x48(%rsp)
movq %rax, 0x20(%rbx)
leaq 0xae89(%rip), %rdi      # 0xd452
callq 0x4d72
movq %rax, 0x50(%rsp)
movq %rax, 0x28(%rbx)
leaq 0xae79(%rip), %rdi      # 0xd457
callq 0x4d72
movq %rax, 0x58(%rsp)
movq %rax, 0x30(%rbx)
leaq 0xae6b(%rip), %rdi      # 0xd45e
callq 0x4d72
movq %rax, 0x68(%rsp)
movq %rax, 0x38(%rbx)
leaq 0xae5e(%rip), %rdi      # 0xd466
callq 0x4d72
movq %rax, 0x40(%rbx)
leaq 0xae5a(%rip), %rdi      # 0xd472
callq 0x4d72
movq %rax, 0x78(%rsp)
movq %rax, 0x48(%rbx)
leaq 0xae4e(%rip), %rdi      # 0xd47b
callq 0x4d72
movq %rax, 0x80(%rsp)
movq %rax, 0x50(%rbx)
leaq 0xae3c(%rip), %rdi      # 0xd481
callq 0x4d72
movq %rax, 0x70(%rsp)
movq %rax, 0x58(%rbx)
leaq 0xae32(%rip), %rdi      # 0xd48c
callq 0x4d72
movq %rax, 0x40(%rsp)
movq %rax, 0x60(%rbx)
leaq 0xae22(%rip), %rdi      # 0xd491
callq 0x4d72
movq %rax, 0x20(%rsp)
movq %rax, 0x68(%rbx)
leaq 0xae13(%rip), %rdi      # 0xd497
callq 0x4d72
movq %rax, 0x10(%rsp)
movq %rax, 0x70(%rbx)
leaq 0xae01(%rip), %rdi      # 0xd49a
callq 0x4d72
movq %rax, 0x60(%rsp)
movq %rax, 0x78(%rbx)
leaq 0xadf1(%rip), %rdi      # 0xd49f
callq 0x4d72
movq %rax, 0x80(%rbx)
movq %rbx, 0x28(%rsp)
callq 0x54a4
leaq 0x3842(%rip), %r15      # 0x5f0d
movq %r15, %rdi
movq %rax, %rsi
callq 0x5a2e
movq 0x108e3(%rip), %r13     # 0x12fc0
leaq 0xadc8(%rip), %rdx      # 0xd4ac
leaq 0xadc4(%rip), %rcx      # 0xd4af
movq %rax, %rdi
movq %r13, %rsi
callq 0x6bcf
leaq 0xadb5(%rip), %rsi      # 0xd4b2
movq %rax, %rdi
callq 0x5356
movq %rax, %r12
leaq 0xadb5(%rip), %rdi      # 0xd4c4
callq 0x5611
movq %rax, %r14
callq 0x54a4
leaq 0xa48(%rip), %rdx       # 0x316b
leaq 0xad9d(%rip), %rcx      # 0xd4c7
movq %rax, %rdi
movq %r13, %rsi
callq 0x56c9
movq %r15, %rdi
movq %rax, %rsi
callq 0x5a2e
movq %rax, %rdi
callq 0x6a4b
leaq 0x4401(%rip), %r15      # 0x6b50
movl $0x2, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rax, %rcx
movq %r13, %r8
xorl %eax, %eax
callq 0x5bcf
movq %rax, %rdi
leaq 0xad4b(%rip), %r14      # 0xd4bc
movq %r14, %rsi
callq 0x5356
movl $0x2, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5ac7
movq %rax, %rdi
movq %r14, %rsi
callq 0x5356
leaq -0x1335(%rip), %rsi     # 0x1468
movq %rax, %rdi
callq 0x5669
movq %rbp, %rdi
movq %rax, %rsi
callq 0x5000
leaq 0xa969(%rip), %rdi      # 0xd120
callq 0x6b0c
leaq -0x1338(%rip), %r14     # 0x148b
movq %rax, %rdi
movq %r14, %rsi
callq 0x5669
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x5000
leaq 0xacc4(%rip), %rdi      # 0xd4a6
callq 0x6b0c
movq %rax, %rdi
movq %r14, %rsi
callq 0x5669
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x5000
leaq 0xaccd(%rip), %rdi      # 0xd4d3
callq 0x5611
movq %rax, %r14
callq 0x6391
movl $0x2, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rax, %rcx
movq %r13, %r8
movq %r13, %r15
xorl %eax, %eax
callq 0x5bcf
leaq 0xaca1(%rip), %rsi      # 0xd4d6
movq %rax, %rdi
callq 0x5356
movq %rax, %r14
callq 0x631d
movl $0x2, %edi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5ac7
movq %rax, %rdi
leaq 0xabe4(%rip), %rsi      # 0xd445
callq 0x5356
leaq -0x139b(%rip), %rsi     # 0x14d2
movq %rax, %rdi
callq 0x5669
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x5000
leaq 0xac5a(%rip), %r14      # 0xd4e2
movq %r14, %rdi
callq 0x5531
leaq 0x3dcc(%rip), %rbp      # 0x6663
movq %rax, %rdi
movq %rbp, %rsi
callq 0x59d9
movq %rax, 0x38(%rsp)
callq 0x6125
movq %rax, 0x30(%rsp)
movl $0x2e, %edi
callq 0x54c8
movq %rax, %r13
callq 0x6125
movl $0x2, %edi
leaq 0x363e(%rip), %r12      # 0x5f0d
movq %r12, %rsi
movq %r13, %rdx
movq %rax, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x5bcf
movq %rax, %r13
leaq 0xabf9(%rip), %rdi      # 0xd4e5
callq 0x5531
movq %rax, %r15
movq %r14, %rdi
callq 0x5531
movq %rax, %rdi
movq %rbp, %rsi
callq 0x59d9
movq %rax, %r14
callq 0x6125
subq $0x8, %rsp
movl $0x3, %edi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
movq %rax, %r8
movq 0x10695(%rip), %r9      # 0x12fc0
xorl %eax, %eax
pushq %r9
movq %r9, %r14
callq 0x5bcf
addq $0x10, %rsp
movq %rax, %rdi
movq %rbp, %rsi
callq 0x59d9
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 0x5bcf
addq $0x20, %rsp
leaq 0xab6b(%rip), %rsi      # 0xd4e8
movq %rax, %rdi
callq 0x5356
leaq 0x3d21(%rip), %rsi      # 0x66ad
movq %rax, %rdi
callq 0x5669
movq %rax, %rdi
leaq 0xaaae(%rip), %rsi      # 0xd44c
callq 0x5356
leaq -0x14af(%rip), %rsi     # 0x14fb
movq %rax, %rdi
callq 0x5669
movq 0x48(%rsp), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x5000
callq 0x66e7
leaq -0x14aa(%rip), %rsi     # 0x1524
movq %rax, %rdi
callq 0x5669
movq 0x50(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x5000
callq 0x67a4
leaq -0x14a5(%rip), %rsi     # 0x154d
movq %rax, %rdi
callq 0x5669
movq 0x58(%rsp), %r12
movq %r12, %rdi
movq %rax, %rsi
callq 0x5000
movl $0x2, %edi
movq %r15, %rsi
movq (%rsp), %rdx
xorl %eax, %eax
callq 0x5ac7
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 0x5ac7
addq $0x10, %rsp
leaq -0x14db(%rip), %rsi     # 0x1576
movq %rax, %rdi
callq 0x5669
movq 0x68(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x5000
leaq 0xaa7d(%rip), %rdi      # 0xd4ed
callq 0x6c9a
leaq 0x6fb(%rip), %rdx       # 0x3177
leaq 0xaa7e(%rip), %rcx      # 0xd501
movq %rax, %rdi
movq %r13, %r12
movq %r13, %rsi
callq 0x56c9
leaq -0x1487(%rip), %rsi     # 0x1611
movq %rax, %rdi
callq 0x5669
movq %rax, %rdi
leaq 0xa9c8(%rip), %rsi      # 0xd472
callq 0x5356
movq 0x78(%rsp), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x5000
movq 0x70(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x6c4e
movl $0x5, %edi
movq 0x10(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r14, %rcx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x5ac7
movq %rax, %rdi
leaq 0xa983(%rip), %rsi      # 0xd47b
callq 0x5356
movq 0x80(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x5000
movq %r14, %rdi
callq 0x6ae2
leaq -0x1596(%rip), %rdi     # 0x1589
movq %rax, %rsi
callq 0x5a5b
movq %rax, %rdi
leaq 0xa950(%rip), %rsi      # 0xd481
callq 0x5356
movq %r13, %rdi
movq %rax, %rsi
callq 0x5000
leaq -0x150e(%rip), %r14     # 0x163a
movq %r14, %rdi
movq %r13, %rsi
callq 0x5a2e
movq %rax, %rdi
movq %r12, %rsi
callq 0x6c87
movq %rax, %r15
movl $0x2c, %edi
callq 0x54c8
movq %rax, %rdi
callq 0x6ae2
movl $0x2, %edi
leaq 0x3fd1(%rip), %rsi      # 0x6b50
movq %rax, %rdx
movq %r13, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5bcf
movq %r14, %rdi
movq %rax, %rsi
callq 0x5a2e
leaq -0x14df(%rip), %rsi     # 0x16c2
movl $0x2, %edi
movq %r13, %rdx
movq %rax, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5bcf
movq %rax, %rdi
movq %r12, %rsi
callq 0x6c87
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5ac7
movq %rax, %rdi
leaq 0xa8af(%rip), %rsi      # 0xd48c
callq 0x5356
movq %rbp, %rdi
movq %rax, %rsi
callq 0x5000
leaq -0x13e3(%rip), %r14     # 0x1811
movq %r14, %rdi
movq %r13, %rsi
callq 0x5a2e
movq %rax, %rdi
movq %r12, %rsi
callq 0x6c4e
movq %rax, %r15
movl $0x2c, %edi
callq 0x54c8
movq %rax, %rdi
callq 0x6ae2
movl $0x2, %edi
leaq 0x3f25(%rip), %rsi      # 0x6b50
movq %rax, %rdx
movq %r13, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5bcf
movq %r14, %rdi
movq %rax, %rsi
callq 0x5a2e
leaq -0x13b4(%rip), %rsi     # 0x1899
movl $0x2, %edi
movq %r13, %rdx
movq %rax, %rcx
movq %r12, %r8
xorl %eax, %eax
callq 0x5bcf
movq %rax, %rdi
movq %r12, %rsi
callq 0x6c4e
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5ac7
movq %rax, %rdi
leaq 0xa808(%rip), %rsi      # 0xd491
callq 0x5356
movq 0x20(%rsp), %rdi
movq %rax, %rsi
callq 0x5000
movq 0x58(%rbx), %r15
leaq 0xa7f1(%rip), %rdi      # 0xd497
callq 0x6b0c
movq %rax, %r14
movq %r15, %rdi
callq 0x6ae2
movq %rax, %r12
leaq 0xa85c(%rip), %rdi      # 0xd51c
callq 0x6b0c
movq %rax, %r13
movq %r15, %rdi
callq 0x6ae2
movq %rax, %rbp
leaq 0xa847(%rip), %rdi      # 0xd521
callq 0x6b0c
movq %rax, %rbx
movq %r15, %rdi
callq 0x6ae2
movq %rax, %r10
subq $0x8, %rsp
leaq -0x132f(%rip), %rsi     # 0x19c9
movl $0x6, %edi
movq %r14, %rdx
movq %r12, %rcx
movq %r13, %r8
movq %rbp, %r9
xorl %eax, %eax
movq 0x102ae(%rip), %r11     # 0x12fc0
pushq %r11
pushq %r11
pushq %r11
pushq %r11
pushq %r11
pushq %r10
pushq %rbx
callq 0x5bcf
addq $0x40, %rsp
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x5000
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 0x5ac7
addq $0x10, %rsp
movq %rax, %r14
movl $0x5f, %edi
callq 0x54c8
leaq -0x10a2(%rip), %rsi     # 0x1ce0
movq %rax, %rdi
callq 0x5669
leaq 0xa79b(%rip), %rsi      # 0xd52c
movq %rax, %rdi
callq 0x5356
movl $0x2, %edi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5ac7
movq %rax, %r14
leaq 0xa6e5(%rip), %rdi      # 0xd49a
callq 0x6b0c
movq %rax, (%rsp)
movq %r15, %r13
movq %r15, 0x8(%rsp)
movq %r15, %rdi
callq 0x6ae2
movq %rax, %rbp
leaq 0xa74e(%rip), %rdi      # 0xd526
callq 0x6b0c
movq %rax, %r12
movq %r14, %rdi
callq 0x6ae2
movq %rax, %r14
leaq 0xa737(%rip), %rdi      # 0xd529
callq 0x6b0c
movq %rax, %r15
movq %r13, %rdi
movq 0x101bc(%rip), %r13     # 0x12fc0
movq %r13, %rsi
callq 0x6c4e
subq $0x8, %rsp
leaq -0x11ef(%rip), %rsi     # 0x1c28
movl $0x3, %edi
movq %r14, %rdx
movq %r15, %rcx
movq %rax, %r8
movq %r13, %r9
xorl %eax, %eax
pushq %r13
callq 0x5bcf
addq $0x10, %rsp
movq %rax, %rdi
callq 0x6ae2
leaq -0x12a4(%rip), %rdi     # 0x1ba0
movq %rax, %rsi
callq 0x5a5b
subq $0x8, %rsp
leaq -0x13d9(%rip), %rsi     # 0x1a7e
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 0x5bcf
addq $0x20, %rsp
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x5000
movq 0x40(%rbx), %r12
movq 0x48(%rbx), %rdi
callq 0x6ae2
leaq -0x1097(%rip), %rdi     # 0x1e05
movq %rax, %rsi
callq 0x5a5b
movq %rax, %r14
leaq 0xaec1(%rip), %rdi      # 0xdd6f
callq 0x6b0c
movq %rax, %r15
movq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0x6c4e
subq $0x8, %rsp
leaq -0x11af(%rip), %rsi     # 0x1d1f
movl $0x3, %edi
movq %r14, %rdx
movq %r15, %rcx
movq %rax, %r8
movq %r13, %r9
xorl %eax, %eax
pushq %r13
callq 0x5bcf
addq $0x10, %rsp
movq %r12, %rdi
movq %rax, %rsi
callq 0x5000
movq (%rbx), %rdi
movq 0x80(%rbx), %r14
callq 0x6ae2
movq %rax, %r15
movq %r12, %rdi
callq 0x6ae2
movl $0x2, %edi
movq %r15, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5ac7
leaq -0xfd3(%rip), %rdi      # 0x1f57
movq %rax, %rsi
callq 0x5a5b
movq %rax, %rdi
movq %r13, %rsi
callq 0x69c4
movq %r14, %rdi
movq %rax, %rsi
callq 0x5000
movq %rbx, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq