<%title%>El compilador (ediv) <%/title%>

# El compilador (ediv)

El compilador en sí es un ejecutable llamado `ediv`. Se encuentra en la carpeta `bin`, y es el programa encargado de compilar un archivo de código fuente `.prg` en lenguaje DIV para crear un ejecutable independiente a partir de él.

Este ejecutable es un programa de consola. Para funcionar, necesita que le pasemos algunos parámetros en la línea de comandos. La sintaxis es la siguiente:

`ediv [opciones] archivo.prg [ejecutable]`

A continuación se detallan cada uno de los argumentos:

- `opciones`: es una combinación de las siguientes opciones posibles:

  -h | --help | Muestra ayuda sobre la sintaxis del programa y las opciones disponibles. No se realiza ninguna otra operación.
  -d | --debug | Permite utilizar el trazador durante la ejecución del programa.
  -l | --list | Genera un archivo de texto aparte que contiene el listado del programa en código intermedio (EML).
  -t | --table | Genera un archivo de texto aparte, con extensión .tab, que contiene información avanzada para comprobar errores de compilación.
  -c | --check | No genera un ejecutable. Se utiliza cuando sólamente se quiere comprobar si un programa está escrito sin errores léxicos ni de sintaxis.
  -s | --system | Permite especificar el Sistema Operativo para el cual se quiere generar el ejecutable, en el caso de que se desee crear un ejecutable para un sistema distinto del actual.
  -n | --news | Obtiene de Internet información de última hora acerca de eDIV.
  -v | --version | No realiza ninguna operación, salvo mostrar la versión actual del compilador.

- `archivo.prg`: es el archivo fuente que se compilará.
- `ejecutable`: es el nombre que se quiere que tenga el ejecutable final. Si se omite, el ejecutable tendrá el mismo nombre que el archivo fuente.

Una vez ejecutado el programa con los parámetros adecuados, el compilador nos irá mostrando el estado del proceso, y por último nos informará si la compilación ha tenido éxito. Si ocurre algún error, se mostrará un mensaje explicando el error. Si el error se encuentra en el fichero fuente, se nos indicará el número de línea y de carácter donde se localiza el error. Por ejemplo:

`malvado.prg` | `:` | `6` | `:` | `18` | `:` | `ERROR 9` | `:` | `Esperando ';'`
nombre del fichero en el que se encuentra el error |  |  |  |  |  | código del error |  | descripción del error
número de línea |  |  |  |  |
número de carácter en la línea |  |

Es posible que, una vez corregido el error, al intentar compilar de nuevo aparezca otro error. Hay que corregir todos los errores del programa fuente para que eDIV sea capaz de compilarlo. También es posible que se muestren mensajes de advertencia; si es así, eDIV compilará el programa correctamente (siempre que no encuentre ningún error), aunque es posible que desee corregir el listado para que no se muestren esos mensajes.

## Esquema de funcionamiento del compilador

No está de más tener una idea de las operaciones que hace el compilador, especialmente por si surge algún problema, para saber de dónde puede venir el fallo y cómo se puede arreglar.

1. Primero, eDIV lee la configuración del archivo `ediv.cfg`. Dicho archivo es necesario, ya que contiene información acerca de los ajustes por defecto del compilador y las prioridades de las librerías.
2. A continuación, el programa detecta el idioma del sistema (si no se ha forzado uno en el archivo de configuración).
3. Luego se procesan los argumentos de la línea de comandos.
4. Después se carga el archivo fuente (`.prg`) en memoria y se compone el nombre del ejecutable final.
5. Seguidamente se comprueba que existe el stub correspondiente al Sistema Operativo elegido. El stub es un archivo con extensión `.rel` o `.dbg` que contiene el primer segmento del ejecutable final, al cual después se agregará el código del programa compilado.
6. A continuación se llama a una rutina de preparación que pone a cero los datos internos del compilador.
7. Después se cargan todas las librerías que se encuentran en el directorio correspondiente.
8. Luego se realiza una primera compilación que tiene como único objetivo saber qué elementos de las librerías se utilizan, para poder descartar las librerías que no se usan en el programa.
9. Se vuelve a llamar a la rutina del paso 6, para restablecer todos los parámetros del compilador.
10. De nuevo se cargan las librerías, pero esta vez sólamente las que se utilizan.
11. Se compila de nuevo el programa. El resultado es un código intermedio que ha reservado únicamente la memoria que necesita para las librerías que el programa necesita específicamente. De esta forma hemos ahorrado mucha memoria y espacio en el paquete final del programa compilado (ejecutable + librerías), ya que hemos descartado todas las librerías innecesarias.
12. Se crea el archivo del ejecutable con el contenido del stub. Luego se agrega el código intermedio comprimido del programa. Y por último, en el caso de que hayamos indicado el parámetro --debug, añadimos información de depurado al ejecutable para permitir que funcione el trazador.

<%end%>