// File: /workspace/github_c_makefile_star2_O3/g3ida[P]g3idaCompiler/lexical.c
// Function: analLex
Symbole analLex(void)
{
 /* index for storing into lexeme */
   int lexemeIndex = 0;
   /* holds current token to be returned */
   Symbole current;
   /* current state - always begins at START */
   StateType state = START;
   /* flag to indicate save to lexeme */
   int save;
   while (state != DONE)
   { int c = fgetc(input);
     save = TRUE;
     switch (state)
     { case START:
         if (isdigit(c))
           state = INNUM;
         else if (isalpha(c))
           state = INID;
         else if (c == ':')
           state = INASSIGN;
         else if ((c == ' ') || (c == '\t') || (c == '\n')) {
            if(c == '\n') lineno++;
            save = FALSE;
         }
         else if (c == '(')
         { save = FALSE;
           state = INPARENT;
         }
         else if (c == '=')
         { save = FALSE;
           state = INEQ;
         }
        else if (c == '<')
         { save = FALSE;
           state = INNEQ;
         }
        else if (c == '>')
         { save = FALSE;
           state = INGEQ;
         }
        else if (c == '&')
         { save = FALSE;
           state = INAND;
         }
        else if (c == '|')
         { save = FALSE;
           state = INOR;
         }
         else
         { state = DONE;
           switch (c)
           { case EOF:
               save = FALSE; current = ENDFILE; break;
             case '%':
               current = MOD; break;
             case '+':
               current = PLUS; break;
             case '-':
               current = MINUS; break;
             case '*':
               current = MULT; break;
             case '/':
               current = DIV; break;
            case ',':
               current = COMMA; break;
            case '.':
               current = POINT; break;
             case ')':
               current = RPAREN; break;
             case ';':
               current = SEMI; break;
             default:
               current = ERROR; break;
           }
         }
         break;
        case INPARENT:
          save = FALSE;
          if (c == '*'){
            state = INCOMMENT;
            break;
          } else {
            state = DONE;
            ungetc(c, input);
            current = LPAREN;
          }
          break;

       case INCOMMENT:
         save = FALSE;
         if (c == EOF)
         { state = DONE;
           current = ENDFILE;
         } else if(c == '\n') {
            lineno++;
         }
         else if (c == '*') {
            int v = fgetc(input);
            if(v == ')') {
                state = START;
                break;
            }
         }
         break;
       case INASSIGN:
         state = DONE;
         if (c == '=')
           current = ASSIGN;
         else
         { /* backup in the input */
           ungetc(c, input);
           save = FALSE;
           current = TWOPTS;
           state = DONE;
         }
         break;
       case INNUM:
         if (!isdigit(c))
         { /* backup in the input */
           ungetc(c, input);
           save = FALSE;
           state = DONE;
           current = NUM;
         }
         break;

         case INNEQ:
          if (c == '=') {
            state = DONE;
            current = LTE;
          } else if(c == '>') {
            state = DONE;
            current = NEQ;
          }
          else
          {
            ungetc(c, input);
            state = DONE;
            current = LT;
          }
          break;

          case INGEQ:
          if (c == '=') {
            state = DONE;
            current = GTE;
          }
          else
          { ungetc(c, input);
            state = DONE;
            current = GT;
          }
          break;

         case INAND:
          if (c == '&') {
            state = DONE;
            current = AND;
          } else {
            ungetc(c, input);
            state = DONE;
           current = ERROR;
          }
          break;

        case INOR:
          if (c == '|') {
            state = DONE;
            current = OR;
          } else {
            ungetc(c, input);
            state = DONE;
           current = ERROR;
          }
         break;

        case INEQ:
          if (c == '=') {
            state = DONE;
            current = EQ;
          } else {
            ungetc(c, input);
            state = DONE;
           current = ERROR;
          }
         break;

       case INID:
         if (!isalpha(c) && !isdigit(c))
         { /* backup in the input */
           ungetc(c, input);
           save = FALSE;
           state = DONE;
           current = ID;
         }
         break;
       case DONE:
       default: /* should never happen */
         printf("Scanner Bug\n");
         state = DONE;
         current = ERROR;
         break;
     }
     if ((save) && (lexemeIndex <= MAX_LEN)) {
       lexeme[lexemeIndex++] = (char) c;
     }
     if (state == DONE)
     { lexeme[lexemeIndex] = '\0';
       if (current == ID)
         current = unilexId(lexeme);
     }
   }
   return current;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
xorl %ebp, %ebp
leaq 0x1121(%rip), %r12      # 0x3418
xorl %r13d, %r13d
movq 0x375f(%rip), %rdi      # 0x5a60
callq 0x10b0
movl %eax, %r14d
movl %r13d, %eax
movslq (%r12,%rax,4), %rax
addq %r12, %rax
jmpq *%rax
callq 0x1130
movq (%rax), %rax
movslq %r14d, %rcx
movzwl (%rax,%rcx,2), %eax
btl $0xb, %eax
jb 0x23df
btl $0xa, %eax
jb 0x237b
cmpl $0x1f, %r14d
jle 0x2513
leal -0x20(%r14), %eax
cmpl $0x1e, %eax
ja 0x2531
leaq 0x10f2(%rip), %rcx      # 0x3444
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x1f, %ebx
jmp 0x2419
callq 0x1130
movq (%rax), %rax
movslq %r14d, %rcx
testb $0xc, 0x1(%rax,%rcx,2)
je 0x2612
movl $0x4, %r13d
jmp 0x23e5
movl $0x1b, %ebx
movl $0xb, %r13d
movb $0x1, %r15b
cmpl $0x7c, %r14d
jne 0x248f
jmp 0x24a3
movl $0x2, %r13d
cmpl $0xa, %r14d
je 0x2508
cmpl $0x2a, %r14d
je 0x24ed
cmpl $-0x1, %r14d
jne 0x24c1
jmp 0x269e
callq 0x1130
movq (%rax), %rax
movslq %r14d, %rcx
testb $0x8, 0x1(%rax,%rcx,2)
je 0x2604
movl $0x3, %r13d
xorl %r15d, %r15d
jmp 0x24a3
movl $0x13, %ebx
movl $0xb, %r13d
movb $0x1, %r15b
cmpl $0x3d, %r14d
jne 0x248f
jmp 0x24a3
cmpl $0x3d, %r14d
jne 0x260b
movl $0x23, %ebx
movl $0xb, %r13d
movb $0x1, %r15b
jmp 0x24a3
movl $0x18, %ebx
movl $0xb, %r13d
movb $0x1, %r15b
cmpl $0x3d, %r14d
je 0x24a3
movq 0x3621(%rip), %rsi      # 0x5a60
movl %r14d, %edi
callq 0x10f0
movl $0x16, %ebx
jmp 0x24a3
movl $0xb, %r13d
movb $0x1, %r15b
cmpl $0x3d, %r14d
je 0x24d0
cmpl $0x3e, %r14d
jne 0x24d7
movl $0x14, %ebx
jmp 0x24a3
movl $0x2, %r13d
cmpl $0x2a, %r14d
je 0x24c1
jmp 0x266b
movl $0x1c, %ebx
movl $0xb, %r13d
movb $0x1, %r15b
cmpl $0x26, %r14d
je 0x24a3
movq 0x35ca(%rip), %rsi      # 0x5a60
movl %r14d, %edi
callq 0x10f0
movl $0x22, %ebx
cmpl $0x3c, %ebp
jg 0x24b8
movslq %ebp, %rax
incl %ebp
leaq 0x35bc(%rip), %rcx      # 0x5a70
movb %r14b, (%rax,%rcx)
testb %r15b, %r15b
jne 0x25ec
cmpl $0xb, %r13d
jne 0x22fa
jmp 0x268d
movl $0x17, %ebx
jmp 0x24a3
movq 0x3582(%rip), %rsi      # 0x5a60
movl %r14d, %edi
callq 0x10f0
movl $0x15, %ebx
jmp 0x24a3
movq 0x356c(%rip), %rdi      # 0x5a60
callq 0x10b0
xorl %r13d, %r13d
cmpl $0x29, %eax
setne %r13b
addl %r13d, %r13d
jmp 0x24c1
leaq 0x2ba1(%rip), %rax      # 0x50b0
incl (%rax)
jmp 0x24c1
cmpl $0x9, %r14d
je 0x252c
cmpl $0xa, %r14d
jne 0x25d8
leaq 0x2b86(%rip), %rax      # 0x50b0
incl (%rax)
xorl %r13d, %r13d
jmp 0x24c1
cmpl $0x7c, %r14d
jne 0x25e2
movl $0x9, %r13d
jmp 0x24c1
movl $0x21, %ebx
jmp 0x2419
movl $0x26, %ebx
jmp 0x2419
movl $0x12, %ebx
jmp 0x2419
movl $0x6, %r13d
jmp 0x24c1
movl $0x19, %ebx
jmp 0x2419
movl $0xa, %r13d
jmp 0x24c1
movl $0x1, %r13d
jmp 0x23e5
movl $0x8, %r13d
jmp 0x24c1
movl $0x1d, %ebx
jmp 0x2419
movl $0x1a, %ebx
jmp 0x2419
movl $0x1e, %ebx
jmp 0x2419
movl $0x7, %r13d
jmp 0x24c1
movl $0x5, %r13d
jmp 0x24c1
movl $0x25, %ebx
jmp 0x2419
cmpl $-0x1, %r14d
je 0x269e
movl $0x22, %ebx
jmp 0x2419
movslq %ebp, %rax
leaq 0x347a(%rip), %rcx      # 0x5a70
movb $0x0, (%rax,%rcx)
testl %ebx, %ebx
jne 0x268d
jmp 0x262f
movl $0x1, %ebx
jmp 0x2670
movl $0x24, %ebx
jmp 0x2670
movq 0x3447(%rip), %rsi      # 0x5a60
movl %r14d, %edi
callq 0x10f0
movslq %ebp, %rax
leaq 0x3445(%rip), %rcx      # 0x5a70
movb $0x0, (%rax,%rcx)
movl $0x8, %r14d
leaq 0x26c4(%rip), %r15      # 0x4d00
leaq 0x342d(%rip), %rbx      # 0x5a70
movq -0x8(%r14,%r15), %rsi
movq %rbx, %rdi
callq 0x10c0
testl %eax, %eax
je 0x2665
addq $0x10, %r14
cmpq $0xf8, %r14
jne 0x2643
xorl %ebx, %ebx
jmp 0x268d
movl (%r14,%r15), %ebx
jmp 0x268d
movl $0x11, %ebx
movq 0x33e9(%rip), %rsi      # 0x5a60
movl %r14d, %edi
callq 0x10f0
movslq %ebp, %rax
leaq 0x33e7(%rip), %rcx      # 0x5a70
movb $0x0, (%rax,%rcx)
movl %ebx, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x20, %ebx
jmp 0x267f
nopl (%rax)