Diferencia entre revisiones de «Compilador eWa»
(No se muestra una edición intermedia del mismo usuario) | |||
Línea 13: | Línea 13: | ||
=== Análisis Sintáctico === | === Análisis Sintáctico === | ||
− | También denominado "[[estructuras|estructurar]]", es el primer paso al que se somete cualquier [[ | + | También denominado "[[estructuras|estructurar]]", es el primer paso al que se somete cualquier [[código fuente]]. El objetivo de este paso es declarar y anidar en un '''árbol de funciones''' las diferentes [[estructuras]] presentes de forma implícita en el [[código fuente]]. Por ejemplo: |
while( true ){ | while( true ){ | ||
Línea 48: | Línea 48: | ||
'''#sup #_v2'''; | '''#sup #_v2'''; | ||
− | ''PD. Se ignoran en los ejemplos las optimizaciones.'' | + | ''PD. Se ignoran en los ejemplos las posibles optimizaciones.'' |
=== Análisis Semántico === | === Análisis Semántico === |
Revisión actual del 14:08 26 nov 2011
El Compilador eWa o Compilador de Idioma eWa es el compilador oficial de tareas del Proyecto eWa.
Es compatible con los tres Lenguajes de Programación eWa que siguen las reglas del Idioma de Programación eWa. Además, es capaz de interpretar las diferentes Instrucciones del Compilador eWa en tiempo de compilación.
Sumario
Pasos para compilar
Como cualquier compilador, el Compilador eWa realiza diferentes pasos donde manipula código fuente para transformarlo en código objeto o código máquina. En el caso particular de este compilador, se trata de tres pasos secuenciales.
Aun siendo considerados sólo tres pasos, existe un paso previo a todos llamado "precompilador". En su primera llamada, lo habitual es omitir todos los comentarios, remplazar caracteres especiales y eliminar (en la medida de lo posible) los espacios. Además, suele ser esporádicamente invocado en los diferentes pasos donde se hace una "preparación" del código fuente, por lo que se considera una función auxiliar más que un paso concreto e independiente.
Es destacable fijarse en que tradicionalmente los dos primeros pasos se realizan en orden inverso.
Análisis Sintáctico
También denominado "estructurar", es el primer paso al que se somete cualquier código fuente. El objetivo de este paso es declarar y anidar en un árbol de funciones las diferentes estructuras presentes de forma implícita en el código fuente. Por ejemplo:
while( true ){ algo(); }
Se transformaría en:
#haz #__f1 { algo(); }; while( true, #__f1 );
En este paso se modifica el código fuente dado en otro completamente análogo, pero con todas las estructuras definidas de forma explícita.
Análisis Léxico
Una vez construido el árbol funcional del código fuente, el siguiente paso a realizar por el compilador consiste en la transformación de todos los operadores en funciones (explícitas) sentencia a sentencia apoyándose en los procedimientos del compilador. Por ejemplo:
a = b * c + d;
Se transformaría en:
Forma implícita: #_OpIgual( a, #_OpSumas(#_OpMulti(b,c), d) );
Forma explícita: #haz #_v1 #_OpMulti(b,c); #haz #_v2 #_OpSumas(#_v1, d); #_OpIgual( a, #_v2 ); #sup #_v1; #sup #_v2;
PD. Se ignoran en los ejemplos las posibles optimizaciones.
Análisis Semántico
Por último, el paso final de la compilación consiste en la "tipificación" de los diferentes tipos de estructuras disponibles.
Hasta este paso, el compilador trabaja con las estructuras básicas del Idioma eWa, y es sólo en este punto donde realiza la interpretación de las Instrucciones del Compilador eWa de Idioma eWa presentes en el código. Estas Instrucciones incluyen tanto las escritas por el desarrollador, como aquellas incluidas por los pasos anteriores.
Este es el paso más importante en la transformación del código fuente: es donde realmente se convierte el código fuente dado en código objeto o código máquina. A su vez, es el más delicado, ya que revisa la correcta asignación de parámetros a ciegas de los pasos anteriores.
Errores emitidos por el compilador
Como todos los compiladores, el Compilador eWa también puede provocar una serie de fallos o avisos. Generalmente, cada uno de los tres (o cuatro) pasos anteriores provoca diferentes errores con los que cualquier otro paso (interno o externo a la compilación) podrá detectar y tratar. Igualmente, el compilador es capaz de resolver algunos de los errores en tiempo de compilación, aunque, por norma general, se interrumpe el proceso de compilación y se muestra el error.