Professional Documents
Culture Documents
Gramticas de tipo 0 (sin restricciones), que incluye a todas las gramticas formales. Estas gramticas generan todos los lenguajes capaces de ser reconocidos por una mquina de Turing. Los lenguajes son conocidos como lenguajes recursivamente enumerables. Ntese que esta categora es diferente de la de los lenguajes recursivos, cuya decisin puede ser realizada por una mquina de Turing que se detenga. Gramticas de tipo 1 (gramticas sensibles al contexto) generan los lenguajes sensibles al contexto. Estas gramticas tienen reglas de la forma con un no terminal y , y cadenas de terminales y no terminales. Las cadenas y pueden ser vacas, pero no puede serlo. La regla est permitida si no aparece en la parte derecha de ninguna regla. Los lenguajes descritos por estas gramticas son exactamente todos aquellos lenguajes reconocidos por una mquina de Turing determinista cuya cinta de memoria est acotada por un cierto nmero entero de veces sobre la longitud de entrada, tambin conocidas como autmatas linealmente acotados. Gramticas de tipo 2 (gramticas libres del contexto) generan los lenguajes independientes del contexto. Las reglas son de la forma con un no terminal y una cadena de terminales y no terminales. Estos lenguajes son aquellos que pueden ser reconocidos por un autmata con pila. Gramticas de tipo 3 (gramticas regulares) generan los lenguajes regulares. Estas gramticas se restringen a aquellas reglas que tienen en la parte izquierda un no terminal, y en la parte derecha un solo terminal, posiblemente seguido de un no terminal. La regla tambin est permitida si no aparece en la parte derecha de ninguna regla. Estos lenguajes son aquellos que pueden ser aceptados por un autmata finito. Tambin esta familia de lenguajes pueden ser obtenidas por medio de expresiones regulares.
Ntese que el conjunto de gramticas correspondiente a los lenguajes recursivos no es un miembro de la jerarqua. Cada lenguaje regular es a su vez libre del contexto, asimismo un lenguaje libre del contexto es tambin dependiente del contexto, ste es recursivo y a su vez, recursivamente enumerable. Las inclusiones son, sin embargo, propias, es decir, existen en cada nivel lenguajes que no estn en niveles anteriores.
No se pudo entender(error desconocido): \mathrm{P} =\{(S\rightarrow \lambda )o(A\rightarrow v)|v\in \Sigma ^{+};A\in N\}
Son los lenguajes ms simples dentro la Jerarqua de Chomsky. Se suelen expresar mediante expresiones regulares. Existen 2 tipos: lineales por la derecha y lineales por la izquierda. Las reglas de produccin son de la siguiente forma: Lineales por la derecha:
Existen tambien cuatro modelos bsicos de computacin que describen casi todos los lenguajes de programacin actuales: el imperativo, el aplicativo, el lenguaje con base en reglas y el orientado a objetos. Se describe en forma breve cada uno de estos modelos. Lenguajes imperativos. Los lenguajes imperativos o de procedimiento son lenguajes controlados por mandatos u orientados a enunciados (instrucciones). Un programa se compone de una serie de enunciados, y la ejecucin de cada enunciado hace que el intrprete cambie el valor de una localidad o ms en su memoria, es decir, que pase a un nuevo estado. El desarrollo de programas consiste en construir los estados de mquina sucesivos que se necesitan para llegar a la solucin. sta suele ser la primera imagen, que se tiene de la programacin, y muchos lenguajes de uso amplio (por ejemplo, C, C++, FORTRAN, ALGOL, PL/I, Pascal, Ada, Smalltalk, COBOL) manejan este modelo. Lenguajes aplicativos. Un punto de vista alternativo de la computacin representado por un lenguaje de programacin consiste en examinar la funcin que el programa representa y no slo los cambios de estado conforme el programa se ejecuta, enunciado por enunciado. Esto se puede conseguir observando el resultado deseado en vez de los datos disponibles. En otras palabras, en vez de examinar la serie de estados a travs de los cuales debe pasar la mquina para obtener una respuesta, la pregunta que se debe formular es: Cul es la funcin que se debe aplicar al estado de mquina inicial accediendo al conjunto inicial de variables y combinndolas en formas especficas para obtener una respuesta? Los lenguajes que hacen nfasis en este punto de vista se conocen como lenguajes aplicativos o funcionales. Lenguajes base en reglas.
Los lenguajes con base en reglas se ejecutan verificando la presencia de una cierta condicin habilitadora y, cuando se satisface, ejecutan una accin apropiada. El lenguaje ms comn con base en reglas es Prolog, que tambin se conoce como de programacin lgica, puesto que las condiciones habilitadoras bsicas son ciertas clases de expresiones lgicas de predicados. La ejecucin de un lenguaje reglas es similar a la de un lenguaje imperativo, excepto que los enunciados no secuenciales. Programacin orientada a objetos. En este tipo de lenguaje, se construyen objetos complejos de datos y luego designa un conjunto limitado de funciones para que operen con esos datos. Los objetos complejos se designan como extensiones de objetos ms simples y heredan propiedades del objeto ms sencillo. Al construir objetos a concretos de datos, un programa orientado a objetos gana la eficiencia de los lenguajes imperativos, y al construir clases de funciones que utilizan un conjunto restringido de objetos de datos, se construye la flexibilidad y confiabilidad del modelo aplicativo.
* Intrpretes: En lugar de producir un programa objeto como resultado de una traduccin, un intrprete realiza las operaciones que implica el programa fuente. Muchas veces los intrpretes se usan para ejecutar lenguajes de rdenes, pues cada operador que se ejecuta en un lenguaje de ordenes suele ser una invocacin de una rutina compleja, como un editor o un compilador es el encargado de COMPILADOR CONVENCIONAL * Formadores de textos: Un formador de textos toma como entrada una cadena de caracteres, la mayor parte de la cual es texto para componer, pero alguna incluye rdenes para indicar prrafos, figuras o estructuras matemticas como subndices o superndices esto con comento el autor del libro de Compiladores Addison Wesley. * Intrpretes de consultas: Un intrprete de consultas traduce un predicado que contiene operadores relacionales y booleanos a rdenes para buscar en una base de datos registros que satisfagan ese predicado
Estructura de un traductor
Estructura bsica 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. Ejemplos de traductores son los ensambladores y los compiladores.
Fase de anlisis
Fase de Sntesis
1.4.1 ensambladores.
El programa ensamblador es el programa que realiza la traduccin de un programa escrito en ensamblador a lenguaje mquina. Esta traduccin es directa e inmediata, ya que las instrucciones en ensamblador no son ms que nemotcnicosde las instrucciones mquina que ejecuta directamente la CPU. Tipos de ensambladores
Ensambladores bsicos. Son de muy bajo nivel, y su tarea consiste bsicamente en ofrecer nombres simblicos a las distintas instrucciones. Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores bsicos. Hacen todo lo que puede hacer un ensamblador, y adems 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 tambin el uso de macros, permiten utilizar estructuras de programacin ms complejas propias de los lenguajes de alto nivel.
3 Fases de un compilador
Palabras reservadas(do, while, if, ) Palabras no especificas(identificadores, constantes) Formados por tipo y lexema Int contador Identificador = tipo contador = lexema Anlisis Sintctico Recibe los tokens del analizador lxico y comprueba que estn ordenados conforme a la gramtica
Generacin de cdigo intermedio Codifica el lenguaje fuente en un lenguaje intermedio entre el lenguaje objeto Permite la separacin entre front-end y back-end Utilizacin de cdigo de 3 direcciones (A=B+C) Instrucciones condicionales y saltos
Optimizacin de cdigo intermedio Permite realizar mejoras en el cdigo intermedio Eliminacin de saltos consecutivos Factorizaciones Eliminar cdigo intil Optimizacin de bucles
Generar una secuencia de instrucciones en cdigo ensamblador o mquina a partir del cdigo intermedio A=B+C LOAD B ADD C STORE A
Tabla de smbolos Tabla donde se registran los identificadores, constantes, funciones y otros objetos especificados en el programa fuente El compilador desarrolla funciones comunes de acceso a ella
Manejo de errores Mensajes de error que el compilador emite cuando encuentra una inconsistencia en cualquiera de las fases de compilacin Normalmente en una compilacin no se muestran todos los errores producidos: Ocultacin de otros errores Avalancha de errores Se puede Pararse al encontrar cualquier error Intentar recuperar todos los errores de una pasada