0% encontró este documento útil (0 votos)
27 vistas5 páginas

Laboratorio 1

Este documento trata sobre conceptos básicos relacionados con compiladores como expresiones regulares, autómatas finitos, diagramas de transiciones y los tipos de traductores. Explica las diferencias entre compiladores e intérpretes y las dos fases principales del proceso de compilación.

Cargado por

martiefrain18
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas5 páginas

Laboratorio 1

Este documento trata sobre conceptos básicos relacionados con compiladores como expresiones regulares, autómatas finitos, diagramas de transiciones y los tipos de traductores. Explica las diferencias entre compiladores e intérpretes y las dos fases principales del proceso de compilación.

Cargado por

martiefrain18
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

Universidad de Panamá

Facultad de informática, electrónica y comunicación

Licenciatura en ingeniería informática

Profesor:
Ajax Mendoza

Diseño de compiladores
Laboratorio 1

Elaborador por:
Ángel Efraín Martinez
8-1019-2213

Panamá 2024
1. ¿Qué es una expresión regular?
En el amplio mundo de la programación, las expresiones regulares son una herramienta poderosa y muy versátil
que permiten buscar y manipular patrones de texto de manera muy eficiente. Concretamente, las expresiones
regulares se componen de caracteres literales (que representan a sí mismos) y meta caracteres (que tienen
significados especiales). Los metas caracteres son los que confieren a las expresiones regulares su poder, ya que
permiten definir reglas y condiciones más complejas que las simples coincidencias de texto. una expresión regular
se trata de una secuencia de caracteres que define un patrón de texto, y éste último se utiliza para buscar
coincidencias dentro de cadenas de caracteres.

2. Defina qué es un autómata finito (determinista y no determinista)


 Autómata finito determinista: Es el autómata finito que tiene todas sus transiciones no vacías y que por cada
símbolo desde un estado de origen se llega a un único estado destino. Los AFD son definiciones ideales dentro
de los lenguajes regulares por su cercanía formal hacia la creación de máquinas de reconocimiento
fundamentalmente lexicográficas, en tanto sus transiciones son únicas por símbolo, pudiendo a la hora de su
implementación en software, matemática y física realizarse con mayor facilidad.
 Autómata finito no determinista: Es el autómata finito que tiene transiciones vacías o que por cada símbolo
desde un estado de origen se llega a más de un estado destino. Los AFND son definiciones no tan deseables
dentro de los lenguajes regulares porque dificultan su implementación tanto mecánica como informática;
aunque en la mayoría de las transformaciones a lo interno de los LR (expresiones regulares a AF, gramáticas
regulares a AF) conducen a AFND. Los AFND, por tanto, son imprescindibles en el análisis lexicográfico y el
diseño de los lenguajes de programación.

3. Defina los diagramas de transiciones


Un diagrama de transición de estados muestra el comportamiento dependiente del tiempo de un sistema de
información. Representa los estados que puede tomar un componente o un sistema y muestra los eventos que
implican el cambio de un estado a otro. Los dos elementos principales en estos diagramas son los estados y las
posibles transiciones entre ellos.
 El estado de un componente o sistema representa algún comportamiento que es observable externamente y
que perdura durante un periodo de tiempo finito. Viene dado por el valor de uno o varios atributos que lo
caracterizan en un momento dado.
 Una transición es un cambio de estado producido por un evento y refleja los posibles caminos para llegar a un
estado final desde un estado inicial.

4. ¿Qué es un traductor y cuáles son los tipos de traductores?


un traductor es un programa que convierte el código fuente escrito en un lenguaje de programación en un
formato que la computadora puede entender y ejecutar. Los traductores son esenciales para desarrollar software,
ya que permiten a los programadores escribir programas en lenguajes de programación de alto nivel, más
comprensibles para los humanos, y luego convertirlos en instrucciones que la computadora puede ejecutar.
a. Compiladores: Los compiladores son traductores que convierten el código fuente completo de un programa de
alto nivel en código objeto o código ejecutable en una sola pasada. Este código objeto puede ser ejecutado por
la computadora sin necesidad de tener el código fuente presente. Ejemplos de compiladores incluyen GCC para
el lenguaje C y el compilador Java (javac) para el lenguaje Java.
b. Intérpretes: Los intérpretes son traductores que convierten y ejecutan el código fuente línea por línea o
instrucción por instrucción en tiempo real. No generan un archivo ejecutable independiente, sino que ejecutan
el código directamente desde el código fuente. Ejemplos de lenguajes interpretados incluyen Python,
JavaScript y Ruby.
c. Ensambladores: Los ensambladores son traductores que convierten el código fuente escrito en lenguaje
ensamblador (que es un nivel más bajo que los lenguajes de alto nivel) en código máquina, que consiste en
instrucciones directamente comprensibles por la CPU. Ejemplos de ensambladores incluyen NASM (Netwide
Assembler) y GAS (GNU Assembler).
d. Ensambladores de alto nivel (HLLAs): Estos son programas que traducen lenguajes de alto nivel a lenguaje
ensamblador, que luego puede ser ensamblado en código máquina. Los HLLAs permiten a los programadores
escribir en lenguajes de alto nivel mientras tienen control sobre la generación de código ensamblador
resultante.
e. Preprocesadores: Los preprocesadores son programas que realizan manipulaciones o transformaciones en el
código fuente antes de que pase por el proceso de compilación. Por ejemplo, en el lenguaje C, el
preprocesador puede realizar la inclusión de archivos de cabecera (#include), la definición de constantes
(#define) y la eliminación de comentarios.
5. ¿Cuál es la diferencia entre traductor e intérprete
Traductor e intérprete se refieren a dos tipos de software utilizados para convertir código fuente en lenguaje de
programación a código ejecutable por una computadora, pero difieren en su enfoque y proceso de traducción. la
principal diferencia entre un compilador y un intérprete es cómo manejan la traducción y ejecución del código
fuente: el compilador traduce todo el código fuente de una vez antes de la ejecución, mientras que el intérprete
traduce y ejecuta el código fuente línea por línea o instrucción por instrucción en tiempo real.
a. Proceso de Traducción:
 Compilador: Traduce todo el código fuente a código de máquina de una vez antes de la ejecución.
 Intérprete: Traduce y ejecuta el código fuente línea por línea o instrucción por instrucción en tiempo
real durante la ejecución.

b. Ejecución:
 Compilador: Genera un archivo ejecutable independiente que puede ser ejecutado por el sistema
operativo sin necesidad de tener el código fuente disponible.
 Intérprete: Requiere que el código fuente esté presente y accesible durante la ejecución, ya que no
genera un archivo ejecutable independiente.

c. Eficiencia y Velocidad:
 Compilador: Los programas compilados tienden a ser más eficientes en términos de velocidad de
ejecución ya que la traducción ocurre antes de la ejecución.
 Intérprete: Los programas interpretados pueden ser más lentos que los programas compilados ya que
la traducción ocurre durante la ejecución y puede requerir más recursos de la computadora.

d. Dependencia del Código Fuente:


 Compilador: No requiere que el código fuente esté presente durante la ejecución, ya que genera un
archivo ejecutable independiente.
 Intérprete: Requiere que el código fuente esté presente y accesible durante la ejecución, ya que
traduce y ejecuta el código en tiempo real.

e. Errores y Depuración:
 Compilador: Detecta errores de sintaxis y otros errores durante el proceso de compilación, antes de la
ejecución del programa.
 Intérprete: Detecta errores de sintaxis y otros errores a medida que ejecuta el programa, lo que puede
facilitar la depuración en algunos casos.

f. Portabilidad:
 Compilador: El código compilado puede ser ejecutado en cualquier sistema compatible con la
arquitectura para la cual se compiló.
 Intérprete: El mismo código fuente puede ser ejecutado en cualquier sistema que tenga el intérprete
instalado, sin necesidad de recompilarlo para cada plataforma.

6. ¿Cuáles son las dos fases que componen el proceso de compilación?


a. Análisis léxico (o fase de escaneo):
 En esta fase, el código fuente se divide en unidades léxicas o tokens, como palabras clave, identificadores,
operadores y símbolos.
 El analizador léxico, también conocido como "escáner", examina el código fuente caracter por caracter y
agrupa los caracteres en tokens significativos.
 Esta fase también elimina los comentarios y espacios en blanco del código fuente, ya que no son
relevantes para el proceso de compilación.

b. Análisis sintáctico (o fase de análisis):


 En esta fase, los tokens generados por el análisis léxico se organizan en una estructura jerárquica basada
en la gramática del lenguaje de programación.
 El analizador sintáctico, también conocido como "parser", verifica que la secuencia de tokens se ajuste a
las reglas gramaticales del lenguaje de programación.
 Si el código fuente es sintácticamente correcto, se produce un árbol de sintaxis abstracta (AST), que
representa la estructura del programa en términos de construcciones del lenguaje de programación.
 Además de verificar la sintaxis, el analizador sintáctico también puede realizar la verificación de tipos y
otros análisis estáticos, dependiendo del diseño del compilador y del lenguaje de programación.

7. ¿Cómo se clasifican los compiladores?


El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora
puede interpretar y ejecutar. Para cada lenguaje de programación se requiere un compilador separado. El
compilador traduce todo el programa antes de ejecutarlo. Los compiladores son, pues, programas de traducción
insertados en la memoria por el sistema operativo para convertir programas de cómputo en pulsaciones
electrónicas ejecutables (lenguaje de máquina).
a. Una sola pasada: examina el código fuente una vez, generando el código o programa objeto
b. Pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada
final para producir y optimizar el código producido durante los pasos anteriores.
c. Optimación: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.
d. Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo
para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores
requiere que todos los enunciados o instrucciones se compilen conjuntamente.
e. Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.
f. Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está
utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere código
para MS-DOS y que el compilador funcione en Linux y se haya escrito en C++.
g. Compilador con montador: compilador que compila distintos módulos de forma independiente y después
es capaz de enlazarlos.
h. Auto compilador: compilador que está escrito en el mismo lenguaje que va a compilar. Evidentemente, no
se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado,
etc.
i. Meta compilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe
como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera
como salida el compilador para ese lenguaje. El desarrollo de los metas compiladores se encuentra con la
dificultad de unir la generación de código con la parte de análisis.
j. Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de
alto nivel, realizando el proceso inverso a la compilación.

8. Dada la siguiente tabla, completar las columnas en blanco

Acción Descripción Expresión Resultado

Concatenar Dada la siguiente tabla, AB La expresión regular que


completar las columnas requiere que primero se
en blanco: encuentre A seguido
inmediatamente por B

Selección Elección entre dos A|B La expresión regular que


expresiones regulares, acepta A o B
una u otra puede ser
aceptada.

Cerradura positiva Una expresión regular A+ La expresión regular que


seguida por el símbolo + acepta una o más
que indica que la ocurrencias de A
expresión debe aparecer
una o más veces.

Cerrado de Kleene Una expresión regular A* La expresión regular que


seguida por el símbolo ∗ acepta cero o más
que indica que la ocurrencias de A
expresión puede aparecer
cero o más veces.

Opcional Indica que la expresión A? La expresión regular que


puede estar presente o acepta A si está presente,
no. pero también acepta la
cadena vacía si A está
ausente.

También podría gustarte