void SemanticEval::evaluateNumericExpr(ExpressionValue& ev, int line) { if(!ev.isPrimitive() || !ev.isNumeric()) { stringstream err; err << "Esperando uma expressão numérica. Encontrado expressão \"" << ev.toString() << "\""; ErrorHandler::self()->add(err.str(), line); } }
void SemanticEval::evaluateAttribution(ExpressionValue& lv, ExpressionValue& rv, int line) { //lvalue e rvalue devem ter tipos compativeis // -numericos (inteiro, logico, real, caractere) sao compativeis entre si. stringstream msg; if(!lv.isPrimitive()) { msg << "Apenas variáveis de tipos primitivos podem receber valores"; ErrorHandler::self()->add(msg.str(), line); return; } if(rv.primitiveType() == TIPO_NULO) { msg << "Expressão não retorna resultado para variável"; ErrorHandler::self()->add(msg.str(), line); } else if(!lv.isCompatibleWidth(rv)) { msg << "Variável não pode receber valores do tipo '" << rv.toString() << "'"; ErrorHandler::self()->add(msg.str(), line); } }