Emular proceso de un compilador
Chicos y Chicas, tengo el medio trabajo y ni idea por donde empezar, alguien alguna vez le toco hacer un trabajo de emular el proceso de un compliador, mi trabajo es el siguiente, desde ya muchas gracias:
La idea específica del trabajo es poder construir un proceso que emule un Compilador.
En términos generales, un compilador descompone las sentencias o instrucciones que se le
indiquen, por ejemplo en un programa fuente.
Por lo general la forma de descomponer cada línea es la siguiente:
·
Por cada línea leída desde un archivo o programa fuente, revisa si el lenguaje existe
como válido en la Tabla de símbolos. (Esto se conoce como análisis Léxico).
·
Una vez que verifica la validez del lenguaje, agrupa las palabras (instrucciones) y
revisa su sintaxis, es decir, si las instrucciones estan bien escritas y si se pasaron en
forma correcta los parámetros. (Esto se conoce como análisis Sintáctico).
·
Una vez que ha agrupado por instrucciones u operaciones válidas, realiza el análisis
semántico para traducir los resultados. (Esto se conoce como análisis Semántico).
El análisis Sintáctico se puede realizar mediante el uso de Árboles de derivación. Para
tal efecto, necesariamente se debe crear el BNF o Diagrama Sintáctico correspondiente
que valide las instrucciones válidas (gramática).
El análisis semántico se puede realizar mediante el uso de árboles de expresión, que en
cierta forma traduzcan cada elemento del lenguaje a una estructura que permita entregar
un resultado.
El trabajo que se solicita, es el siguiente:
·
Permitir la lectura de un archivo texto, similar a un programa fuente, que solo
contendrá operaciones matemáticas.
Ejemplo: Considere que el archivo sumas.txt contiene la siguiente información:
2+4
(5*6) – (9+9)
(9+3) + 10
Según esto, nuestro lenguajes solo permite el uso de números, operadores
matemáticos, espacios y paréntesis. Todos estos caracteres deben estar en la
Tabla de Símbolos, puesto que en el análisis léxico se deben validar.
·
Luego de analizado los elementos del lenguaje, se debe establecer si las
operaciones son soportadas por el BNF o Diagrama Sintáctico. Es decir, si
soporta la descomposición de la siguiente forma:
Factor + Factor
Termino – Termino, donde Termino será una variable no terminal que se
descompone a su vez en Factor * Factor, etc.
·
Luego de analizar esto, se debe entregar el resultado de cada operación mediante
el uso de Árboles de expresión.
Los resultados esperados para este ejemplo serian:
2+4 -> 6
(5*6) – (9+9) ->
12
(9+3) + 10 ->
22
Algunas consideraciones.
El trabajo a entregar debe contener:
·
Informe que establezca las restricciones, las cuales deben ser validadas por el
programa. Por ejemplo, si se establece como restricción el uso de paréntesis para
agrupar operaciones, deben ser validadas.
·
BNF o diagrama sin táctico, que soporte las reglas sintácticas.
·
Árbol de derivación, solo en base a un ejemplo.
·
Árbol de expresión grafico, solo considerando un ejemplo.
·
El programa debe ser ejecutable.
·
Programas fuentes.
Algunas consideraciones de programación.
·
Validar que el archivo tenga datos.
·
Abortar el proceso cuando encuentre la primera operación inválida.
·
Todas las restricciones deben ser validadas. El programa ejecutable debe
entregar mensajes claros.
·
No es necesario el despliegue de los árboles, solo basta con la entrega en el
informe de un ejemplo.
|