// File: smallsimple[P]CoreInterpreter-CSE5341/Tokenizer.cpp
// Function: Tokenizer::isLegalToken(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
bool Tokenizer::isLegalToken(string temp){
  int flag = 0;
  Token tok;
  // is temp a reserved word
  if (int ID = isRes(temp)){
    flag = 1;
    tok.name = temp;
    tok.num = ID;
    tokens.push_back(tok);
  }
  // is temp a integer
  if (flag ==0 && isIntegers(temp)){
    flag = 1;
    tok.name = temp;
    tok.num = 31;
    tokens.push_back(tok);
  }
  // is temp a legal identifier
  if (flag ==0 && isIdenti(temp)){
    flag = 1;
    tok.name = temp;
    tok.num = 32;
    tokens.push_back(tok);
  }
  // temps is not one of reserved word, special symbols, integer and Id
  // print error
  if (flag == 0){
    cout << "Error!!!" << endl;
    cout << "the current recognized tokens are:" << endl;
    this->printTokensName();
    cout << "cooresponding numbers are:" << endl;
    this->printTokensNum();
    cout << "\"" << temp << "\"" << " is not a legal token." << endl;
    return false;
  }
  else{
    return true;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rsi, -0xd8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xe0(%rbp)
movl $0x0, -0x1c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x4dc0
movq -0xd8(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0x20d0
jmp 0x3d37
movq -0xe0(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3a70
movl %eax, -0xe4(%rbp)
jmp 0x3d4f
leaq -0x70(%rbp), %rdi
callq 0x2110
movl -0xe4(%rbp), %eax
movl %eax, -0x4c(%rbp)
cmpl $0x0, -0x4c(%rbp)
je 0x3dc5
movq -0xd8(%rbp), %rsi
movl $0x1, -0x1c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x2040
jmp 0x3d80
movq -0xe0(%rbp), %rdi
movl -0x4c(%rbp), %eax
movl %eax, -0x48(%rbp)
leaq -0x48(%rbp), %rsi
callq 0x4de0
jmp 0x3d98
jmp 0x3dc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4106
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x2110
jmp 0x4106
movl -0x1c(%rbp), %ecx
movb $0x0, -0xa1(%rbp)
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0xe5(%rbp)
jne 0x3e21
movq -0xd8(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x20d0
jmp 0x3df1
movq -0xe0(%rbp), %rdi
movb $0x1, -0xa1(%rbp)
leaq -0xa0(%rbp), %rsi
callq 0x3ae0
movb %al, -0xe6(%rbp)
jmp 0x3e13
movb -0xe6(%rbp), %al
movb %al, -0xe5(%rbp)
jmp 0x3e21
movb -0xe5(%rbp), %al
movb %al, -0xe7(%rbp)
testb $0x1, -0xa1(%rbp)
jne 0x3e38
jmp 0x3e44
leaq -0xa0(%rbp), %rdi
callq 0x2110
movb -0xe7(%rbp), %al
testb $0x1, %al
jne 0x3e50
jmp 0x3eac
movq -0xd8(%rbp), %rsi
movl $0x1, -0x1c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x2040
jmp 0x3e69
movq -0xe0(%rbp), %rdi
movl $0x1f, -0x48(%rbp)
leaq -0x48(%rbp), %rsi
callq 0x4de0
jmp 0x3e82
jmp 0x3eac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
testb $0x1, -0xa1(%rbp)
jne 0x3e9b
jmp 0x3ea7
leaq -0xa0(%rbp), %rdi
callq 0x2110
jmp 0x4106
movl -0x1c(%rbp), %ecx
movb $0x0, -0xc9(%rbp)
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0xe8(%rbp)
jne 0x3f08
movq -0xd8(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x20d0
jmp 0x3ed8
movq -0xe0(%rbp), %rdi
movb $0x1, -0xc9(%rbp)
leaq -0xc8(%rbp), %rsi
callq 0x3b60
movb %al, -0xe9(%rbp)
jmp 0x3efa
movb -0xe9(%rbp), %al
movb %al, -0xe8(%rbp)
jmp 0x3f08
movb -0xe8(%rbp), %al
movb %al, -0xea(%rbp)
testb $0x1, -0xc9(%rbp)
jne 0x3f1f
jmp 0x3f2b
leaq -0xc8(%rbp), %rdi
callq 0x2110
movb -0xea(%rbp), %al
testb $0x1, %al
jne 0x3f37
jmp 0x3f93
movq -0xd8(%rbp), %rsi
movl $0x1, -0x1c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x2040
jmp 0x3f50
movq -0xe0(%rbp), %rdi
movl $0x20, -0x48(%rbp)
leaq -0x48(%rbp), %rsi
callq 0x4de0
jmp 0x3f69
jmp 0x3f93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
testb $0x1, -0xc9(%rbp)
jne 0x3f82
jmp 0x3f8e
leaq -0xc8(%rbp), %rdi
callq 0x2110
jmp 0x4106
cmpl $0x0, -0x1c(%rbp)
jne 0x40e1
movq 0xd034(%rip), %rdi      # 0x10fd8
leaq 0x813d(%rip), %rsi      # 0xc0e8
callq 0x21d0
movq %rax, -0xf8(%rbp)
jmp 0x3fb9
movq -0xf8(%rbp), %rdi
movq 0xd001(%rip), %rsi      # 0x10fc8
callq 0x2210
jmp 0x3fce
movq 0xd003(%rip), %rdi      # 0x10fd8
leaq 0x8115(%rip), %rsi      # 0xc0f1
callq 0x21d0
movq %rax, -0x100(%rbp)
jmp 0x3fea
movq -0x100(%rbp), %rdi
movq 0xcfd0(%rip), %rsi      # 0x10fc8
callq 0x2210
jmp 0x3fff
movq -0xe0(%rbp), %rdi
callq 0x37d0
jmp 0x400d
movq 0xcfc4(%rip), %rdi      # 0x10fd8
leaq 0x80f9(%rip), %rsi      # 0xc114
callq 0x21d0
movq %rax, -0x108(%rbp)
jmp 0x4029
movq -0x108(%rbp), %rdi
movq 0xcf91(%rip), %rsi      # 0x10fc8
callq 0x2210
jmp 0x403e
movq -0xe0(%rbp), %rdi
callq 0x3860
jmp 0x404c
movq 0xcf85(%rip), %rdi      # 0x10fd8
leaq 0x8420(%rip), %rsi      # 0xc47a
callq 0x21d0
movq %rax, -0x110(%rbp)
jmp 0x4068
movq -0xd8(%rbp), %rsi
movq -0x110(%rbp), %rdi
callq 0x21b0
movq %rax, -0x118(%rbp)
jmp 0x4084
movq -0x118(%rbp), %rdi
leaq 0x83e8(%rip), %rsi      # 0xc47a
callq 0x21d0
movq %rax, -0x120(%rbp)
jmp 0x40a0
movq -0x120(%rbp), %rdi
leaq 0x8081(%rip), %rsi      # 0xc12f
callq 0x21d0
movq %rax, -0x128(%rbp)
jmp 0x40bc
movq -0x128(%rbp), %rdi
movq 0xcefe(%rip), %rsi      # 0x10fc8
callq 0x2210
jmp 0x40d1
movb $0x0, -0x1(%rbp)
movl $0x1, -0xd0(%rbp)
jmp 0x40ef
movb $0x1, -0x1(%rbp)
movl $0x1, -0xd0(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x4e50
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
leaq -0x48(%rbp), %rdi
callq 0x4e50
movq -0x78(%rbp), %rdi
callq 0x2370
nopl (%rax,%rax)