Está en la página 1de 11

1 Tipos de lenguajes - jerarqua de Chomsky

La Jerarqua de Chomsky consta de cuatro niveles:

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.

Lenguajes Recursivamente Enumerables (de tipo 0)


Las gramticas que generan estos lenguajes pueden tener reglas compresoras. Las reglas de produccin son de la siguiente forma:

Lenguajes Dependientes del Contexto (sensibles al contexto, de tipo 1)


No existen reglas compresoras, salvo, opcionalmente, la que deriva el axioma a la palabra vaca. Existen reglas en las que un smbolo no terminal puede derivar a formas sentenciales distintas, segn los smbolos que aparezcan a su alrededor. Las reglas de produccin son de la siguiente forma:

Lenguajes Independientes del Contexto (Libres de contexto, de tipo 2)


La mayora de los lenguajes de programacin entran en sta categora en cuanto su forma sintctica, aunque en realidad los lenguajes de programacin son dependientes del contexto, se reconocen a travs de lenguajes de tipo 2 porque su reconocimiento es de O(n) mientras que los de tipo 1 tienen un orden de reconocimiento O(n^3) en el peor caso. Por este motivo se ejecuta un anlisis semntico para reconocer si el programa es correcto. Las reglas de produccin son de la siguiente manera:

No se pudo entender(error desconocido): \mathrm{P} =\{(S\rightarrow \lambda )o(A\rightarrow v)|v\in \Sigma ^{+};A\in N\}

Lenguajes Regulares (de tipo 3)

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:

Lineales por la izquierda:

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.

2 HERRAMIENTAS COMPUTACIONALES LIGADAS CON LENGUAJES - Ejemplos


* Editores de estructuras: Un editor de estructuras toma como entrada una secuencia de rdenes para construir un programa fuente. El editor de estructuras no slo realiza las funciones de creacin y modificacin de textos de un editor de textos ordinario, sino que tambin analiza el texto del programa, imponiendo al programa fuente una estructura jerrquica apropiada. De esa manera, el editor de estructuras puede realizar tareas adicionales tiles para la preparacin de programas Concepto encontrado en el libro de Compiladores de Addison Wesley, a mi punto de vista estos editores de estructura son los que se encarga de llevar el orden de las palabras, valla el acomodo y comprobar si la entrada est formada correctamente. * Impresoras estticas: Una impresora esttica analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible Concepto encontrado en el libro de Compiladores de Addison Wesley. * Verificadores estticos: este verificador lee un programa, lo analiza e intenta descubrir errores potenciales sin correr el programa, algo muy parecido a la correccin de los editores de texto como Word. Un verificador esttico puede detectar si hay partes de un programa que nunca se podrn ejecutar o si cierta variable se usa antes de ser definida nos dice Addison Wesley.

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

En el proceso de traduccin se identifican dos fases principales:

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

Podemos distinguir entre tres 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

Anlisis sintctico Comprueba los valores unitarios del programa (tokens):

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

Anlisis Semntico Comprueba la validez del programa Comprobacin de tipos en operadores

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

Generacin de cdigo objeto

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

Especificacin lxica: Tokens mediante expresiones regulares

Especificacin sintctica: Gramticas independientes del contexto

Especificacin semntica: Lenguaje natural