Lenguajes y Autómatas.-1
Lenguajes y Autómatas.-1
Lenguajes y Autómatas.-1
INTEGRANTES:
6TO SEMESTRE.
LENGUAJES Y AUTÓMATAS 1
Alfabetos, cadenas y lenguajes:
Tipos de cadenas:
Cadena de caracteres: que también se denomina en ocasiones palabra, es una secuencia
finita de símbolos seleccionados de algún alfabeto.
Cadena vacía: Es aquella cadena que representa cero apariciones de símbolos. Esta
cadena, esta designada por ɛ , | ɛ|= 0, es una cadena que puede construirse en cualquier
alfabeto.
Ejemplo:
Sea Σ = {a, b} el alfabeto que consta de los dos símbolos a y b. Las
Siguientes son cadenas sobre Σ:
Aba
Ababaaa
Aaaab.
Obsérvese que aba 6= aab. El orden de los símbolos en una cadena es significativo Ya que
las cadenas se definen como sucesiones, es decir, conjuntos secuencialmente Ordenados.
Ejemplo:
Ejemplo El alfabeto Σ = {0, 1} se conoce como alfabeto binario. Las cadenas sobre este
alfabeto son secuencias finitas de ceros y unos, llamadas Secuencias binarias, tales como
001
1011
001000001.
Lenguaje.
El lenguaje L de cadenas del alfabeto {a,b} en donde cada cadena comienza con una a
y tiene longitud par. Las cadenas aa, ab, aaaa, abbb, abab, abbbaaba, forman parte de ese
lenguaje.
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.
Ejemplo:
Un conjunto de cadenas, todas ellas seleccionadas de un ∑*, donde ∑ es un determinado
alfabeto, se denomina lenguaje.
Los lenguajes habitualmente 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.
El lenguaje español consiste que todas la cadenas de palabras que nosotros llamamos
oraciones. No todas las combinaciones de palabras forman oraciones.
Un lenguaje consiste de un subconjunto del conjunto de todas las posibles cadenas que
pueden formar del alfabeto.
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).
(Traductor)
Características
El programa se compila una sola vez, pero se puede ejecutar muchas
La ejecución del programa objeto es mucho más rápida que la interpretación de la fuente
El compilador tiene una visión completa del programa, por lo que puede dar una
información más detallada de los errores cometidos por el programador.
Fases:
Ensambladores.
El ensamblador es el programa en que se realiza la tracción de un programa escrito en
ensamblador y lo pasa a lenguaje máquina. Directa o no directa la traducción en que las
instrucciones no son más 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.
ANALISIS LEXICO
Lee la secuencia de caracteres del programa fuente, caracter a caracter, y los
agrupa para formar unidades con significado propio, los componentes léxicos
(Tokens en inglés). Estos componentes léxicos representan: palabras reservadas:
if, While, do, . . . identificadores: asociados a variables, nombres de funciones, tipos
definidos por el usuario, etiquetas, ... Por ejemplo: posición, velocidad, tiempo, . . .
operadores: = * + - / == > < &! = . . . símbolos especiales; ( ) [ ] { } ... constantes
numéricas: literales que representan valores enteros, en coma flotante, etc., 982,
0xF678, -83.2E+2,... constantes de caracteres: literales que representan cadenas
concretas de caracteres, “hola mundo”,... El analizador léxico opera bajo petición
del analizador sintáctico devolviendo un componente léxico conforme el analizador
sintáctico lo va necesitando para avanzar en la gramática. Los componentes léxicos
son los símbolos terminales de la gramática. Suele implementarse como una
subrutina del analizador sintáctico. Cuando recibe la orden obtienen el siguiente
componente léxico, el analizador léxico lee los caracteres de entrada hasta
identificar el siguiente componente léxico.
ANALISIS SINTACTICO
Es la fase del analizador que se encarga de chequear el texto de entrada en base
a una gramática dada. Y en caso de que el programa de entrada sea válido,
suministra el árbol sintáctico que lo reconoce. En teoría, se supone que la salida del
analizador sintáctico es alguna representación del árbol sintáctico que reconoce la
secuencia de Tokens suministrada por el analizador léxico. En la práctica, el
analizador sintáctico también hace:
• Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador
semántico).
• Chequeo de tipos (del analizador semántico).
• Generar código intermedio.
• Generar errores cuando se producen.
En definitiva, realiza casi todas las operaciones de la compilación. Este método de
trabajo da lugar a los métodos de compilación dirigidos por sintaxis.
ANALISIS SEMANTICO
La fase de análisis semántico revisa el programa fuente para tratar de encontrar
errores semánticos y reúne la información sobre los tipos para la fase posterior de
generación de código. En ella se utiliza la estructura jerárquica determinada por la
clase de análisis sintáctico para identificar los operadores y operandos de
expresiones y proposiciones.
Un componente importante del análisis semántico es la verificación de tipos. Aquí,
el compilador verifica si cada operador tiene operandos permitidos por la
especificación del lenguaje fuente. Por ejemplo, las definiciones de muchos
lenguajes de programación requieren que el compilador indique un error cada vez
que se use un número real como índice de una matriz. Sin embargo, la
especificación del lenguaje puede permitir ciertas coerciones a los operandos, por
ejemplo, cuando un operador aritmético binario se aplica a un número entero y a un
número real. En este caso, el compilador puede necesitar convertir el número entero
a real.