Ver Mensaje Individual
  #2  
Antiguo 25-10-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Reputación: 23
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por aleidania
[...] Hemos logrado convertir cada linea del programa en codigo C, y necesitamos saber como crear el ejecutable, ya sea del archivo de C o del mismo archivo creado por nuestro editor (que por cierto es txt).
no entiendo lo de compilación de "archivos txt". :?

En cuanto al fuente C, tendrás que hacer un traductor (en tu caso un compilador de C). Pasos básicos:

1. Crear (o utilizar una ya hecha) una gramática de lenguaje C para:

2. Crear (o utilizar una ya hecho) un analizador léxico (scanner o tokenizador) de los fuentes C. En pocas palabras: divide el fuente C en las unidades mínimas (tokens) que alimentarán a:

3. Crear (o utilizar uno ya hecho) un analizador sintáctico (parser) para la gramática C del punto 1. Con analizador sintáctico resuelves si el fuente que estás traduciendo es correcto sintácticamente respecto a las reglas de la gramática y es el paso previo a la traducción propiamente dicha.

4. Traductor/Generador de código: los compiladores son autómatas de estados. A ciertos estados válidos del analizador sintáctico le corresponderán la creación de su código traducido. Esto, que no es un paso trivial, podrías hacerlo desde varios enfoques:

4.1 Generando directamente código objeto (binario) para la plataforma que estés trabajando, en tu caso seguramente Intelx86. Dependiendo de la CPU concreta (x386, x486, Pentium, ...) será un código objeto diferente.

4.2 Generando un código intermedio (código P), no válido como código objeto para ninguna plataforma concreta, pero lo suficientemente neutro y de bajo nivel para que la traducción sea casi directa.

4.3 En los dos casos (4.1 y 4.2) lo más sencillo es terminar traduciendo a lenguaje ensamblador (diferente para cada plataforma objetivo) y, posteriormente, utilizar un compilador/ensamblador de un tercero para la generación final de código objeto.

Respecto a los puntos 1, 2 y 3: existen gramáticas de C estándar listas para usar. Ejemplo:
http://www.lysator.liu.se/c/ANSI-C-grammar-y.html
También existen herramientas que permiten la creación de analizadores léxicos y sintácticos, caso de Lex/Flex y YACC:
http://www.cs.princeton.edu/~appel/m.../flex_toc.html
http://dinosaur.compilertools.net/
http://epaperpress.com/lexandyacc/

Evidentemente, la construcción de traductores/compiladores no es una tarea trivial y que pueda describirse en su totalidad en unos foros como éstos. Lo anterior son sólo unas notas (muy simplificadas. Faltan aspectos tan importantes como la optimización) del proceso. En la red (consejo: Google) existe extensísima documentación sobre el tema y a ella te remito, sin perjuicio de poder tratar aquí temas más concretos.

Saludos.

Última edición por kinobi fecha: 25-10-2003 a las 18:45:26.
Responder Con Cita