1.1.-Alfabeto: Ejemplo
1.1.-Alfabeto: Ejemplo
- Alfabeto
EJEMPLO;
https://www.academia.edu/15275019/Lenguajes_y_Aut%C3%B3matas_1?auto=download
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.
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
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.
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;
· 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
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.
Fase de análisis
•
Fase de síntesis
Ensamblador.
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.
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.
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.
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.
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 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.