示例#1
0
gettoken(void)
{
    int token;
    skipspaces();
    lexeme[1] = 0;
    if (token = isvar()) return token;
    if (token = iscte()) return token;
    if (token = isaddop()) return token;
    if (token = ismulop()) return token;
    return lexeme[0] = token = getc(stdin);
}
示例#2
0
/*term parser:*/
void
term (void)
{
  fact ();
  
  /*geração de código de máquina*/
  {printf("\tpush %%eax\n");}
  
  while (lookahead == '*' ||
	 lookahead == '/' ||
	 lookahead == DIV || lookahead == MOD || lookahead == AND)
    {
      match (lookahead);
      fact ();
      if(ismulop(lookahead)){
        
        /*geração de código de máquina*/
        {printf("\timul (%%esp)\n");
        printf("\tmov %%eax, (%%esp)\n");}
        
      }
      if(isdivop(lookahead)){
                             
            /*geração de código de máquina*/
			{printf("\tmov %%eax, -4(%%esp)\n");
			printf("\tmov (%%esp), %%eax\n");
			printf("\tcltd\n");
			printf("\tidiv -4(%%esp)\n");
			printf("\tmov %%eax, (%%esp)\n");}
			
      }
      if(isandop(lookahead)){
                             
        /*geração de código de máquina*/
        {printf("\tand (%%esp)\n");
        printf("\tmov %%eax, (%%esp)\n");}
        
      }
    }
    
    /*geração de código de máquina*/
    {printf("\tadd $4, %%esp\n");}
    
}
示例#3
0
void term()
{
    factor();
    while(ismulop(look))
    {   
    	emitLine("push %rax");
        switch(look)
        {
            case '*':
                multiply();
                break;
            case '/':
                divide();
                break;
            default:
                expected("mulop");
                break;
        }
    }
}