Exemplo n.º 1
0
void ManejadorClass::escribirDeclararConstante(Simbolo* simbolo)
{
    stringstream operando;
    operando << simbolo->getIdentificador();
    operando << " " << obtenerTipo(simbolo->getTipo());
    operando << " = ";
    switch(simbolo->getTipo())
    {
        case T_ENTERO:
            operando << simbolo->getValor<int>();
            break;
        case T_REAL:
            operando << simbolo->getValor<double>();
            break;
        case T_BOOLEANO:
            operando << simbolo->getValor<bool>();
            break;
        case T_CADENA:
            operando << (simbolo->getValor<string>());
            break;
        case T_CARACTER:
            operando << simbolo->getValor<char>();
            break;
        default:
            operando << "ERROR VALOR CONSTANTE";
            break;
    }

    globales.push_back(simbolo);
    aniadirInstruccion(".field static public final", operando.str());
}
Exemplo n.º 2
0
void ManejadorClass::escribirDeclararVariableGlobal(Simbolo* simbolo)
{

    stringstream operando;
    unsigned int cantDimensiones;

    operando << simbolo->getIdentificador() << " ";

    cantDimensiones = simbolo->getCantidadDimensiones();



    for(unsigned int i = 0; i < cantDimensiones; ++i)
    {
        operando << "[";
    }

    operando << obtenerTipo(simbolo->getTipo());

    aniadirInstruccion(".field static public", operando.str());


    //añadir a nuestro compendio de llamables donde sea
    globales.push_back(simbolo);
}
Exemplo n.º 3
0
string ManejadorClass::obtenerDescriptorFirma(const string& firma, Tipo retorno)
{
    stringstream flujo;
    int longitud = firma.length();

    flujo << '(';

    for(int i = 0; i < longitud; ++i)
    {
        flujo << obtenerTipo(firma[i]);
    }

    flujo << ')';

    flujo << obtenerTipo(retorno);

    return flujo.str();
}
Exemplo n.º 4
0
void ManejadorClass::escribirLlamadaVarGlobal(Simbolo* simbolo, bool almacenar)
{
    stringstream llamada;
    string operacion;

    if(almacenar)
        operacion = "    putstatic";
    else
        operacion = "    getstatic";

    llamada << nombreClase << " " << simbolo->getIdentificador() << " ";

    for(unsigned int i = 0; i < simbolo->getCantidadDimensiones(); ++i)
    {
        llamada << "[";
    }

    llamada << obtenerTipo(simbolo->getTipo());

    aniadirInstruccion(operacion, llamada.str());
}
Exemplo n.º 5
0
void ManejadorClass::escribirDeclararArray(Simbolo* temp, bool global)
{
    if(temp->getCantidadDimensiones() > 0)
    {
        unsigned int cantDimen = temp->getCantidadDimensiones();
        string operacion;
        stringstream operando;
        stringstream firmaDimensional;
        stringstream nombreCompleto;

        //ls locales ya fueron apilando sus valores
        if(global)
        {
            for(unsigned int i = 0; i < cantDimen; ++i)
            {
                //apilar las dimensiones
                escribirEnteroConstante(temp->getTamanioDimension(i));
            }
        }

        if(cantDimen == 1)
        {
            if(temp->getTipo() == T_CADENA) operacion = "    anewarray";
            else operacion = "    newarray";

            switch(temp->getTipo())
            {
                case T_ENTERO: operando << "int"; break;
                case T_REAL: operando << "double"; break;
                case T_CARACTER: operando << "char"; break;
                case T_BOOLEANO: operando << "boolean"; break;
                case T_CADENA: operando << "java/lang/String"; break;
                default: operando << "ERROR TIPO"; break;
            }

            firmaDimensional << "[" << obtenerTipo(temp->getTipo());
        }
        else
        {
            operacion = "    multianewarray";

            for(unsigned int i = 0; i < cantDimen; ++i)
            {
                firmaDimensional << "[";
            }

            firmaDimensional << obtenerTipo(temp->getTipo());

            operando << firmaDimensional.str() << " " << cantDimen;
        }

        aniadirInstruccion(operacion, operando.str());

        nombreCompleto << nombreClase << " " << temp->getIdentificador() << " " << firmaDimensional.str();

        if(global)
        {
            aniadirInstruccion("    putstatic", nombreCompleto.str());
        }
        else
        {
            string oper = "    astore";
            stringstream pos;
            pos << obtenerPosLocal(temp->getAlias());

            aniadirInstruccion(oper, pos.str());
        }
    }
}
Exemplo n.º 6
0
map<string, Funcion*>* FuncionesIncorporadas::obtenerFuncionesIncorporadas()
{
    /*¿Como manejar el tipo de retorno? ... Like a Boss!*/
    bool compilarNxt = Programa::obtenerInstancia()->obtenerTipoDeCompilacion();

    map<string, Funcion*> *funcionesIncorporadas = new map<string, Funcion*>();

    /*Escriba!*/
    (*funcionesIncorporadas)["escriba|entero"] = new Funcion( 0, obtenerVectorParametros(1, TEntero));
    (*funcionesIncorporadas)["escriba|flotante"] = new Funcion( 0, obtenerVectorParametros(1, TFlotante));
    (*funcionesIncorporadas)["escriba|caracter"] = new Funcion( 0, obtenerVectorParametros(1, TCaracter));
    (*funcionesIncorporadas)["escriba|cadena"] = new Funcion( 0, obtenerVectorParametros(1, TCadena));
    (*funcionesIncorporadas)["escriba|booleano"] = new Funcion( 0, obtenerVectorParametros(1, TBooleano));

    if( compilarNxt )
    {
        (*funcionesIncorporadas)["escriba|entero,entero,entero"] = new Funcion( 0, obtenerVectorParametros(3, TEntero, TEntero, TEntero));
        (*funcionesIncorporadas)["escriba|flotante,entero,entero"] = new Funcion( 0, obtenerVectorParametros(3, TFlotante, TEntero, TEntero));
        (*funcionesIncorporadas)["escriba|caracter,entero,entero"] = new Funcion( 0, obtenerVectorParametros(3, TCaracter, TEntero, TEntero));
        (*funcionesIncorporadas)["escriba|cadena,entero,entero"] = new Funcion( 0, obtenerVectorParametros(3, TCadena, TEntero, TEntero));
        (*funcionesIncorporadas)["escriba|booleano,entero,entero"] = new Funcion( 0, obtenerVectorParametros(3, TBooleano, TEntero, TEntero));

        /*Con Retorno*/
        /*Leer*/

        /*********************************************************************************/

        /*Lego NXT*/
        /*Funciones incorporadas para LCD*/
        (*funcionesIncorporadas)["limpiar_pantalla"] = new Funcion(0 , obtenerVectorParametros(0) );

        /*Funciones Incorporadas para MOTORES*/
        /*Adelante*/
        (*funcionesIncorporadas)["adelante|motor"] = new Funcion(0 , obtenerVectorParametros(1, TMotor));

        /*Atras*/
        (*funcionesIncorporadas)["atras|motor"] = new Funcion(0 , obtenerVectorParametros(1, TMotor));

        /*Detener*/
        (*funcionesIncorporadas)["detener|motor"] = new Funcion(0 , obtenerVectorParametros(1, TMotor));
        (*funcionesIncorporadas)["detener|motor,booleano"] = new Funcion(0 , obtenerVectorParametros(2, TMotor, TBooleano));

        /*RotarMotor*/
        (*funcionesIncorporadas)["rotar_motor|motor,entero"] = new Funcion(0 , obtenerVectorParametros(2, TMotor, TEntero));

        /*RotarMotorConRetorno*/
        (*funcionesIncorporadas)["rotar_motor|motor,entero,booleano"] = new Funcion(0 , obtenerVectorParametros(3, TMotor, TEntero, TBooleano));

        /*RotarMotorHacia*/
        (*funcionesIncorporadas)["rotar_motor_hacia|motor,entero"] = new Funcion(0 , obtenerVectorParametros(2, TMotor, TEntero));

        /*RotarMotorHaciaConRetorno*/
        (*funcionesIncorporadas)["rotar_motor_hacia|motor,entero,booleano"] = new Funcion(0 , obtenerVectorParametros(3, TMotor, TEntero,TBooleano));

        /*Establecer Velocidad*/
        (*funcionesIncorporadas)["establecer_velocidad|motor,entero"] = new Funcion(0 , obtenerVectorParametros(2, TMotor, TEntero));

        /*Obtener Angulo*/
        (*funcionesIncorporadas)["obtener_angulo|motor"] = new Funcion( obtenerTipo(TEntero) , obtenerVectorParametros(1, TMotor));

        /*Obtener Velocidad*/
        (*funcionesIncorporadas)["obtener_velocidad|motor"] = new Funcion( obtenerTipo(TEntero) , obtenerVectorParametros(1, TMotor));

        /*EstaEnMovimiento*/
        (*funcionesIncorporadas)["esta_en_movimiento|motor"] = new Funcion( obtenerTipo(TBooleano), obtenerVectorParametros(1, TMotor));

        /*Bloquear*/
        (*funcionesIncorporadas)["bloquear|motor,entero"] = new Funcion(0 , obtenerVectorParametros(2, TMotor, TEntero));

        /*EsperarCompletacion???*/

        /*Funciones Incorporadas para SENSORES*/
        /*Sensor Ultrasonico*/
        (*funcionesIncorporadas)["obtener_distancia|ultrasonico"] = new Funcion( obtenerTipo(TEntero), obtenerVectorParametros(1, TSensorUltrasonico));

        /*Sensor de Tacto*/
        (*funcionesIncorporadas)["esta_presionado|tacto"] = new Funcion( obtenerTipo(TBooleano), obtenerVectorParametros(1, TSensorDeTacto));

        /*Sensor de Luz*/
        (*funcionesIncorporadas)["obtener_luz|luz"] = new Funcion( obtenerTipo(TEntero), obtenerVectorParametros(1, TSensorDeLuz)) ;
        (*funcionesIncorporadas)["establecer_inundacion|luz,booleano"] = new Funcion( obtenerTipo(TEntero), obtenerVectorParametros(2, TSensorDeLuz, TBooleano) );

        /*Sensor de Color*/
        /*Sensor de Inclinacion*/
        /*Sensor de Sonido ? */
        /*Sensor Giroscopico ?*/
        /*Sensor de Brujula ? */

        /*Funciones INCORPORADAS PARA BOTONES DE NXT*/
        /*Izq, Der, enter, escape*/

        // Eventos Test...
        (*funcionesIncorporadas)["cuando_se_presione|boton_derecho,funcion"] = new Funcion(0, obtenerVectorParametros(2, TBotonDerecho, _TFuncion));
        (*funcionesIncorporadas)["cuando_se_presione|boton_izquierdo,funcion"] = new Funcion(0, obtenerVectorParametros(2, TBotonDerecho, _TFuncion));
        (*funcionesIncorporadas)["cuando_se_presione|boton_central,funcion"] = new Funcion(0, obtenerVectorParametros(2, TBotonDerecho, _TFuncion));
        (*funcionesIncorporadas)["cuando_se_presione|boton_escape,funcion"] = new Funcion(0, obtenerVectorParametros(2, TBotonDerecho, _TFuncion));

        // esta presionado
        (*funcionesIncorporadas)["esta_presionado|boton_derecho"] = new Funcion(obtenerTipo(TBooleano), obtenerVectorParametros(1, TBotonDerecho));
        (*funcionesIncorporadas)["esta_presionado|boton_izquierdo"] = new Funcion(obtenerTipo(TBooleano), obtenerVectorParametros(1, TBotonIzquierdo));
        (*funcionesIncorporadas)["esta_presionado|boton_central"] = new Funcion(obtenerTipo(TBooleano), obtenerVectorParametros(1, TBotonCentral));
        (*funcionesIncorporadas)["esta_presionado|boton_escape"] = new Funcion(obtenerTipo(TBooleano), obtenerVectorParametros(1, TBotonEscape));

        // EsperarPresion
        (*funcionesIncorporadas)["esperar_presion|boton_derecho"] = new Funcion(0, obtenerVectorParametros(1, TBotonDerecho));
        (*funcionesIncorporadas)["esperar_presion|boton_izquierdo"] = new Funcion(0, obtenerVectorParametros(1, TBotonIzquierdo));
        (*funcionesIncorporadas)["esperar_presion|boton_central"] = new Funcion(0, obtenerVectorParametros(1, TBotonCentral));
        (*funcionesIncorporadas)["esperar_presion|boton_escape"] = new Funcion(0, obtenerVectorParametros(1, TBotonEscape));

        // EsperarPresionYLiberacion
        (*funcionesIncorporadas)["esperar_presion_liberacion|boton_derecho"] = new Funcion(0, obtenerVectorParametros(1, TBotonDerecho));
        (*funcionesIncorporadas)["esperar_presion_liberacion|boton_izquierdo"] = new Funcion(0, obtenerVectorParametros(1, TBotonIzquierdo));
        (*funcionesIncorporadas)["esperar_presion_liberacion|boton_central"] = new Funcion(0, obtenerVectorParametros(1, TBotonCentral));
        (*funcionesIncorporadas)["esperar_presion_liberacion|boton_escape"] = new Funcion(0, obtenerVectorParametros(1, TBotonEscape));

        // Delay
        (*funcionesIncorporadas)["esperar|entero"] = new Funcion( 0, obtenerVectorParametros(1, TEntero) );
        (*funcionesIncorporadas)["salir"] = new Funcion(0, obtenerVectorParametros(0));

        // sonido!
        (*funcionesIncorporadas)["tono|entero,entero"] = new Funcion(0, obtenerVectorParametros(2, TEntero, TEntero));
        (*funcionesIncorporadas)["tono|entero,entero,entero"] = new Funcion(0, obtenerVectorParametros(3, TEntero, TEntero, TEntero));
    }

    /*Extras!*/
    //Random
    (*funcionesIncorporadas)["numero_aleatorio|entero"] = new Funcion( obtenerTipo(TEntero), obtenerVectorParametros(1, TEntero) );
    (*funcionesIncorporadas)["numero_aleatorio|entero,entero"] = new Funcion( obtenerTipo(TEntero), obtenerVectorParametros(2, TEntero, TEntero) );

    // Delay
    //(*funcionesIncorporadas)["esperar|entero"] = new Funcion( 0, obtenerVectorParametros(1, TEntero) );
    (*funcionesIncorporadas)["obtener_cantidad|arreglo"] = new Funcion( obtenerTipo(TEntero),obtenerVectorParametros(1, TArreglo) );
    (*funcionesIncorporadas)["aentero|flotante"] = new Funcion(obtenerTipo(TEntero), obtenerVectorParametros(1, TFlotante));

    return funcionesIncorporadas;
}