Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear un EXE a partir de un TXT o CPP (https://www.clubdelphi.com/foros/showthread.php?t=4734)

aleidania 25-10-2003 17:46:28

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...

kinobi 25-10-2003 18:36:45

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.


La franja horaria es GMT +2. Ahora son las 06:27:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi