⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comandoatrib.cpp

📁 "tiny" language interpreter written in java
💻 CPP
字号:
/*
TP2 LP INTERPRETADOR TINY
ALUNO : ANDRE LUIS DURAO ABDO
MATRICULA : 283999
DATA DA ENTREGA : 10/05/2007
*/ 

//ComandoAtrib.cpp
#include "ComandoAtrib.h"
//ex: var = 1
ComandoAtrib::ComandoAtrib(Memoria *mem,const string& var,int valor,int linha){
    this->mem=mem;
    this->var = var;
    this->valor = valor;
    tipoAtribuicao=1;
    //seta linha no vetor de execucao
    this->linha = linha;    
}
//ex: var = var2 + 1
ComandoAtrib::ComandoAtrib(Memoria *mem, const string& var, const string& op, const string& var2, int valor,int linha){
    this->mem=mem;
    this->var = var;
    this->op = op;
    this->var2 = var2;
    this->valor = valor;
    tipoAtribuicao=2;    
    //seta linha no vetor de execucao
    this->linha = linha;        
}
//var = var2 + var3
ComandoAtrib::ComandoAtrib(Memoria *mem, const string& var, const string& op, const string& var2, const string& var3,int linha){
    this->mem=mem;
    this->var = var;
    this->op = op;
    this->var2 = var2;
    this->var3 = var3;
    this->valor = valor;
    tipoAtribuicao=3;
    //seta linha no vetor de execucao
    this->linha = linha;        
}
//ex: var++ e var--
ComandoAtrib::ComandoAtrib(Memoria *mem, const string& var, const string& op, const string& op2,int linha){
    this->mem=mem;
    this->var = var;
    this->op = op;
    this->op2 = op2;
    tipoAtribuicao=4;        
    //seta linha no vetor de execucao
    this->linha = linha;    
}


int ComandoAtrib::executa(){

    //ex: var = 1
    if (tipoAtribuicao == 1){        
    	mem->setValue(var, intToString(valor));
    }    
    //ex: var = var2 + 1
    if (tipoAtribuicao == 2){			
        string *tmp = mem->getValue( var2 );
        string tmp2 = *tmp;
    	int tmp_var = atoi(tmp2.data());
    	//realiza opera珲es na atribui玢o
    	if (op == "+") 
    		tmp_var+= valor;
    	if (op == "-") 
    		tmp_var-= valor;
    	if (op == "*") 
    		tmp_var*= valor;
    	if (op == "/") 
    		tmp_var/= valor;
    	//grava em memoria
    	mem->setValue(var, intToString(tmp_var));			
    }

    
    //ex: var = var2 + var3
    if (tipoAtribuicao == 3){			
        string tmp = *mem->getValue( var2 );
        int tmp_var = atoi(tmp.data());
        tmp = *mem->getValue( var3 );
        int valor = atoi(tmp.data());
    	//realiza opera珲es na atribui玢o
    	if (op == "+") 
    		tmp_var+= valor;
    	if (op == "-") 
    		tmp_var-= valor;
    	if (op == "*") 
    		tmp_var*= valor;
    	if (op == "/") 
    		tmp_var/= valor;
    	//grava em memoria
    	mem->setValue(var, intToString(tmp_var));			
    }
    //ex: var++ e var--  
    if (tipoAtribuicao == 4){
        string tmp = *mem->getValue( var );
        int tmp_var = atoi(tmp.data());
    	//realiza opera珲es na atribui玢o
    	if (op == "+" && op2 == "+") 
    		tmp_var++;
    	if (op == "-" && op2 == "-") 
    		tmp_var--;    	
    	//grava em memoria
    	mem->setValue(var, intToString(tmp_var) );
    }
    return (linha+1);    
}

string ComandoAtrib::toString(){
	string saida="";

	//ex: var = 1
	if (tipoAtribuicao == 1)
		saida+= "atrib "+ var + " = " + intToString(valor);
	//var = var2 + 1
	if (tipoAtribuicao == 2)
		saida+= "atrib "+ var + " = " +var2+ " " +op+" " + intToString(valor);
	//ex: var = var2 + var3
	if (tipoAtribuicao == 3)
		saida+= "atrib "+ var + " = " +var2+ " " +op+" " +var3;
	//ex: var++ e var--
	if (tipoAtribuicao == 4)
		saida+= "atrib "+ var + op+op2;
	
    return (saida);    
}


string ComandoAtrib::intToString(int valor){
    //=======Conversao de int para string    
    char numval[100];
	sprintf( numval, "%d", valor );
	string num;
    num.assign(numval);    
    return num;
    //================================    
}

void ComandoAtrib::defineLinhaSalto(int nolinha){
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -