// File: /workspace/github_cpp_makefile_star2_O2/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
andq $0x0, 0x8(%rdx)
movq %rsi, (%rdx)
leaq 0x1899(%rip), %r15      # 0x9b54
movq %r15, 0x18(%rdx)
leaq 0x18c8(%rip), %r12      # 0x9b8e
movq %r12, 0x10(%rdx)
leaq 0x909f(%rip), %rsi      # 0x11370
leaq 0xe8(%rsp), %rdi
callq 0x781c
leaq 0x288(%rsp), %rdx
andq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x1, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x8fac(%rip), %rsi      # 0x112b0
leaq 0xc8(%rsp), %rdi
callq 0x781c
leaq 0x108(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x79e2
leaq 0x268(%rsp), %rdx
andq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x1, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x8f7c(%rip), %rsi      # 0x112d0
leaq 0xa8(%rsp), %rdi
callq 0x781c
leaq 0x128(%rsp), %rdi
leaq 0x108(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0x79e2
leaq 0x248(%rsp), %rdx
andq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
leaq 0x1821(%rip), %rax      # 0x9bb6
movq %rax, 0x18(%rdx)
leaq 0x191e(%rip), %rax      # 0x9cbe
movq %rax, 0x10(%rdx)
leaq 0x8f45(%rip), %rsi      # 0x112f0
leaq 0x88(%rsp), %rdi
callq 0x781c
leaq 0x148(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0x88(%rsp), %rdx
callq 0x79e2
leaq 0x228(%rsp), %rdx
andq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x4, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x8f15(%rip), %rsi      # 0x11310
leaq 0x68(%rsp), %rdi
callq 0x781c
leaq 0x168(%rsp), %rdi
leaq 0x148(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0x79e2
leaq 0x208(%rsp), %rdx
andq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x5, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x8eeb(%rip), %rsi      # 0x11330
leaq 0x48(%rsp), %rdi
callq 0x781c
leaq 0x188(%rsp), %rdi
leaq 0x168(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0x79e2
leaq 0x1e8(%rsp), %rdx
andq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movl $0x6, 0x8(%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x8ec1(%rip), %rsi      # 0x11350
leaq 0x28(%rsp), %rdi
callq 0x781c
leaq 0x1a8(%rsp), %rdi
leaq 0x188(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0x79e2
leaq 0x1c8(%rsp), %rdx
andq $0x0, 0x8(%rdx)
movq %r14, (%rdx)
movq %r15, 0x18(%rdx)
movq %r12, 0x10(%rdx)
leaq 0x8ebe(%rip), %rsi      # 0x11390
leaq 0x8(%rsp), %rdi
callq 0x781c
leaq 0x1a8(%rsp), %rsi
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0x79e2
leaq 0x8(%rsp), %rdi
callq 0x7274
leaq 0x1c8(%rsp), %rdi
callq 0x7274
leaq 0x1a8(%rsp), %rdi
callq 0x7274
leaq 0x28(%rsp), %rdi
callq 0x7274
leaq 0x1e8(%rsp), %rdi
callq 0x7274
leaq 0x188(%rsp), %rdi
callq 0x7274
leaq 0x48(%rsp), %rdi
callq 0x7274
leaq 0x208(%rsp), %rdi
callq 0x7274
leaq 0x168(%rsp), %rdi
callq 0x7274
leaq 0x68(%rsp), %rdi
callq 0x7274
leaq 0x228(%rsp), %rdi
callq 0x7274
leaq 0x148(%rsp), %rdi
callq 0x7274
leaq 0x88(%rsp), %rdi
callq 0x7274
leaq 0x248(%rsp), %rdi
callq 0x7274
leaq 0x128(%rsp), %rdi
callq 0x7274
leaq 0xa8(%rsp), %rdi
callq 0x7274
leaq 0x268(%rsp), %rdi
callq 0x7274
leaq 0x108(%rsp), %rdi
callq 0x7274
leaq 0xc8(%rsp), %rdi
callq 0x7274
leaq 0x288(%rsp), %rdi
callq 0x7274
leaq 0xe8(%rsp), %rdi
callq 0x7274
leaq 0x2a8(%rsp), %rdi
callq 0x7274
movq %rbx, %rax
addq $0x2c8, %rsp            # imm = 0x2C8
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x7274
jmp 0x8627
movq %rax, %rbx
leaq 0x1c8(%rsp), %rdi
callq 0x7274
leaq 0x1a8(%rsp), %rdi
callq 0x7274
jmp 0x8646
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x7274
jmp 0x8655
movq %rax, %rbx
leaq 0x1e8(%rsp), %rdi
callq 0x7274
leaq 0x188(%rsp), %rdi
callq 0x7274
jmp 0x8674
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x7274
leaq 0x208(%rsp), %rdi
callq 0x7274
leaq 0x168(%rsp), %rdi
callq 0x7274
leaq 0x68(%rsp), %rdi
callq 0x7274
leaq 0x228(%rsp), %rdi
callq 0x7274
leaq 0x148(%rsp), %rdi
callq 0x7274
leaq 0x88(%rsp), %rdi
callq 0x7274
leaq 0x248(%rsp), %rdi
callq 0x7274
leaq 0x128(%rsp), %rdi
callq 0x7274
leaq 0xa8(%rsp), %rdi
callq 0x7274
leaq 0x268(%rsp), %rdi
callq 0x7274
leaq 0x108(%rsp), %rdi
callq 0x7274
leaq 0xc8(%rsp), %rdi
callq 0x7274
leaq 0x288(%rsp), %rdi
callq 0x7274
leaq 0xe8(%rsp), %rdi
callq 0x7274
leaq 0x2a8(%rsp), %rdi
callq 0x7274
movq %rbx, %rdi
callq 0x32b0
movq %rax, %rbx
jmp 0x867e
movq %rax, %rbx
jmp 0x8698
movq %rax, %rbx
jmp 0x86a2
movq %rax, %rbx
jmp 0x86bc
movq %rax, %rbx
jmp 0x86c9
movq %rax, %rbx
jmp 0x86e3
movq %rax, %rbx
jmp 0x86f0
movq %rax, %rbx
jmp 0x870a
movq %rax, %rbx
jmp 0x8717
movq %rax, %rbx
jmp 0x8731
nop