📄 comandoatrib.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 + -