Está en la página 1de 12

TECNOLÓGICO NACIONAL DE MÉXICO

Instituto Tecnológico Superior de San Martín


Texmelucan

DIVISIÓN DE INGENIERÍA EN
SISTEMAS COMPUTACIONALES

LENGUAJES Y AUTÓMATAS

Introducción a la Teoría de Lenguajes Formales

INGENIERÍA EN SISTEMAS COMPUTACIONALES

PRESENTA:

Raúl Antonio Vertti Rocha

DOCENTE:

M.C. Maria Petra Paredes Xochihua

Declaro que el siguiente trabajo de evaluación es el fruto de análisis y


trabajo personal. El uso de todos los recursos como citas, ilustraciones,
scripts de terceros, se menciona de forma clara y estricta su origen, tanto
en el cuerpo del texto como en la bibliografía. En este sentido, soy
(somos) consciente(s) de que el hecho de no respetar los derechos de
autor y hacer plagio, son objeto de sanciones universitarias y/o legales

Raúl Antonio Vertti Rocha

San Martín Texmelucan, Puebla Enero del 2020


Contenido

Introducción ............................................................................................................................................. 2
Desarrollo ................................................................................................................................................. 3
Alfabeto .................................................................................................................................................... 3
Cadenas .................................................................................................................................................... 4
Lenguajes.................................................................................................................................................. 5
Traductor .................................................................................................................................................. 6
Fases de un compilador ........................................................................................................................... 8
Conclusión .............................................................................................................................................. 10
Referencias Bibliográficas ...................................................................................................................... 11

i
Introducción

En el presente documento se abordará una investigación sobre los principales


conceptos que introducen a los lenguajes formales dentro de la materia de
Lenguajes y Autómatas.

Para ello se muestra la definición de los conceptos de Alfabeto y Cadena al


principio del tema, ya que es de relevancia conocer que son y para qué son
utilizados, sin estos conceptos resulta imposible entrar a subtemas como
Lenguajes o Traductores, ya que estos están compuestos por estos primeros
conceptos.

Posteriormente, se mostrarán que son los traductores y los tipos de traductores


que existen, exponiendo un poco más a fondo sobre los Compiladores, y he aquí
donde se verá el proceso para la traducción de un compilador que recibe como
lenguaje de entrada uno de alto nivel, y lee como un lenguaje de bajo nivel; para
su mayor comprensión se muestra una imagen anexada en la que se revela como
es el proceso y cada fase, para su traducción, estará explicada con anterioridad.

A continuación, la investigación.
Desarrollo
Alfabeto
Definición: “Un alfabeto es un conjunto de símbolos finito y no vacío de
elementos llamados símbolos o letras.”[1]
Se utiliza el símbolo ∑ para nombrar un alfabeto y la pertenecía de un símbolo σ a
un alfabeto se denota como σ € ∑
Ejemplo: Podemos representar el alfabeto de las letras minúsculas que utiliza el
idioma español, el cual contiene los 27 símbolos siguientes:

Y sabemos que la letra pertenece a este alfabeto, lo cual denotaremos como


a€∑
Más ejemplos:
 Alfabeto binario ∑ = {0,1}
 El conjunto de todos los caracteres ASCII

Entre otros muchos más ejemplos…

3
Cadenas
Definición: “Una cadena o palabra es una secuencia finita de símbolos que
pertenecen a un alfabeto y comúnmente se denota con la letra 𝑤. La cadena vacía
se denota como ϵ y es una secuencia vacía de símbolos tomados de cualquier
alfabeto ∑.”[2]
Longitud de una cadena
Una cadena tiene longitud, la cual se mide por el número de símbolos que hay
dentro de esta y se denota por |𝑤|
Ejemplo de una longitud de cadena:
 |𝑎𝑏𝑐𝑏| = 4

 |𝑎 + 2 ∗ 𝑏| = 5

 |000111| = 6

Concatenación de cadenas.

La concatenación de dos cadenas 𝑢 y 𝑣, escrita 𝑢𝑣, es "pegar" las dos cadenas


para formar una nueva.

Ejemplo de una concatenación de cadenas:

Sea u = ab v = ca w = bb.

Entonces:
 uv = abca

 uw = cabb

 (uv) w = abcabb

 u(vw) = abcabb

4
Lenguajes

Definición: “Es un conjunto de cadenas, de todas las seleccionadas de un Σ*


donde Σ determina el alfabeto y se denomina lenguaje. Si Σ es un alfabeto y L€Σ*,
entonces L es un lenguaje de Σ. Observe que un lenguaje de Σ no necesita incluir
cadenas con todos los símbolos de Σ, ya que una vez que hemos determinado el
contenido de L, esta que L es un lenguaje de Σ. También sabemos que es un
lenguaje de cualquier alfabeto que sea un súper conjunto de Σ.”[4]

La elección del término "lenguaje" puede parecer extraña. Sin embargo, los
lenguajes habituales pueden interpretarse como conjuntos de cadenas.

Ejemplos: El inglés, donde la colección de las palabras correctas inglesas es un


conjunto de cadenas del alfabeto que consta de todas las letras. Otro ejemplo es
el lenguaje C.

Tipos de lenguajes

Lenguaje natural (castellano)

Nosotros estamos relacionados con el concepto tradicional de gramática que, de


esta forma intuitiva, podemos considerar un conjunto de reglas el cual nos indican
que es correcto y que no lo es del, lenguaje natural. Con este fin podemos
acércanos a la definición más clara y formal de la lengua castellana.

Lenguaje artificial

En este lenguaje aplicamos el mismo método en el cual definimos un fragmento


del lenguaje de programación. Donde pretendemos describir las instrucciones el
cual nos permite asignar un valor a una expresión ó a una variable en un lenguaje
C.

5
Lenguaje regular.

Llamamos así a los lenguajes porque sus palabras contienen "regularidades" o


repeticiones de los mismos componentes, por ejemplo en este lenguaje L1 = { ab,
abab, ababab, abababab,...} Este ejemplo podemos apreciar las palabras de L1
son solo repeticiones de "ab" donde se repiten varias veces. Su regularidad
consiste en las palabras que contienen "ab" varias veces

Traductor
Definición 1: “Un traductor se define como un programa que traduce o convierte
desde un texto o programa escrito en un lenguaje fuente hasta un texto o
programa equivalente escrito en un lenguaje destino produciendo, si cabe,
mensajes de error”[5]
Definición 2: ”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.”[3]

Los traductores se dividen en:

Ensambladores
Definición: “El término ensamblador (del inglés assembler) se refiere a un tipo
de programa informático que se encarga de traducir un fichero fuente escrito en
un lenguaje ensamblador, a un fichero objeto que contiene código máquina,
ejecutable directamente por la máquina para la que se ha generado. El propósito
para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de
programas, ya que escribir directamente en código binario, que es el único código
entendible por la computadora, es en la práctica imposible. La evolución de los
lenguajes de programación a partir del lenguaje ensamblador originó también la
evolución de este programa ensamblador hacia lo que se conoce como
programa compilador.”[6]

6
Funcionamiento: El programa lee el fichero escrito en lenguaje ensamblador y
sustituye cada uno de los códigos mnemotécnicos que aparecen por su código de
operación correspondiente en sistema binario.

Preprocesadores
Traduce un lenguaje de alto nivel a otro, cuando el primero no puede pasar a
lenguaje máquina directamente.

Compiladores
Definición: “Un compilador es un programa que lee el código escrito en un
lenguaje (lenguaje origen), y lo traduce o traduce en un programa equivalente
escrito en otro lenguaje (lenguaje objetivo). Como una parte fundamental de este
proceso de traducción, el compilador le hace notar al usuario la presencia de
errores en el código fuente del programa.”[6]

Funcionamiento: Se trata de un programa que traduce código fuente escrito en un


lenguaje de alto nivel (Pascal) en código máquina (no siempre). Son más rápidos
que los intérpretes pero presentan mayor dificultad a la hora de detectar errores.

Interpretes
“Traduce a lenguaje máquina, cada línea del programa fuente y la ejecuta de
inmediato. Traducen en Lenguaje de Alto Nivel a Lenguaje Maquina, se encargan
de traducir cada instrucción, una por una (o cada línea de instrucciones) contenida
en un programa escrito en cualquier lenguaje de alto nivel a instrucciones en
código binario, comprensible por las computadoras.”[6]

Los intérpretes no producen código objeto, por ello la ejecución de un programa


requiere forzosamente del código fuente. Además, los programas en lenguaje
interpretado se ejecutan con más lentitud que aquellos en lenguaje compilado.

Los intérpretes realizan la traducción y ejecución de forma simultánea, es decir, un


intérprete lee el código fuente y lo va ejecutando al mismo tiempo.

7
Fases de un compilador

Análisis Léxico
La primera fase de escáner funciona como un texto escáner. Esta fase busca en el
código fuente como una secuencia de caracteres y la convierte en un lexema
resultante-. Analizador Léxico representa estos lexemas resultantes- en forma de
fichas:
<token-name, attribute-value>
Sintaxis Análisis
La siguiente fase se denomina la sintaxis análisis o análisis. Toma el token de
análisis léxico como entrada y genera un árbol analizar (o árbol de sintaxis). En
esta fase, token arreglos se contrastan con el código fuente gramática, es decir, el
analizador comprueba si la expresión de los tokens es sintácticamente correcto.
Análisis semántico
Análisis semántico comprueba si el análisis árbol construido sigue las reglas del
idioma. Por ejemplo, la asignación de valores es entre tipos de datos compatibles,
y añadiendo cadena en un número entero. Además, el analizador semántico
realiza un seguimiento de los identificadores, sus tipos y expresiones; si los
identificadores se declaran antes de su uso, o no, etc. El analizador semántico
produce un árbol de sintaxis anotado como una salida.
Generación de código intermedio
Tras análisis semántico el compilador genera un código intermedio del código
fuente para el equipo de destino. Es un programa para algunos la máquina
abstracta. , Está entre el lenguaje de alto nivel y el lenguaje de máquina. Este
código intermedio debe ser generado de tal manera que hace que sea más fácil
de traducir en la máquina de destino.
Optimización de código
La siguiente fase de optimización de código es el código intermedio. La
optimización puede ser asumida como algo que elimina código innecesario, y
organiza la secuencia de declaraciones con el fin de acelerar la ejecución del
programa sin desperdicio de recursos (CPU, memoria).

8
Generación de código
En esta fase, el generador de código optimizado la representación del código
intermedio y la asigna a la máquina de destino. El generador de código se traduce
el código intermedio en una secuencia de (generalmente) reubicables código
máquina. Secuencia de instrucciones de código máquina realiza la tarea como el
código intermedio.
Tabla de símbolos
Es una estructura de datos mantendrá en todas las fases de un compilador.
Todos los nombres de identificador junto con sus tipos se almacenan aquí. La
tabla de símbolos hace que sea más fácil para que el compilador pueda buscar
con rapidez el registro de código y recuperarla. La tabla de símbolos se utiliza
también para el campo.

9
Conclusión

Considero que es muy interesante el tema, conocer sobre el alfabeto resulta un


poco fácil ya que este puede ser cualquier cosa, por ello derivan las cadenas que
nos limitan a un lenguaje finito que nos permite realizar una comunicación no solo
lenguaje humano-máquina, si no también humano-humano o incluso máquina-
máquina.
Es evidente que comprender como es el proceso para la traducción de un lenguaje
humano a uno máquina será de mayor complejidad, es por ello que es importante
estudiar cómo se realiza este proceso. Claro es fácil decir al final que solo
estamos transformando nuestro lenguaje a 0’s y 1’s pero es más que eso, va
desde cómo se analiza el léxico, la sintaxis… hasta como se genera el código y
muy importante, cómo es que mantiene presente en todo momento el no producir
errores y entender el lenguaje humano-máquina perfectamente mediante la tabla
de símbolos.

10
Referencias Bibliográficas

1. Autor desconocido (2017).Lenguajes y Automatas 1. Recuperado de:


http://lengyaut.blogspot.com/2017/08/definicion-alfabetos-cadena-lenguaje.html
2. Padilla Beltrán, Pablo G. (2015). Alfabetos, cadenas y lenguajes.
Recuperado de:
http://delta.cs.cinvestav.mx/~mcintosh/comun/summer2006/algebraPablo_html/node4.h
tml

3. Jamarillo H. Anahi, García R. Erick, Martínez S. Luis Antonio, Gomez P.


Alejandro (2015). Lenguajes y Automatas 1: 1.3 Lenguajes. Recuperado de:
http://lenguajesyautomatasitsh.blogspot.com/2015/02/13-lenguajes.html

4. GALEON.com (SN) Unidad 1: Introducción a la Teoría de Lenguajes y


Autómatas. Recuperado de: http://10380054.galeon.com/u1.htm
5. Lopez Coria, Angel M. (2014) Traductor y estructura. Recuperado de:
https://es.slideshare.net/angelmiguelcoria/traductor-y-su-estructura

6. Capuzzi Yanni (SN) traductores de lenguajes de programación.


Recuperado de:http://traductoresune.blogspot.com/2007/05/ensambladores_03.html

11

También podría gustarte