/PatitoMasMas

Proyecto final de la materia Diseño de Compiladores

Primary LanguagePython

Patito++

Patito++ es un lenguaje de programación imperativo procedural que maneja expresiones aritméticas, logicas y relacionales, estatutos de interacción, estatutos de control de flujo, elementos de cambio de contexto, manejo de elementos no atómicos, sobre carga de operadores para operaciones con vectores y matrices, y operadores especiales para operaciones sobre matrices.

Los operadores +, -, * se pueden aplicar directamente sobre elementos dimensionados. También existen dos operadores especiales para matrices: $ denota el determinante de una matriz, ! (exclamación cerrada) denota la transpuesta de una matriz.

Equipo Patito

Nombre Matricula
Iván Muñiz Ramírez A01039386
Ricardo Acosta Esquivel A01039456

Requerimientos para uso del lenguaje

  • Python 3
  • Numpy

Manual de usuario

Los tipos de variables soportados por el lenguaje son int, float y string, y son declarados de la siguiente manera:

programa nombre;
var int i, j, resultado; 
    string mensaje;
    float pi;
    
principal() {
    < Aquí va tu programa principal >
}

Y se inicializan de la siguiente manera:

programa nombre;
var int i, j, suma; 
    string mensaje;
    float pi;
    
principal() {
    i = 10;
    j = 5;
    suma = i + j;
    pi = 3.14;
    
    escribe(i, j, suma, pi);
}

Notese que las variables siempre deben de inicializarse dentro del bloque principal.

Para hacer uso de condicionales se hace de la siguiente manera:

programa nombre;
var int i, j;

principal() {
    i = 15;
    j = 10;

    si(i < j) entonces {
        escribe("i es menor que j");
    } sino {
        si(i > j) entonces {
            escribe("i es mayor que j");
        }
    }
}

Para el uso de de ciclos se sigue la siguiente estructura:

programa nombre;
var int i;

principal() {
    desde i = 0 hasta i == 10 hacer {
        escribe(i);
    }

    mientras( i < 20 ) haz {
        escribe(i);
        i = i + 1;
    }
}

Para el uso de funciones se sigue la siguiente estructura:

programa nombre;
var int entrada;

funcion int miFuncion(int i)
var int aux; 
{
    aux = i + 5;
    regresa(aux);
}

principal() {
    escribe(miFuncion(5));
}

El usuario puede ingersar datos al programa en tiempo de ejecución con la función lee() de la siguiente manera:

programa nombre;
var int numeroDeTacos;

principal() {
    escribe("Ingrese el número de tacos que comió Ricardo:");
    lee(numeroDeTacos);

    escribe("Ricardo comió", numeroDeTacos, "tacos");
}

Ejemplos de programas

Mi primer programa

Crear el archivo holamundo.pmm

programa miprimerprograma;

principal() {
    escribe("Hola mundo!");
}

Para compilar el programa se hace de la siguiente manera:

python patitomasmas.py pruebas/holamundo.pmm

Calculo de factorial ciclico

programa factorial;
var int entrada, i, resultado;

principal() {
    resultado = 1;
    escribe("Escribe el numero para calcular factorial");
    lee(entrada);
    desde i = 1 hasta i > entrada hacer {
        resultado = i*resultado;
    }
    escribe(resultado);
}

Calculo de factorial recursivo

programa factorial_recursivo;
var int entrada;

funcion int factorial_recursivo(int i)
var int aux; 
{
    si(i == 0 || i == 1) entonces {
        regresa(1);
    }
    regresa(i*factorial_recursivo(i - 1));
}

principal() {
    escribe("Dime el valor");
    lee(entrada);
    escribe(factorial_recursivo(entrada));
}

Fibonacci ciclico

programa fibonacci_ciclico;
var int numero, fibo1, fibo2, i;

principal() {
    escribe("Introduce numero");
    lee(numero);

    fibo1 = 0;
    fibo2 = 1;
    escribe(fibo1);

    desde i = 1 hasta i >= numero hacer {
        escribe(fibo2);
        fibo2 = fibo1 + fibo2;
        fibo1 = fibo2 - fibo1;
    }
}

Fibonacci recursivo

programa fibonacci;
var int numeros, i;

funcion int fibonacci(int i){
    si(i == 0 || i == 1) entonces {
        regresa(i);
    } sino {
        regresa(fibonacci(i - 1) + fibonacci(i - 2));
    }
}

principal() {
    escribe("Escribe cuanto numeros quieres calcular de la serie");
    lee(numeros);

    desde i=0 hasta i == numeros hacer {
        escribe(fibonacci(i));
    }
  
}