FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Crear un EXE a partir de un TXT o CPP
Hola a todos!...
Un grupo de compañeros de la universidad y yo, estamos creando un compilador con Delphi. El problema que tenemos en este momento es que no encontramos cómo crear un ejecutable después de compilar el programa. 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). Si alguien puede darme al menos una idea de cómo hacerlo, no saben cuan agradecida estaré. Gracias... |
#2
|
||||
|
||||
Hola,
Cita:
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. |
|
|
|