0% encontró este documento útil (0 votos)
443 vistas8 páginas

1.1.-Alfabeto: Ejemplo

El documento describe los conceptos básicos de los alfabetos, cadenas y lenguajes formales. Define un alfabeto como un conjunto finito de letras o símbolos, y una cadena como una secuencia finita de símbolos de un alfabeto. Explica los tipos de lenguajes como lenguajes de bajo, medio y alto nivel, y describe las herramientas utilizadas en el análisis y procesamiento de lenguajes como editores, compiladores e intérpretes.

Cargado por

Noel Hernández
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 PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
443 vistas8 páginas

1.1.-Alfabeto: Ejemplo

El documento describe los conceptos básicos de los alfabetos, cadenas y lenguajes formales. Define un alfabeto como un conjunto finito de letras o símbolos, y una cadena como una secuencia finita de símbolos de un alfabeto. Explica los tipos de lenguajes como lenguajes de bajo, medio y alto nivel, y describe las herramientas utilizadas en el análisis y procesamiento de lenguajes como editores, compiladores e intérpretes.

Cargado por

Noel Hernández
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 PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

1.1.

- Alfabeto

Un alfabeto es un conjunto finito no vacío, cuyos elementos se denominan letras o símbolos.


Denotamos un alfabeto arbitrario con la letra Σ.
De símbolos del alfabeto Notaciones:
|ω| denota la longitud de la cadena ω.
λ denota a una cadena de longitud 0, también conocida como palabra vacía
Vn denota al conjunto de todas las palabras de longitud n sobre V
V0 denota al conjunto cuyo unico elemento es la palabra vacia, es decir, V0={λ}
V*denota al conjunto de todas las cadenas de cualquier longitud sobre V.
V+ denota al conjunto de toda las cadenas de cualquier longitud sobre V, excepto la vacía.
Un elemento de Vn es una cadena del tipo a 1 a 2...an donde cada ai ∈ V.

EJEMPLO;

https://www.academia.edu/15275019/Lenguajes_y_Aut%C3%B3matas_1?auto=download

● Martínez Bautista Marisa

1.2 CADENAS
John Martin en su libro “Lenguajes formales y teoría de la computación” define como
Cadena en un alfabeto Ʃ se obtiene al ordenar elementos de Ʃ, este autor no define la palabra
cadena en sí pero si la utiliza mucho en
Sus definiciones para lenguajes y alfabeto. Otra definición de Jonh E. Hpocroft,
Rajeev Motwani y Jeffrey D. Ullman en su libro “Introducción a la teoría de
Autómatas, Lenguajes y Computación” nos dicen que una cadena (también
Llamada palabra) es una secuencia finita de símbolos pertenecientes a un
Alfabeto.

Una cadena o una palabra sobre un alfabeto, admitidos la existencia de una única cadena que no
tiene símbolo la cual se denomina cadena básica.

La longitud de cadena es el único símbolo que contiene:


Ejemplo
|abc|= 4,
|a+2*b|+5
|000111|=6
|if a>b then a=b;|=9

Cadena vacía
Es la única cadena de caracteres tamaño cero.
Concatenación de cadenas
la concatenación de dos cadenas u y v, escrita uv es pagar las dos cadenas para formar una sola.
Ejemplo
uw= cabb
(uv)= abcabb
u(vW)= abcabb

Universo del discurso.

Es un conjunto de todas las cadenas donde podemos formar con símbolos del alfabeto V le
denominamos universo del discurso de V y la representamos de la siguiente manera W (V). Es
evidente que W(V) es un conjunto infinito y que la cadena vacía pertenece a W(V).

Ejemplo:

Un afabeto con una sola letra V = { a }, podemos decir que el universo del discurso es: W(V) = { λ, a,
aa, aaa, aaaa,....} y asi contiene una cadenas infinitas.

Faces de un compilador.

Es un programa que lee un programa escrito en un lenguaje, el lenguaje fuente y lo traduce a un


programa equivalente en otro lenguaje, el lenguaje objeto como parte de este proceso de traducción
el compilador informa al usuario de la presencia de erros en el programa fuente.

Modelo de Análisis y síntesis de la Compilación.


En la compilación hay dos partes análisis y síntesis la parte del análisis divide al programa fuente en
sus elementos componentes y crea una representación intermedia del programa fuente. La parte de
síntesis construye el programa objeto deseado a partir de la representación intermedia. De las dos
partes, la síntesis es la que requiere las técnicas más especializadas.

● Maigualida Perez Mrlgarejo

1.3 LENGUAJES, TIPOS Y HERRAMIENTAS

Un lenguaje es un conjunto de cadenas, todas ellas seleccionadas de un subconjunto finito donde


el conjunto es un determinado alfabeto. Es una forma de representar información basada en un
conjunto finito de signos o símbolos.

TIPOS DE LENGUAJES

Lenguajes de bajo nivel: Son lenguajes totalmente dependientes de la máquina, es decir que el
programa que se realiza con este tipo de lenguajes no se puede migrar o utilizar en otras máquinas.
Al estar prácticamente diseñados a medida del hardware, aprovechan al máximo las características
del mismo. Dentro de este grupo se encuentran:

· El lenguaje maquina: este lenguaje ordena a la máquina las operaciones fundamentales para su
funcionamiento.
Su desventaja es que son bastantes difíciles de manejar y usar, además de tener códigos fuente
enormes donde encontrar un fallo es casi imposible.
· El lenguaje ensamblador: es un derivado del lenguaje máquina y está formado por abreviaturas de
letras y números llamadas mnemotécnicos.
Las desventajas de este lenguaje siguen siendo prácticamente las mismas que las del lenguaje
ensamblador, añadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y
mantener.

Lenguajes de alto nivel Son aquellos que se encuentran más cercanos al lenguaje natural que al
lenguaje máquina. Están dirigidos a solucionar problemas mediante el uso de EDD's (Estructuras
Dinámicas de Datos).

Son estructuras que pueden cambiar de tamaño durante la ejecución del programa. Nos permiten
crear estructuras de datos que se adapten a las necesidades reales de un programa. Se tratan de
lenguajes independientes de la arquitectura del ordenador.

Lenguajes de Medio nivel Estos lenguajes se encuentran en un punto medio entre los dos anteriores.
Dentro de estos lenguajes podría situarse C ya que puede acceder a los registros del sistema,
trabajar con direcciones de memoria, todas ellas características de lenguajes de bajo nivel y a la vez
realizar operaciones de alto nivel.

HERRAMIENTAS;

Editores de estructuras Un editor de estructuras toma como entrada una secuencia de


órdenes para construir un programa fuente. El editor de estructuras no solo realiza las fuentes
de creación y modificación de textos de un editor de textos ordinarios, sino que también
analiza el texto del programa, imponiendo al programa fuente una estructura jerárquica
apropiada. Ejemplos:

Editores de C, Pascal, Visual Studio (Fox Pro, Basic, etc.).


mpresoras estéticas Una impresora estética analiza un programa y lo imprime de forma que la
estructura del programa resulte claramente visible. Por ejemplo, los comentarios pueden aparecer
con un tipo de letra especial, y las proposiciones pueden aparecer con una identificación proporcional
a la profundidad de su anidamiento en la organización jerárquica de las proposiciones. EJEMPLOS:
Word, Excel, Power Point, Photoshop, etc.

· Verificadores estáticos: Un verificador estático lee un programa, lo analiza e intenta descubrir


errores potenciales sin ejecutar el programa. Ejemplos: Editores de C y Pascal. Verificadores
estáticos de sintaxis (como lint) permiten detectar muchos errores antes de la compilación. (Algo
parecido a lo que se obtiene con la opción -fsyntax- only del compilador de GNU).

· Intérpretes: Un intérprete realiza las operaciones que implica el programa fuente. Para una
proposición de asignación, por ejemplo, un intérprete podría construir un árbol y después efectuar
las operaciones de los nodos con forme “recorre” el árbol. Ejemplos: Los intérpretes (para lenguajes
como Lisp o Basic, o para programas con sus propios lenguajes interpretados como Derive o
Mathematica) Shells de sistemas operativos o de alguna aplicación como un SMBD.

http://slideshare.net/luyzmeyner/lenguajes-autmatas
● Reyes Castillo Blanca Estela

1.4.- Estructura de un traductor.

Un traductor es un programa que tiene como entrada un texto escrito en un lenguaje (lenguaje fuente)
y como salida produce un texto escrito en un lenguaje (lenguaje objeto) que preserva el significado
de origen. Ejemplos de traductores son los ensambladores y los compiladores.

En el proceso de traducción se identifican dos fases principales:

Fase de análisis

Fase de síntesis

Ensamblador.

El programa ensamblador es el programa que realiza la traducción de un programa escrito en


ensamblador a lenguaje máquina. Esta traducción es directa e inmediata, ya que las instrucciones
en ensamblador no son más que nemotécnicos de las instrucciones máquina que ejecuta
directamente la CPU.

Tipos de ensambladores

Podemos distinguir entre tres tipos de ensambladores:

• Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer
nombres simbólicos a las distintas instrucciones.

• Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores


básicos. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de
directivas para definir e invocar macroinstrucciones.
• Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como
respuesta a una nueva arquitectura de procesadores de 32 bits, realizan la misma tarea que los
anteriores, permitiendo también el uso de macros, permiten utilizar estructuras de programación más
complejas propias de los lenguajes de alto nivel.

Compilador

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de


programación a otro lenguaje de programación, es decir programa que permite traducir el código
fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (lenguaje máquina).
Generando un programa equivalente a capaz de interpretar.

Componentes en que se divide un compilador:

Análisis Léxico. En esta fase se lee los caracteres del programa fuente y se agrupan en cadenas
que representan los componentes léxicos. A la secuencia de caracteres que representa un
componente léxico se le llama lexema (o con su nombre en inglés token).

Análisis Sintáctico. Los componentes léxicos se agrupan en frases gramaticales que el compilador
utiliza para sintetizar la salida.
Análisis Semántico. Intenta detectar instrucciones que tengan la estructura sintáctica correcta, pero
que no tengan significado para la operación implicada.

Generación de código Intermedio. Se puede considerar esta operación intermedia como un


subprograma para una máquina abstracta, a esta representación debe tener dos propiedades
importantes: debe ser fácil de producir y fácil de traducir al programa objeto.

Optimización de Código. Se trata de mejorar el código intermedio, de modo que resulte un código
de máquina más rápido de ejecutar.

Generación de Código. Esta constituye la fase final de un compilador.


Administrador de la tabla de símbolos. Se encarga de manejar los accesos a la tabla de símbolos,
en cada una de las etapas de compilación de un programa.

Manejador de errores. Es posible encontrar errores. De esta forma podrán controlarse más
eficientemente los errores encontrados en cada una de las fases de la compilación de un programa.

●Rodríguez Medina Rodolfo.

1.5.- Fases de un compilador.

Los compiladores son programas de computadora que traducen de un lenguaje a otro. Un compilador
toma como su entrada un programa escrito en lenguaje fuente y produce un programa equivalente
escrito en lenguaje objeto.

Un compilador se compone internamente de varias etapas, o fases, que realizan operaciones lógicas.
Es útil pensar en estas fases como piezas separadas dentro del compilador, y pueden en realidad
escribirse como operaciones codificadas separadamente aunque en la práctica a menudo se
integran.

--Análisis Léxico
– Análisis Sintáctico
– Análisis Semántico
– Generación y Optimización de código intermedio
– Generación de código objeto
-tabla de símbolos

-gestor de errores

• Analizador léxico: lee la secuencia de caracteres de izquierda a derecha del programa fuente y
agrupa las secuencias de caracteres en unidades con significado propio.

• Las palabras clave, identificadores, operadores, constantes numéricas, signos de puntuación como
separadores de sentencias, llaves, paréntesis, etc. , son diversas clasificaciones de componentes
léxicos.

• Análisis sintáctico: determina si la secuencia de componentes léxicos sigue la sintaxis del lenguaje
y obtiene la estructura jerárquica del programa en forma de árbol, donde los nodos son las
construcciones de alto nivel del lenguaje.

•Análisis semántico: realiza las comprobaciones necesarias sobre el árbol sintáctico para determinar
el correcto significado del programa.

• Generación y optimización de código intermedio: la optimización consiste en la calibración del árbol


sintáctico donde ya no aparecen construcciones de alto nivel. Generando un código mejorado, ya no
estructurado, más fácil de traducir directamente a código ensamblador o máquina, compuesto de un
código de tres direcciones (cada instrucción tiene un operador, y la dirección de dos operándoos y
un lugar donde guardar el resultado), también conocida como código intermedio.

• Generación de código objeto: toma como entrada la representación intermedia y genera el código
objeto. La optimización depende de la máquina, es necesario conocer el conjunto de instrucciones,
la representación de los datos (número de bytes), modos de direccionamiento, número y propósito
de registros, jerarquía de memoria, encauzamientos, etc.

• Tabla de Símbolos: es una estructura tipo diccionario con operaciones de inserción, borrado y
búsqueda, que almacena información sobre los símbolos que van apareciendo a lo largo del
programa como son: – los identificadores (variables y funciones) – Etiquetas – tipos definidos por el
usuario (arreglos, registros, etc.)

• Gestor de errores: detecta e informa de errores que se produzcan durante la fase de análisis. Debe
generar mensajes significativos y reanudar la traducción.

También podría gustarte