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
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
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.
Referencias recomendadas:
- Mi primer proyecto utilizando Jlex y Cup (Windows)
- Mi primer proyecto utilizando Jlex y Cup (Linux)
- Intérprete sencillo utilizando Java, Jlex y Cup
La solución puede descargarse del siguiente enlace:
Serie completa de ejercicios:
No hay comentarios:
Publicar un comentario