コード例 #1
0
void comando_repetitivo(void)
{
	//Verifica se o proximo token й um WHILE
	if((tk.cat == PR) && (tk.p_reservada == WHILE)){
		tk = analex();
		//Verifica se o proximo token й '('
		if((tk.cat == SN) && (tk.cod == OPP)){
			tk = analex();
			expressao();
			//Verifica se o proximo token й um ')'
			if((tk.cat == SN) && (tk.cod == CLP)){
				tk = analex();
				//Verifica se o proximo token й '{'
				if((tk.cat == SN) && (tk.cod == OPB)){
					tk = analex();
					comando();
					//Verifica se o proximo token й '}'
					if((tk.cat == SN) && (tk.cod == CLB)){
						tk = analex();
						comando();
					} else erro(lin, 5);//Chama erro caso nгo venha '}'
					
				} else erro(lin, 4); //chama erro caso nгo venha '{'
				
			} else erro(lin, 3); //Chama erro caso nгo venha ')'
			
		} else erro(lin, 2);//Chama erro caso nгo venha '('
	}
}
コード例 #2
0
Expressao* Interpretador::trataExpressao() {
   palavraAtual= arquivo->proximaPalavra();
   if (pilha != NULL) delete pilha;
   pilha = new stack<Expressao*>();
   expressao();
   Expressao * raizArvoreExpressao = pilha->top();
   pilha->pop();
   return raizArvoreExpressao;
}
コード例 #3
0
void relacao(void)
{
	if(tk.cat == SN){
		if(tk.cod == GT){
			tk = analex();
			expressao();
		}
		
		else if(tk.cod == GE){
			tk = analex();
			expressao();
		} 
		
		else if(tk.cod == LT){
			tk = analex();
			expressao();
		} 
		
		else if(tk.cod == LE){
			tk = analex();
			expressao();
		} 
		
		else if(tk.cod == EQ){
			tk = analex();
			expressao();
		}

		else if(tk.cod == NE){
			tk = analex();
			expressao();
		}
	}
}
コード例 #4
0
void Interpretador::fator() {
  int teste = atoi (palavraAtual.c_str());
  if (variavel(palavraAtual)) {
     pilha->push(new ExpVariavel(escopo, palavraAtual));
     palavraAtual = arquivo->proximaPalavra();
  }   
  else if (teste != 0 || (teste == 0 && palavraAtual == "0")) {
     pilha->push(new ExpLiteral(teste));
     palavraAtual = arquivo->proximaPalavra();
  }   
  else if (palavraAtual == "("){
     palavraAtual = arquivo->proximaPalavra();
     expressao();
     if (palavraAtual == ")")
        palavraAtual = arquivo->proximaPalavra();
  }   
}
コード例 #5
0
void comando_condicional(void)
{
	//Verifica se o proximo token й um IF
	if((tk.cat == PR) && (tk.p_reservada == IF)){
		tk = analex();
		//Verifica se o proximo token й um '('
		if((tk.cat == SN) && (tk.cod == OPP)){
			tk = analex();
			expressao();
			//verifica se o proximo token й um ')'
			if((tk.cat == SN) && (tk.cod == CLP)){
				tk = analex();
				//Verifica se o proximo token й um '{'
				if((tk.cat == SN) && (tk.cod == OPB)){
					tk = analex();
					comando();
					//Verifica se o proximo token й um '}'
					if((tk.cat == SN) && (tk.cod == CLB)){
						tk = analex();
						comando();
					} else erro( lin, 5); //chama erro caso nгo venha '}'
					
				} else erro(lin, 4); // chama err caso nгo venha '{'
				
			} else erro(lin, 3); // chama erro caso nгo venha ')'
			
		} else erro(lin, 2); // chama o erro caso nгo venha um '('
	
	}
	
	//Verifica se o proximo token й um ELSE
	else if((tk.cat == PR) && (tk.p_reservada == ELSE)){
		tk = analex();
		//Verifica se o proximo token й um '{'
		if((tk.cat == SN) && (tk.cod == OPB)){
			tk = analex();
			comando();
			//Verifica se o proximo token й um '}'
			if((tk.cat == SN) && (tk.cod == CLB)){
				tk = analex();
				comando();
			} else erro(lin, 5); //chama erro caso nгo venha '}'
			
		} else erro(lin, 4); //chama erro caso nгo venha '{'
	}
}
コード例 #6
0
void atribuicao(void)
{
    int tipo1, tipo2;
    char id[50];
    tipo1 = tipo2 = 0;
     
	if(tk.cat == ID){
        
      strcpy(id, tk.lexema);       
		strcpy(aux.id, tk.lexema);
		tk = analex();
				
		//Verifica se o proximo token й um '='
		if((tk.cat == SN) && (tk.cod == ATB)){
                   
         tipo1 = verifica_tabela(id);      
			tk = analex();			
			tipo2 = expressao();
			
			if(tipo1 != tipo2){
                
              erro(lin, 12);           
            }
         			
			//Verifica se o proximo token й um ';'
			if((tk.cat == SN) && (tk.cod == SMC)){
				tk = analex();
			             			
				comando();
				
			} else erro(lin, 8); //Chama mensagem de erro caso nгo venha um ';'
			
		} else{
			aux.sit = PEN;
		}
	}
}
コード例 #7
0
void lista_de_expressoes(void)
{
	expressao();
}