// File: /workspace/github_c_makefile_star2_O2/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
movq %rax, 0x20(%rsp)
leaq 0x945d(%rip), %rdi      # 0xb4bc
callq 0x450e
movq %rax, 0x18(%rsp)
movq %rax, (%rbx)
leaq 0x93c7(%rip), %rdi      # 0xb43a
callq 0x450e
movq %rax, 0x38(%rsp)
movq %rax, 0x8(%rbx)
leaq 0x93b7(%rip), %rdi      # 0xb43f
callq 0x450e
movq %rax, 0x30(%rsp)
movq %rax, 0x10(%rbx)
leaq 0x93a8(%rip), %rdi      # 0xb445
callq 0x450e
movq %rax, 0x28(%rsp)
movq %rax, 0x18(%rbx)
leaq 0x939a(%rip), %rdi      # 0xb44c
callq 0x450e
movq %rax, 0x48(%rsp)
movq %rax, 0x20(%rbx)
leaq 0x938b(%rip), %rdi      # 0xb452
callq 0x450e
movq %rax, 0x50(%rsp)
movq %rax, 0x28(%rbx)
leaq 0x937b(%rip), %rdi      # 0xb457
callq 0x450e
movq %rax, 0x58(%rsp)
movq %rax, 0x30(%rbx)
leaq 0x936d(%rip), %rdi      # 0xb45e
callq 0x450e
movq %rax, 0x68(%rsp)
movq %rax, 0x38(%rbx)
leaq 0x9360(%rip), %rdi      # 0xb466
callq 0x450e
movq %rax, 0x40(%rbx)
leaq 0x935c(%rip), %rdi      # 0xb472
callq 0x450e
movq %rax, 0x78(%rsp)
movq %rax, 0x48(%rbx)
leaq 0x9350(%rip), %rdi      # 0xb47b
callq 0x450e
movq %rax, 0x80(%rsp)
movq %rax, 0x50(%rbx)
leaq 0x933e(%rip), %rdi      # 0xb481
callq 0x450e
movq %rax, 0x70(%rsp)
movq %rax, 0x58(%rbx)
leaq 0x9334(%rip), %rdi      # 0xb48c
callq 0x450e
movq %rax, (%rsp)
movq %rax, 0x60(%rbx)
leaq 0x9325(%rip), %rdi      # 0xb491
callq 0x450e
movq %rax, 0x8(%rsp)
movq %rax, 0x68(%rbx)
leaq 0x9316(%rip), %rdi      # 0xb497
callq 0x450e
movq %rax, 0x10(%rsp)
movq %rax, 0x70(%rbx)
leaq 0x9304(%rip), %rdi      # 0xb49a
callq 0x450e
movq %rax, 0x60(%rsp)
movq %rax, 0x78(%rbx)
leaq 0x92f4(%rip), %rdi      # 0xb49f
callq 0x450e
movq %rax, 0x80(%rbx)
callq 0x4bb2
leaq 0x32a6(%rip), %r15      # 0x5469
movq %r15, %rdi
movq %rax, %rsi
callq 0x5068
movq 0xedeb(%rip), %r13      # 0x10fc0
leaq 0x92d0(%rip), %rdx      # 0xb4ac
leaq 0x92cc(%rip), %rcx      # 0xb4af
movq %rax, %rdi
movq %r13, %rsi
callq 0x5d6d
leaq 0x92bd(%rip), %rsi      # 0xb4b2
movq %rax, %rdi
callq 0x4a82
movq %rax, %r12
leaq 0x92bd(%rip), %rdi      # 0xb4c4
callq 0x4ce3
movq %rax, %r14
callq 0x4bb2
leaq 0xa04(%rip), %rdx       # 0x2c1f
leaq 0x92a5(%rip), %rcx      # 0xb4c7
movq %rax, %rdi
movq %r13, %rsi
callq 0x4d7d
movq %r15, %rdi
movq %rax, %rsi
callq 0x5068
movq %rax, %rdi
callq 0x5c3c
leaq 0x3ad2(%rip), %r15      # 0x5d19
pushq $0x2
popq %rbp
movl %ebp, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rax, %rcx
movq %r13, %r8
xorl %eax, %eax
callq 0x51d8
movq %rax, %rdi
leaq 0x9253(%rip), %r14      # 0xb4bc
movq %r14, %rsi
callq 0x4a82
movl %ebp, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x50e3
movq %rax, %rdi
movq %r14, %rsi
callq 0x4a82
leaq -0xe36(%rip), %rsi      # 0x145c
movq %rax, %rdi
callq 0x4d31
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x478a
leaq 0x8e72(%rip), %rdi      # 0xb120
callq 0x5cf5
leaq -0xe54(%rip), %r14      # 0x1466
movq %rax, %rdi
movq %r14, %rsi
callq 0x4d31
movq 0x38(%rsp), %rdi
movq %rax, %rsi
callq 0x478a
leaq 0x91cd(%rip), %rdi      # 0xb4a6
callq 0x5cf5
movq %rax, %rdi
movq %r14, %rsi
callq 0x4d31
movq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0x478a
leaq 0x91d6(%rip), %rdi      # 0xb4d3
callq 0x4ce3
movq %rax, %r14
callq 0x5753
movl %ebp, %edi
movq %r15, %rsi
movq %r14, %rdx
movq %rax, %rcx
movq %r13, %r8
xorl %eax, %eax
callq 0x51d8
leaq 0x91b0(%rip), %rsi      # 0xb4d6
movq %rax, %rdi
callq 0x4a82
movq %rax, %r14
callq 0x56f9
movl %ebp, %edi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x50e3
movq %rax, %rdi
leaq 0x90f6(%rip), %rsi      # 0xb445
callq 0x4a82
leaq -0xed4(%rip), %rsi      # 0x1487
movq %rax, %rdi
callq 0x4d31
movq 0x28(%rsp), %rdi
movq %rax, %rsi
callq 0x478a
leaq 0x916b(%rip), %r14      # 0xb4e2
movq %r14, %rdi
callq 0x4c21
leaq 0x35e1(%rip), %rbx      # 0x5967
movq %rax, %rdi
movq %rbx, %rsi
callq 0x5039
movq %rax, 0x18(%rsp)
callq 0x55d8
movq %rax, 0x40(%rsp)
pushq $0x2e
popq %rdi
callq 0x4bcc
movq %rax, %r13
callq 0x55d8
movl %ebp, %edi
leaq 0x30b0(%rip), %r12      # 0x5469
movq %r12, %rsi
movq %r13, %rdx
movq %rax, %rcx
movq 0xebf7(%rip), %rbp      # 0x10fc0
movq %rbp, %r8
xorl %eax, %eax
callq 0x51d8
movq %rax, %r13
leaq 0x9108(%rip), %rdi      # 0xb4e5
callq 0x4c21
movq %rax, %r15
movq %r14, %rdi
callq 0x4c21
movq %rax, %rdi
movq %rbx, %rsi
callq 0x5039
movq %rax, %r14
callq 0x55d8
subq $0x8, %rsp
pushq $0x3
popq %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
movq %rax, %r8
movq %rbp, %r9
xorl %eax, %eax
pushq %rbp
callq 0x51d8
popq %rcx
popq %rdx
movq %rax, %rdi
movq %rbx, %rsi
callq 0x5039
subq $0x8, %rsp
pushq $0x4
popq %rdi
movq %r12, %rsi
movq 0x20(%rsp), %rdx
movq 0x48(%rsp), %rcx
movq %r13, %r8
movq %rax, %r9
xorl %eax, %eax
pushq %rbp
pushq %rbp
pushq %rbp
movq %rbp, %r13
callq 0x51d8
addq $0x20, %rsp
leaq 0x908b(%rip), %rsi      # 0xb4e8
movq %rax, %rdi
callq 0x4a82
leaq 0x352b(%rip), %rsi      # 0x5997
movq %rax, %rdi
callq 0x4d31
movq %rax, %rdi
leaq 0x8fce(%rip), %rsi      # 0xb44c
callq 0x4a82
leaq -0xff8(%rip), %rsi      # 0x1492
movq %rax, %rdi
callq 0x4d31
movq 0x48(%rsp), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x478a
callq 0x59cf
leaq -0x1011(%rip), %rsi     # 0x149d
movq %rax, %rdi
callq 0x4d31
movq 0x50(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x478a
callq 0x5a6b
leaq -0x102a(%rip), %rsi     # 0x14a8
movq %rax, %rdi
callq 0x4d31
movq 0x58(%rsp), %r12
movq %r12, %rdi
movq %rax, %rsi
callq 0x478a
pushq $0x2
popq %rbp
movl %ebp, %edi
movq %r15, %rsi
movq 0x28(%rsp), %rdx
xorl %eax, %eax
callq 0x50e3
pushq $0x7
popq %rdi
movq 0x38(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq %rax, %rcx
movq %r14, %r8
movq %r12, %r9
xorl %eax, %eax
pushq 0x8(%rsp)
pushq 0x8(%rsp)
callq 0x50e3
popq %rcx
popq %rdx
leaq -0x1079(%rip), %rsi     # 0x14b3
movq %rax, %rdi
callq 0x4d31
movq 0x68(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x478a
leaq 0x8fa2(%rip), %rdi      # 0xb4ed
callq 0x5e19
leaq 0x6d4(%rip), %rdx       # 0x2c2b
leaq 0x8fa3(%rip), %rcx      # 0xb501
movq %rax, %rdi
movq %r13, %r12
movq %r13, %rsi
callq 0x4d7d
leaq -0x1064(%rip), %rsi     # 0x150f
movq %rax, %rdi
callq 0x4d31
movq %rax, %rdi
leaq 0x8eed(%rip), %rsi      # 0xb472
callq 0x4a82
movq 0x78(%rsp), %r15
movq %r15, %rdi
movq %rax, %rsi
callq 0x478a
movq 0x70(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x5dcd
pushq $0x5
popq %rdi
movq 0x10(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq %r14, %rcx
movq %r15, %r8
movq %rax, %r9
xorl %eax, %eax
callq 0x50e3
movq %rax, %rdi
leaq 0x8eaa(%rip), %rsi      # 0xb47b
callq 0x4a82
movq 0x80(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
callq 0x478a
movq %r14, %rdi
callq 0x5ccd
leaq -0x1134(%rip), %rdi     # 0x14c4
movq %rax, %rsi
callq 0x508b
movq %rax, %rdi
leaq 0x8e77(%rip), %rsi      # 0xb481
callq 0x4a82
movq %r13, %rdi
movq %rax, %rsi
callq 0x478a
leaq -0x1107(%rip), %r14     # 0x151a
movq %r14, %rdi
movq %r13, %rsi
callq 0x5068
movq %rax, %rdi
movq %r12, %r15
movq %r12, %rsi
callq 0x5e06
movq %rax, %r12
pushq $0x2c
popq %rbx
movl %ebx, %edi
callq 0x4bcc
movq %rax, %rdi
callq 0x5ccd
movl %ebp, %edi
leaq 0x36c1(%rip), %rsi      # 0x5d19
movq %rax, %rdx
movq %r13, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x51d8
movq %r14, %rdi
movq %rax, %rsi
callq 0x5068
leaq -0x1115(%rip), %rsi     # 0x1565
movl %ebp, %edi
movq %r13, %rdx
movq %rax, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x51d8
movq %rax, %rdi
movq %r15, %rsi
callq 0x5e06
movl %ebp, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x50e3
movq %rax, %rdi
leaq 0x8ddc(%rip), %rsi      # 0xb48c
callq 0x4a82
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x478a
leaq -0x10be(%rip), %r14     # 0x160a
movq %r14, %rdi
movq %r13, %rsi
callq 0x5068
movq %rax, %rdi
movq %r15, %rsi
callq 0x5dcd
movq %rax, %r12
movl %ebx, %edi
callq 0x4bcc
movq %rax, %rdi
callq 0x5ccd
movl %ebp, %edi
leaq 0x3620(%rip), %rsi      # 0x5d19
movq %rax, %rdx
movq %r13, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x51d8
movq %r14, %rdi
movq %rax, %rsi
callq 0x5068
leaq -0x10c6(%rip), %rsi     # 0x1655
movl %ebp, %edi
movq %r13, %rdx
movq %rax, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x51d8
movq %rax, %rdi
movq %r15, %rsi
callq 0x5dcd
movl %ebp, %edi
movq %r12, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x50e3
movq %rax, %rdi
leaq 0x8d40(%rip), %rsi      # 0xb491
callq 0x4a82
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x478a
movq 0x20(%rsp), %rax
movq 0x58(%rax), %r15
leaq 0x8d24(%rip), %rdi      # 0xb497
callq 0x5cf5
movq %rax, %r14
movq %r15, %rdi
callq 0x5ccd
movq %rax, %r12
leaq 0x8d8f(%rip), %rdi      # 0xb51c
callq 0x5cf5
movq %rax, %r13
movq %r15, %rdi
callq 0x5ccd
movq %rax, %rbp
leaq 0x8d7a(%rip), %rdi      # 0xb521
callq 0x5cf5
movq %rax, %rbx
movq %r15, %rdi
callq 0x5ccd
movq %rax, %r10
subq $0x8, %rsp
leaq -0x10ea(%rip), %rsi     # 0x16db
pushq $0x6
popq %rdi
movq %r14, %rdx
movq %r12, %rcx
movq %r13, %r8
movq %rbp, %r9
xorl %eax, %eax
movq 0xe7e3(%rip), %r11      # 0x10fc0
pushq %r11
pushq %r11
pushq %r11
pushq %r11
pushq %r11
pushq %r10
pushq %rbx
callq 0x51d8
addq $0x40, %rsp
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x478a
movq 0x20(%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
pushq $0x6
popq %rdi
xorl %eax, %eax
pushq 0x30(%rbx)
callq 0x50e3
popq %rcx
popq %rdx
movq %rax, %r14
pushq $0x5f
popq %rdi
callq 0x4bcc
leaq -0xf53(%rip), %rsi      # 0x18f4
movq %rax, %rdi
callq 0x4d31
leaq 0x8cd6(%rip), %rsi      # 0xb52c
movq %rax, %rdi
callq 0x4a82
pushq $0x2
popq %rdi
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x50e3
movq %rax, %r14
leaq 0x8c22(%rip), %rdi      # 0xb49a
callq 0x5cf5
movq %rax, (%rsp)
movq %r15, %r13
movq %r15, 0x8(%rsp)
movq %r15, %rdi
callq 0x5ccd
movq %rax, %rbp
leaq 0x8c8b(%rip), %rdi      # 0xb526
callq 0x5cf5
movq %rax, %r12
movq %r14, %rdi
callq 0x5ccd
movq %rax, %r14
leaq 0x8c74(%rip), %rdi      # 0xb529
callq 0x5cf5
movq %rax, %r15
movq %r13, %rdi
movq 0xe6f9(%rip), %r13      # 0x10fc0
movq %r13, %rsi
callq 0x5dcd
subq $0x8, %rsp
leaq -0x1071(%rip), %rsi     # 0x1869
pushq $0x3
popq %rdi
movq %r14, %rdx
movq %r15, %rcx
movq %rax, %r8
movq %r13, %r9
xorl %eax, %eax
pushq %r13
callq 0x51d8
popq %rcx
popq %rdx
movq %rax, %rdi
callq 0x5ccd
leaq -0x10e5(%rip), %rdi     # 0x181e
movq %rax, %rsi
callq 0x508b
subq $0x8, %rsp
leaq -0x11bc(%rip), %rsi     # 0x175a
pushq $0x4
popq %rdi
movq 0x8(%rsp), %rdx
movq %rbp, %rcx
movq %r12, %r8
movq %rax, %r9
xorl %eax, %eax
pushq %r13
pushq %r13
pushq %r13
callq 0x51d8
addq $0x20, %rsp
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x478a
movq 0x40(%rbx), %r12
movq 0x48(%rbx), %rdi
callq 0x5ccd
leaq -0xf8c(%rip), %rdi      # 0x19cd
movq %rax, %rsi
callq 0x508b
movq %rax, %r14
leaq 0x9404(%rip), %rdi      # 0xbd6f
callq 0x5cf5
movq %rax, %r15
movq 0x8(%rsp), %rdi
movq %r13, %rsi
callq 0x5dcd
subq $0x8, %rsp
leaq -0x1070(%rip), %rsi     # 0x191b
pushq $0x3
popq %rdi
movq %r14, %rdx
movq %r15, %rcx
movq %rax, %r8
movq %r13, %r9
xorl %eax, %eax
pushq %r13
callq 0x51d8
popq %rcx
popq %rdx
movq %r12, %rdi
movq %rax, %rsi
callq 0x478a
movq (%rbx), %rdi
movq 0x80(%rbx), %r14
callq 0x5ccd
movq %rax, %r15
movq %r12, %rdi
callq 0x5ccd
pushq $0x2
popq %rdi
movq %r15, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x50e3
leaq -0xf0d(%rip), %rdi      # 0x1ad4
movq %rax, %rsi
callq 0x508b
movq %rax, %rdi
movq %r13, %rsi
callq 0x5bf1
movq %r14, %rdi
movq %rax, %rsi
callq 0x478a
movq %rbx, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq