jueves, 19 de julio de 2018

Compiladores - Ejercicio 1

Desarrollar un intérprete que reciba como entrada un archivo de texto con instrucciones que debe ejecutar, estas instrucciones están escritas en un lenguaje de programación especialmente diseñado para este ejemplo, dicho lenguaje cuenta con las siguientes sentencias:

Expresiones aritméticas
Estas se definen con la notación estándar de las expresiones aritméticas, poseen la precedencia estándar de las expresiones aritméticas y aceptan las siguientes operaciones:
  • Suma +
  • Resta –
  • Multiplicación *
  • División /
  • Agrupación ()
  • Números o expresiones negativas –
    • Por ejemplo:
      • -10+1
      • -(4*5+7-3) - -6

Expresiones booleanas
Solamente números pueden ser comparados con >,<,>=,<=,==,<> y solamente expresiones booleanas pueden ser operadas con Not, And y Or. Estas se definen con la notación estándar de las expresiones booleanas y aceptan las siguientes operaciones
  • Igual que ==
  • Mayor que >
  • Menor que <
  • Mayor igual que >=
  • Menor igual que <=
  • Diferente que <>
  • Not
  • And
  • Or

 Expresiones con cadenas
La única operación aceptada es la concatenación, los operandos que componen esta operación pueden ser expresiones con cadenas, expresiones booleanas o bien expresiones numéricas. El símbolo que se utilizará es: &
Algunos ejemplos de esta operación serían:
  • "Hola " & "Adiós", que resultaría en: "Hola Adiós"
  • "Hola " & 5+5*10, que resultaría en: "Hola 55"
  • "Hola " & 5>2, que resultaría en: "Hola verdadero"

Es posible concatenar N expresiones, por ejemplo:

Print("A " & "B " & "C " & "D " & "E " & "F " & "G ");

Declarar variable
La sintaxis para declarar variables es la siguiente:

Declare <tipo> <identificador>;

En donde tipo puede ser: Number, String, Boolean, e identificador está compuesto de una letra seguida de cualquier combinación de cero o más letras o números.


Asignar valor a variable
La sintaxis para asignar valor a variables es la siguiente:

<identificador> = <expresión>;

En donde expresión puede ser una expresión numérica, una expresión booleana o una expresión con cadenas.
Number almacena siempre los números como float, sin embargo, también es posible asignarle números enteros. Por ejemplo, si a la variable a de tipo Number le asignamos el valor 5:
a=5;
Y posteriormente imprimimos ese valor obtendremos
5.0
A las variables Boolean se le pueden asignar los valores
  • True
  • False
  • O bien una expresión booleana

 Imprimir
Despliega en consola la expresión que recibe como parámetro
La sintaxis para imprimir en consola una expresión es la siguiente:

Print(<expresión>);

En donde expresión puede ser una expresión numérica, una expresión booleana o una expresión con cadenas.

Comentarios
Deben reconocerse los siguientes tipos de comentarios

Uni-linea con la sintaxis
// <comentario>
Multi-linea con la sintaxis
/*
<comentario>
*/

Otras consideraciones:
  • Un archivo de entrada puede tener una o muchas sentencias.
  • La conversión de tipos automática solo se da dentro de la sentencia Print, esto porque el resultado de la expresión debe convertirse a texto antes de imprimirse en consola.
  • Es necesario desplegar errores léxicos, sintácticos y semánticos. Debe implementarse recuperación de errores, es decir, si una sentencia falla, se debe reportar el error y continuar ejecutando el resto de las sentencias que sean correctas.
  • Para desarrollar el ejemplo se recomienda utilizar JLex, Cup y el sistema operativo de su preferencia.
  • El lenguaje no es case sensitive, no hace distinción de mayúsculas y minúsculas.


No hay comentarios:

Publicar un comentario