Está en la página 1de 11

INTRODUCCION

1.1 ALFABETO

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


Denotamos un alfabeto arbitrario con la letra Σ.

Símbolos:

Es una entidad abstracta que no se puede definir, ya que se dejaría como un


axioma. Igual que se define un punto en la geometría. La cual normalmente los
símbolos son letras (a, b, c, …. z), dígitos (0, 1, …9, caracteres (+, -, *, /,>, < …).
los símbolos pueden estar formados por varias letras o caracteres.

Alfabeto:

El alfabeto o abecedario es un conjunto de letras, con un determinado orden.


podríamos precisamente decir que el alfabeto es un conjunto de letras (caracteres
o grafemas) de un sistema de escritura, cada una representa aproximadamente un
fonema (consonante o vocal).
1.2 CADENAS.

Una cadena o palabra sobre un alfabeto Σ. admitimos la existencia de una única


cadena que no tiene símbolos, la cual se denomina cadena vacía y se denota con
λ. la cadena vacía desempeña, en la teoría de lenguajes formales, un papel similar
al que desempeña el conjunto vacío Ø en la teoría de conjuntos.

Longitud de cadena.

La longitud de cadena es el numero 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
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 alfabeto con una sola letra V = {a}, podemos decir que el universo del discurso
es: W(V) = {λ, a, aa, aaa, aaaa, …} y así contiene unas cadenas infinitas.

1.3 LENGUAJES.

Es un conjunto de cadenas, de todas las seleccionadas de un Σ*. donde Σ


determinado el alfabeto 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 esta que L es un lenguaje
de Σ, también sabemos que es un lenguaje de cualquier alfabeto que sea un súper
conjunto de Σ.

La elección del término "lenguaje" puede parecer extraña. Sin embargo, los
lenguajes habituales pueden interpretarse como conjuntos de cadenas. Un ejemplo
seria 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.

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

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.

1.5 Herramientas computadoras ligadas con lenguajes.

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.

Compilador.

El compilador es un programa informático que traduce un programa escrito en


lenguaje de programación y lo pasa a lenguaje de programación, podemos decir
que este programa nos permite traducir un código fuente de un programa en
lenguaje de nivel alto, y lo pasmos a otro nivel inferior (lenguaje maquina).

Ensambladores.

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


en ensamblador y lo pasa a lenguaje maquina. Directa o no directa la traducción en
que las instrucciones no son mas que instrucciones que ejecuta la computadora.
Interpretes.

Los intérpretes son los que realizan normalmente dos operaciones:

 Traducen el código fuente a un formato interno.


 Ejecuta o interpretan el programa traducido al formato interno.

Donde la primera pertenece al interprete el cual llama a veces al compilador, así se


genera el código interno, pero no es el lenguaje de máquina, ni lenguaje de
símbolos, ni mucho menos un lenguaje de nivel alto.

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

1.
Ejemplos de traductores son los ensambladores y los compiladores.

2.
En el proceso de traducción se identifican dos fases principales:
 Fase de análisis

 Fase de Síntesis
1.7 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.

1.-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
(componentes léxicos o “tokens” en ingles).
• 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.

2.-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.
• Se determinan las relaciones estructurales entre los componentes léxicos, esto
es semejante a realizar el análisis gramatical sobre una frase en lenguaje natural.
La estructura sintáctica la definiremos mediante las gramáticas independientes del
contexto.
3.-Análisis semántico:
Realiza las comprobaciones necesarias sobre el árbol sintáctico para determinar el
correcto significado del programa.
• Las tareas básicas a realizar son: La verificación e inferencia de tipos en
asignaciones y expresiones, la declaración del tipo de variables y funciones antes
de su uso, el correcto uso de operadores, el ámbito de las variables y la correcta
llamada a funciones.
• Nos limitaremos al análisis semántico estático (en tiempo de compilación), donde
es necesario hacer uso de la Tabla de símbolos, como estructura de datos para
almacenar información sobre los identificadores que van surgiendo a lo largo del
programa. El análisis semántico suele agregar atributos (como tipos de datos) a la
estructura del árbol semántico.

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

5.-Generador 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.
• Suelen implementarse a mano, y son complejos porque la generación de un
buen código objeto requiere la consideración de muchos casos particulares.
6.-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.)
Además almacena el tipo de dato, método de paso de parámetros, tipo de retorno
y de argumentos de una función, el ámbito de referencia de identificadores y la
dirección de memoria. Interacciona tanto con el analizador léxico, sintáctico y
semántico que introducen información conforme se procesa la entrada. La fase de
generación de código y optimización también la usan.

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

Encuentra errores: – En tiempo de compilación: errores léxicos (ortográficos),


sintácticos (construcciones incorrectas) y semánticos (p.ej. errores de tipo) – En
tiempo de ejecución: direccionamiento de vectores fuera de rango, divisiones por
cero, etc. – De especificación/diseño: compilan correctamente pero no realizan lo
que el programador desea.
Se trataran sólo errores estáticos (en tiempo de compilación). Respecto a los
errores en tiempo de ejecución, es necesario que el traductor genere código para
la comprobación de errores específicos, su adecuado tratamiento y los
mecanismos de tratamiento de excepciones para que el programa se continúe
ejecutando.