Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fecha: 26/02/2024
Índice
1. Portada
2. Introducción
3. Desarrollo 1.1 Alfabeto
4. 1.1 Alfabeto
5. 1.2 cadenas
6. 1.2 cadenas
7. 1.3 Lenguajes, tipos y herramientas
8. 1.3 Lenguajes, tipos y herramientas
9. 1.4 Estructura de un traductor
10. 1.4 Estructura de un traductor
11. 1.4 Estructura de un traductor
12. 1.5Fases de un compilador
13. 1.5Fases de un compilador
14. Conclusión
15. Bibliografía
Introducción
La Teoría de Lenguajes Formales es un campo fascinante que se sumerge en la
estructura y la semántica de los lenguajes utilizados en la computación y la
comunicación. A medida que avanzamos en la era digital, donde la interacción
entre humanos y máquinas es omnipresente, la comprensión de los lenguajes
formales se vuelve cada vez más esencial.
En el corazón de esta disciplina se encuentran las gramáticas formales, que sirven
como reglas precisas para la construcción de frases y expresiones en un lenguaje
determinado. Estas gramáticas no solo se aplican a los idiomas que hablamos,
sino también a los lenguajes de programación que utilizamos para instruir a las
computadoras. La Teoría de Lenguajes Formales nos brinda las herramientas
necesarias para analizar y comprender la estructura de estos lenguajes,
permitiéndonos desarrollar software más robusto, eficiente y preciso.
Exploraremos cómo los autómatas, máquinas abstractas con estados y
transiciones, pueden utilizarse para reconocer patrones y cadenas de símbolos en
un lenguaje. Estudiaremos la jerarquía de los lenguajes formales, que se clasifican
en tipos según su complejidad y capacidad expresiva. Este conocimiento no solo
tiene aplicaciones prácticas en la programación y la ingeniería de software, sino
que también proporciona una base teórica sólida para abordar una variedad de
problemas en la intersección entre la teoría de la computación y la lingüística.
Desarrollo
1.1 Alfabeto
En el contexto de la Teoría de Lenguajes Formales, uno de los conceptos
fundamentales es el "alfabeto". Un alfabeto se define como un conjunto finito de
símbolos, y estos símbolos son los elementos básicos con los que se construyen
las cadenas o palabras de un lenguaje formal.
De manera más formal, un alfabeto se representa como Σ (sigma) y puede incluir
cualquier cosa, desde letras y números hasta símbolos especiales. Este conjunto
de símbolos constituye la base sobre la cual se forman las expresiones dentro del
lenguaje.
Por ejemplo, consideremos un alfabeto Σ que contiene las letras {a, b, c}. Con este
alfabeto, podemos formar cadenas como "abc", "ba", "ccc", y así sucesivamente.
Estas cadenas son las construcciones básicas que se utilizan para expresar
información en un lenguaje formal.
La comprensión del alfabeto es crucial porque sienta las bases para definir el
conjunto de reglas y estructuras que rigen la formación de las cadenas en un
lenguaje. A medida que profundizamos en la Teoría de Lenguajes Formales, el
alfabeto se convierte en el punto de partida para definir gramáticas formales y para
comprender cómo las máquinas abstractas, como los autómatas, procesan y
reconocen las cadenas construidas a partir de este conjunto de símbolos
fundamentales.
Ejemplos:
los alfabetos españoles, inglés, o alemán
Σ1={0,...,9}, 0∈Σ1
Σ2={x | x es un símbolo del código ASCII}
Σ3={(, )}
Σ4={1, A, 2, B}
Σ5={a, b, c, d}
Σ6={}
Σ7=ℵ
Definición (Palabra):
Sea un alfabeto Σ. Una palabra sobre Σ es una secuencia finita de las letras de
ese alfabeto.
La secuencia vacía representa la palabra vacía y la anotamos con λ.
Ejemplos: sobre Σ5 ={a,b,c,d}: λ, a, b, c, d, abc, aab, dcba, ... sobre Σ1 ={0,...,9}: λ,
0, 0000, 010, 9980, ... sobre Σ3 ={(,)} λ, (, ), (), (()()), )())), ...
Definición (Longitud de una palabra):
Se llama longitud de una palabra x, y se representa por |x|, al número de símbolos
que la componen.
Ejemplos: sobre Σ5 ={a,b,c,d}: |λ|=0, |a|=1, |abc|=3
Definición (Concatenación):
Sean dos palabras x e y definidas sobre el alfabeto Σ. La concatenación de x e y,
denominada “xy”, es una palabra que contiene todos los símbolos (de derecha a
izquierda) de x seguidos de los símbolos de y (de derecha a izquierda).
Sean x=A1A2...An e y=B1B2...Bm con Ai, Bi ∈ Σ: ⇒ xy= A1A2...AnB1B2...Bm
Ejemplos: x =abc, y =da, definidos sobre Σ={a,b,c,d} xy=abcda ; |xy|=|x|+|y|=5
Definición (Potencia):
Sea i un número natural, y x una palabra. La potencia i-ésima de x, denominada xi,
es la operación que consiste en concatenarla consigo misma i veces.
Ejemplos: x =abc ⇒ x1=abc x2=abcabc x3=abcabcabc
Definición (Palabra inversa):
Sea x=A1A2...An con Ai∈Σ una palabra sobre el alfabeto Σ. Se llama palabra
refleja o inversa de x, y se representa por x-1, a la palabra AnAn-1...A1. Si x=λ
entonces x-1=λ.
Ejemplos: x =abc ⇒ x-1=cba
Definición (Lenguaje universal):
Sea Σ un alfabeto. El lenguaje universal de Σ es el conjunto formado por todas las
palabras que se pueden formar con las letras de Σ. Representamos dicho lenguaje
con W(Σ).
Ejemplos:
Σ1 ={a} ⇒ W(Σ1)={λ, a, aa, aaa, ...}
Hay lenguajes finitos, infinitos y vacíos.
1.2 Cadenas
Las "cadenas" son elementos fundamentales en la Teoría de Lenguajes Formales,
donde se utilizan para representar información de manera estructurada. Estas
cadenas están compuestas por símbolos tomados de un alfabeto específico y son
cruciales para comprender la estructura y la sintaxis de los lenguajes formales.
Aplicaciones en Teoría de Lenguajes Formales:
Gramáticas Formales:
Las reglas que definen la estructura de las cadenas en un lenguaje formal se
expresan a través de gramáticas formales.
Autómatas:
Las cadenas son la entrada procesada por autómatas, que son máquinas
abstractas utilizadas para reconocer o generar lenguajes formales.
Compiladores:
En el diseño de compiladores, las cadenas son utilizadas para representar el
código fuente que debe ser analizado y transformado en código ejecutable.
Criptografía:
En criptografía, se manipulan y analizan cadenas para diseñar algoritmos seguros
de cifrado y descifrado.
Longitud de cadena.
La longitud de cadena es el número de símbolos que contiene. La notación
empleada es la que es la que se indica en el ejemplo:
Utilizamos las cadenas de los ejemplos:
I abcb I = 4,
I a + 2*b I = 5
I 000111 I = 6
I if a > b then a = b; I = 9
Cadena Vacía.
Una cadena vacía es la única cadena de caracteres de tamaño cero. Y la
podemos denotar usualmente con letras λ o Є (griegas).
Concatenación de cadenas.
La concatenación de dos cadenas u y v, escrita uv, es "pegar" las dos cadenas
para formar una nueva.
Ejemplo:
Sea u = ab
v = ca
w = bb.
Entonces
uv = abca
uw = cabb
(uv) w = abcabb
u(vw) = abcabb
El resultado de la concatenación de u, v y w es independiente del orden en que las
operaciones son ejecutadas. Matemáticamente esta propiedad es conocida como
asociatividad.
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 unas cadenas infinitas.
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).
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
https://lenguajesyautomatas1998.blogspot.com/2019/01/1.html
http://xamanek.izt.uam.mx/map/cursos/Automatas-HMU08.pdf
https://lenguajesyautomatasitsh.blogspot.com/
https://lenguajesyautomatasitsh.blogspot.com/2015/02/11-alfabeto.html
https://www.studocu.com/es-mx/document/instituto-tecnologico-de-milpa-
alta/operaciones-unitarias-1/12-cadenas-infografica/13762938