// File: /workspace/github_cpp_makefile_star2_O3/silverneko[P]Lambda-calculus-interpreter/src/ExpressionParser.cpp
// Function: tokenParser(Token&)
Parser tokenParser(Token& token){
  auto f = [&token](Token::Type t){
    return [&token, t](const string& str){ token = Token(t, str);};
  };
  auto g = [&token](const string& str){
    if(str == "let") token = Token(Token::Keyword, "let");
    else if(str == "in") token = Token(Token::Keyword, "in");
    else token = Token(Token::Identifier, str);
  };
  return (comment[f(Token::Undefined)]
      | integer[f(Token::Constant)]
      | charLiteral[f(Token::Constant)]
      | identifier[g]
      | lambda[f(Token::Lambda)]
      | leftBracket[f(Token::LeftBracket)]
      | rightBracket[f(Token::RightBracket)]
      | panic[f(Token::Undefined)]
      );
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x2c8, %rsp            # imm = 0x2C8
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x2a8(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %rsi, (%rdx)
leaq 0x22f0(%rip), %r15      # 0xd712
movq %r15, 0x18(%rdx)
leaq 0x2351(%rip), %r12      # 0xd77e
movq %r12, 0x10(%rdx)
leaq 0x9f48(%rip), %rsi      # 0x15380
leaq 0xe8(%rsp), %rdi
callq 0xa2a0
leaq 0x288(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x1, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x9e52(%rip), %rsi      # 0x152c0
leaq 0xc8(%rsp), %rdi
callq 0xa2a0
leaq 0x108(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0xa567
leaq 0x268(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x1, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x9e1f(%rip), %rsi      # 0x152e0
leaq 0xa8(%rsp), %rdi
callq 0xa2a0
leaq 0x128(%rsp), %rdi
leaq 0x108(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0xa567
leaq 0x248(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
leaq 0x22a1(%rip), %rax      # 0xd7a6
movq %rax, 0x18(%rdx)
leaq 0x23f2(%rip), %rax      # 0xd902
movq %rax, 0x10(%rdx)
leaq 0x9de5(%rip), %rsi      # 0x15300
leaq 0x88(%rsp), %rdi
callq 0xa2a0
leaq 0x148(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0x88(%rsp), %rdx
callq 0xa567
leaq 0x228(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x4, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x9db2(%rip), %rsi      # 0x15320
leaq 0x68(%rsp), %rdi
callq 0xa2a0
leaq 0x168(%rsp), %rdi
leaq 0x148(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0xa567
leaq 0x208(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x5, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x9d85(%rip), %rsi      # 0x15340
leaq 0x48(%rsp), %rdi
callq 0xa2a0
leaq 0x188(%rsp), %rdi
leaq 0x168(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0xa567
leaq 0x1e8(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x6, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x9d58(%rip), %rsi      # 0x15360
leaq 0x28(%rsp), %rdi
callq 0xa2a0
leaq 0x1a8(%rsp), %rdi
leaq 0x188(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0xa567
leaq 0x1c8(%rsp), %rdx
movq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x9d52(%rip), %rsi      # 0x153a0
leaq 0x8(%rsp), %rdi
callq 0xa2a0
leaq 0x1a8(%rsp), %rsi
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xa567
movq 0x18(%rsp), %rax
testq %rax, %rax
je 0xb686
leaq 0x8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x1d8(%rsp), %rax
testq %rax, %rax
je 0xb6a5
leaq 0x1c8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x1b8(%rsp), %rax
testq %rax, %rax
je 0xb6c4
leaq 0x1a8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x38(%rsp), %rax
testq %rax, %rax
je 0xb6dd
leaq 0x28(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x1f8(%rsp), %rax
testq %rax, %rax
je 0xb6fc
leaq 0x1e8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x198(%rsp), %rax
testq %rax, %rax
je 0xb71b
leaq 0x188(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x58(%rsp), %rax
testq %rax, %rax
je 0xb734
leaq 0x48(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x218(%rsp), %rax
testq %rax, %rax
je 0xb753
leaq 0x208(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x178(%rsp), %rax
testq %rax, %rax
je 0xb772
leaq 0x168(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x78(%rsp), %rax
testq %rax, %rax
je 0xb78b
leaq 0x68(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x238(%rsp), %rax
testq %rax, %rax
je 0xb7aa
leaq 0x228(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x158(%rsp), %rax
testq %rax, %rax
je 0xb7c9
leaq 0x148(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x98(%rsp), %rax
testq %rax, %rax
je 0xb7e8
leaq 0x88(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x258(%rsp), %rax
testq %rax, %rax
je 0xb807
leaq 0x248(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x138(%rsp), %rax
testq %rax, %rax
je 0xb826
leaq 0x128(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0xb8(%rsp), %rax
testq %rax, %rax
je 0xb845
leaq 0xa8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x278(%rsp), %rax
testq %rax, %rax
je 0xb864
leaq 0x268(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x118(%rsp), %rax
testq %rax, %rax
je 0xb883
leaq 0x108(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0xd8(%rsp), %rax
testq %rax, %rax
je 0xb8a2
leaq 0xc8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x298(%rsp), %rax
testq %rax, %rax
je 0xb8c1
leaq 0x288(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0xf8(%rsp), %rax
testq %rax, %rax
je 0xb8e0
leaq 0xe8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x2b8(%rsp), %rax
testq %rax, %rax
je 0xb8ff
leaq 0x2a8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq %rbx, %rax
addq $0x2c8, %rsp            # imm = 0x2C8
popq %rbx
popq %r12
popq %r14
popq %r15
retq
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0x18(%rsp), %rax
testq %rax, %rax
je 0xb9a5
leaq 0x8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xb9a5
jmp 0xbcc2
movq %rax, %rbx
movq 0x1d8(%rsp), %rax
testq %rax, %rax
je 0xb9c4
leaq 0x1c8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x1b8(%rsp), %rax
testq %rax, %rax
je 0xb9f2
leaq 0x1a8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xb9f2
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0x38(%rsp), %rax
testq %rax, %rax
je 0xba15
leaq 0x28(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xba15
jmp 0xbcc2
movq %rax, %rbx
movq 0x1f8(%rsp), %rax
testq %rax, %rax
je 0xba34
leaq 0x1e8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x198(%rsp), %rax
testq %rax, %rax
je 0xba62
leaq 0x188(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xba62
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0x58(%rsp), %rax
testq %rax, %rax
je 0xba85
leaq 0x48(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xba85
jmp 0xbcc2
movq %rax, %rbx
movq 0x218(%rsp), %rax
testq %rax, %rax
je 0xbaa4
leaq 0x208(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x178(%rsp), %rax
testq %rax, %rax
je 0xbad2
leaq 0x168(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbad2
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0x78(%rsp), %rax
testq %rax, %rax
je 0xbaf5
leaq 0x68(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbaf5
jmp 0xbcc2
movq %rax, %rbx
movq 0x238(%rsp), %rax
testq %rax, %rax
je 0xbb14
leaq 0x228(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x158(%rsp), %rax
testq %rax, %rax
je 0xbb42
leaq 0x148(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbb42
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0x98(%rsp), %rax
testq %rax, %rax
je 0xbb6b
leaq 0x88(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbb6b
jmp 0xbcc2
movq %rax, %rbx
movq 0x258(%rsp), %rax
testq %rax, %rax
je 0xbb8a
leaq 0x248(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x138(%rsp), %rax
testq %rax, %rax
je 0xbbb8
leaq 0x128(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbbb8
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0xb8(%rsp), %rax
testq %rax, %rax
je 0xbbe1
leaq 0xa8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbbe1
jmp 0xbcc2
movq %rax, %rbx
movq 0x278(%rsp), %rax
testq %rax, %rax
je 0xbc00
leaq 0x268(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0x118(%rsp), %rax
testq %rax, %rax
je 0xbc2e
leaq 0x108(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbc2e
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0xd8(%rsp), %rax
testq %rax, %rax
je 0xbc54
leaq 0xc8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbc54
jmp 0xbcc2
movq %rax, %rbx
movq 0x298(%rsp), %rax
testq %rax, %rax
je 0xbc73
leaq 0x288(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq 0xf8(%rsp), %rax
testq %rax, %rax
je 0xbc9b
leaq 0xe8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
jmp 0xbc9b
jmp 0xbcc2
jmp 0xbcc2
movq %rax, %rbx
movq 0x2b8(%rsp), %rax
testq %rax, %rax
je 0xbcba
leaq 0x2a8(%rsp), %rdi
movq %rdi, %rsi
movl $0x3, %edx
callq *%rax
movq %rbx, %rdi
callq 0x32d0
movq %rax, %rdi
callq 0x9c1b