Diferencia entre revisiones de «Compilador eWa»

De Wiki~eWa
Ir a la navegaciónIr a la búsqueda
 
(No se muestran 14 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
El '''Compilador eWa''' o '''Compilador de Idioma eWa''' es el [[compilador]] oficial del [[Proyecto eWa]].
+
El '''Compilador eWa''' o '''Compilador de Idioma eWa''' es el [[compilador]] oficial de [[tareas]] del [[Proyecto eWa]].
  
Es compatible con los tres [[LeWaS|Lenguajes de Programación eWa]] que siguen las reglas del [[Idioma eWa|Idioma de Programación eWa]]. Además, es capaz de interpretar en '''tiempo de compilación''' las diferentes [[Instrucciones del Compilador eWa de Idioma eWa|Instrucciones del Compilador eWa]] que incluye en el proceso de compilación.
+
Es compatible con los tres [[LeWaS|Lenguajes de Programación eWa]] que siguen las reglas del [[Idioma eWa|Idioma de Programación eWa]]. Además, es capaz de interpretar las diferentes [[Instrucciones del Compilador eWa de Idioma eWa|Instrucciones del Compilador eWa]] en '''tiempo de compilación'''.
  
 
== Pasos para compilar ==
 
== Pasos para compilar ==
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 [[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:
+
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 ){
   hazEsto();
+
   algo();
 
  }
 
  }
  
 
Se transformaría en:
 
Se transformaría en:
  
  '''#__f1'''{
+
  '''#haz #__f1''' {
  hazEsto();
+
  algo();
  }
+
  };
 
  while( true, '''#__f1''' );
 
  while( true, '''#__f1''' );
  
Línea 32: Línea 32:
 
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:
 
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'''
+
  a = '''b * c + d''';
  
 
Se transformaría en:
 
Se transformaría en:
Línea 38: Línea 38:
 
  <u>Forma implícita</u>:
 
  <u>Forma implícita</u>:
 
   
 
   
   ''#_OpIgual( a, '''#_OpSumas(#_OpMulti(b,c), d)''' )''
+
   ''#_OpIgual( a, '''#_OpSumas(#_OpMulti(b,c), d)''' )'';
  
 
  <u>Forma explícita</u>:
 
  <u>Forma explícita</u>:
 
   
 
   
   '''#haz #_v1''' #_OpMulti(b,c)
+
   '''#haz #_v1''' #_OpMulti(b,c);
   '''#haz #_v2''' #_OpSumas('''#_v1''', d)
+
   '''#haz #_v2''' #_OpSumas('''#_v1''', d);
   #_OpIgual( a, '''#_v2''' )
+
   #_OpIgual( a, '''#_v2''' );
 +
  '''#sup #_v1''';
 +
  '''#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 ===
  
Por último, el paso final de la tarea de compilación consiste en la "tipificación" de los diferentes tipos de [[estructuras]] disponibles.
+
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 del Compilador eWa de Idioma eWa|Instrucciones]] incluyen tanto las escritas por el desarrollador, como aquellas incluidas por los pasos anteriores.
 
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 del Compilador eWa de Idioma eWa|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]], ya que es el paso en donde realmente se convierte el [[código fuente]] dado en [[código objeto]] o [[código máquina]]. Igualmente, es el más delicado, ya que revisa la correcta asignación de parámetros ''a ciegas'' de 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 ==
 
== Errores emitidos por el compilador ==
  
Como cualquier [[compilador]], el '''Compilador eWa''' también puede provocar una serie de fallos. Generalmente cada uno de los tres (o cuatro) pasos anteriores provoca diferentes errores con los que cualquier otro . Igualmente, el [[compilador]] es capaz de resolver algunos, aunque, por norma general, se interrumpe el proceso de compilación y se muestra el error.
+
Como todos los [[compilador]]es, 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.
  
 
[[Categoría: Idioma eWa]]
 
[[Categoría: Idioma eWa]]

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.

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.