Está en la página 1de 14

UNIVERSIDAD NACIONAL DEL SANTA

FACULTAD DE INGENIERA E.A.P. INGENIERA DE SISTEMAS E INFORMTICA

TRABAJO DE INVESTIGACION
(Segunda Unidad)
CURSO : Teora de Lenguaje y Compiladores DOCENTE : Dra. Diana Muoz Casanova INTEGRANTES : CICLO : Aguirre Corales Leydi. Alejandro Palomino Carlos. Briones Vsquez Rosa. Cabanillas Castillo Alex. Escobedo Contreras Gisela Espinoza Flores Magaly. V

2011

Universidad Nacional del Santa

Ing. Sistemas e Informtica

TEORIA DE LENGUAJE Y COMPILADORES


Fecha Inicio: 06/06/2011 Fecha Entrega: 11/06/2011 1. EN QU CONSISTE LA NOTACIN BNF Notacin BNF (Backus-Naur Form) Definicin La notacin de Backus-Naur, tambin conocida por sus denominaciones inglesas BackusNaur form (BNF), Backus-Naur formalism o Backus normal form, es una meta sintaxis usada para expresar gramticas libres de contexto: es decir, una manera formal de describir lenguajes formales. El BNF se utiliza extensamente como notacin para las gramticas de los lenguajes de programacin de la computadora, de los sistemas de comando y de los protocolos de comunicacin, as como una notacin para representar partes de las gramticas de la lengua natural (por ejemplo, el metro en la poesa de Venpa). La mayora de los libros de textos para la teora o la semntica del lenguaje de programacin documentan el lenguaje de programacin en BNF. Algunas variantes, tales como la Augmented Backus-Naur form (ABNF) y la Extended BackusNaur Form (EBNF), tienen su propia documentacin. Historia La idea de transcribir la estructura del lenguaje con reglas de reescritura se remontan cuando menos al trabajo del gramtico indio Panini (hacia el 460 a. C.), que la utiliz en su descripcin de la estructura de palabras del idioma snscrito (algunos incluso han sugerido renombrar BNF a Forma Panini-Backus). Lingstas estadounidenses como Leonard Bloomfield y Zellig Harris llevaron esta idea un paso ms adelante al tratar de formalizar el lenguaje y su estudio en trminos de definiciones formales y procedimientos (1920-1960). Se remonta al ao 60, en que John Backus la us para describir el lenguaje Algol. De hecho, es el acrnimo de Backus Naur Form, en homenaje a la destacada contribucin de Backus (coordinador del grupo que desarroll el lenguaje FORTRAN), y de Peter Naur (coordinador del grupo que desarroll el lenguaje Algol) al diseo de lenguajes de programacin. Noam Chomsky, maestro de lingstica de alumnos de teora de la informacin del MIT, combin la lingstica y las matemticas, tomando esencialmente el formalismo de Axel Thue como la base de su descripcin de la sintaxis del lenguaje natural. Tambin introdujo
Teora de Lenguaje y Compiladores Pgina 2

Universidad Nacional del Santa

Ing. Sistemas e Informtica

una clara distincin entre reglas generativas (de la gramtica libre de contexto) y reglas transformativas (1956). John Backus, un diseador de lenguajes de programacin de IBM, adopt las reglas generativas de Chomsky para describir la sintaxis del nuevo lenguaje de programacin IAL, conocido en la actualidad como ALGOL 58 (1959), presentando en el primer Congreso de Computacin Mundial (World Computer Congress) el artculo "The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference". Peter Naur, en su reporte sobre ALGOL 60 de 1963, identific la notacin de Backus como la Forma Normal de Backus (Backus Normal Form), y la simplific para usar un conjunto de smbolos menor, pero a sugerencia de Donald Knuth, su apellido fue agregado en reconocimiento a su contribucin, reemplazando la palabra "Normal" por Naur, dado que no se trata de una forma normal en ningn sentido, a diferencia, por ejemplo de la Forma Normal de Chomsky. Estructura: Representacin: Una especificacin de BNF es un sistema de reglas de derivacin, escrito como: <Smbolo>::=<expresin con smbolos> donde <smbolo> es un no terminal, y la expresin consiste en secuencias de smbolos o secuencias separadas por la barra vertical, '|', indicando una opcin, el conjunto es una posible substitucin para el smbolo a la izquierda. Los smbolos que nunca aparecen en un lado izquierdo son terminales. Metasimbolos: ::= de definicin(el esquema de la derecha desarrolla al elemento de la izquierda) de alternativa (se puede elegir nicamente uno de los elementos que separan) {} de repeticin (los elementos que incluyen pueden repetirse cero o ms veces) [] de opcin (los elementos que incluyen pueden utilizarse no) () de agrupacin (sirven para agrupar los elementos que incluyen)

Teora de Lenguaje y Compiladores

Pgina 3

Universidad Nacional del Santa


Valores y tipos:

Ing. Sistemas e Informtica

Dato: elemento de informacin que puede tomar un valor entre varios posibles. Constante: dato cuyo valor siempre es fijo. Tipo de datos: clase de valores que puede tomar un dato. Ejemplo Como ejemplo, considere este BNF para una direccin postal de los EE.UU. <direccin postal>::=<nombre><direccin><apartado postal> <personal>::=<primer nombre>|<inicial>"." <nombre>::=<personal><apellido>[<trato>]<EOL> |<personal><nombre> <direccin>::=[<dpto>]<nmero de la casa><nombre de la calle><EOL> <apartado postal>::=<ciudad>","<cdigo estado><cdigo postal><EOL> Esto se traduce a espaol de la siguiente manera:
y y y

Una direccin postal consiste en un nombre, seguido por una direccin, seguida por un apartado postal. Una parte "personal" consiste en un nombre o una inicial seguido(a) por un punto. Un nombre consiste de: una parte personal seguida por un apellido seguido opcionalmente por una jerarqua o el trato que se la da a la persona (Jr., Sr., o nmero dinstico) y un salto de lnea (end-of-line), o bien una parte personal seguida por un nombre (esta regla ilustra el uso de la repeticin en BNFs, cubriendo el caso de la gente que utiliza mltiples nombres y los nombres medios o las iniciales). Una direccin consiste de una especificacin opcional del departamento, seguido de un nmero de casa, seguido por el nombre de la calle, seguido por un salto de lnea (end-of-line). Un apartado postal consiste de una ciudad, seguida por una coma, seguida por un cdigo del estado (recuerde que es un ejemplo que ocurre en EE.UU.), seguido por un cdigo postal y este seguido por un salto de lnea (end-of-line).

Observe que muchas cosas (tales como el formato de una parte personal, de una especificacin del apartamento, o cdigo postal) estn dejadas sin especificar aqu. Si es necesario, pueden ser descritas usando reglas adicionales de BNF, o dejadas como abstraccin si es inaplicable para el propsito actual.

Teora de Lenguaje y Compiladores

Pgina 4

Universidad Nacional del Santa


2. QU ES PARSING?

Ing. Sistemas e Informtica

Un analizador sintctico (en ingls parser) es una de las un compilador que transforma su entrada en un rbol de derivacin.

partes

de

El anlisis sintctico convierte el texto de entrada en otras estructuras (comnmente rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua implcita de la entrada. Un analizador lxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintctico para construir la estructura de datos, por ejemplo un rbol de anlisis o rboles de sintaxis abstracta. El anlisis sintctico tambin es un estado inicial del anlisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexin gramatical, como los idiomas romances o el latn. Los lenguajes habitualmente reconocidos por los analizadores sintcticos son los lenguajes libres de contexto. Cabe notar que existe una justificacin formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autmata de pila, de modo que todo analizador sintctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autmata de pila. Los analizadores sintcticos fueron extensivamente estudiados durante los aos 70 del siglo XX, detectndose numerosos patrones de funcionamiento en ellos, cosa que permiti la creacin de programas generadores de analizadores sintticos a partir de una especificacin de la sintaxis del lenguaje en forma Backus-Naur por ejemplo, tales y como yacc, GNU bison y javaCC.

3. BUSCAR LOS SIGNIFICADOS DE LAS DRAMTICAS LR, LL,SLR Y LARL y GRAMATICAS LR(del ingles left to right)

Los mtodos de anlisis sintctico LR permiten reconocer la mayora de las construcciones de los lenguajes de programacin. Son mtodos muy potentes, con mayor poder de reconocimiento que los mtodos LL (Las gramticas LL son un subconjunto de las gramticas LR). Las gramticas LR(k) se caracterizan porque: L: Procesamos la cadena de entrada de izquierda a derecha (from left-to-right) R: proporcionan la derivacin ms a la derecha de la cadena de entrada en orden inverso (rigth-most derivation) k: se examinan k-smbolos de la entrada por anticipado para tomar la decisin sobre la accin a realizar.

Teora de Lenguaje y Compiladores

Pgina 5

Universidad Nacional del Santa

Ing. Sistemas e Informtica

Ventajas: es un mtodo potente que permite reconocer la mayora de las construcciones de los lenguajes de programacin con k=0,1. Es un mtodo sin retroceso y por tanto determinista. Desventajas: los mtodos son difciles de comprender, de implementar a mano y de realizar una traza. Necesidad de usar generados automticos de analizadores sintcticos LR. Por ejemplo: Bison (para Linux) y Yacc (yet another compiler compiler) para Unix. y GRAMTICAS LL

Una gramtica LL es aquella en la que su tabla de chequeo de sintaxis no posee entradas mltiples, o sea, es suficiente con examinar slo un smbolo a la entrada, para saber qu regla aplicar. Toda gramtica reconocible mediante el mtodo de los diagramas de Conway es LL El mtodo consiste en seguir un algoritmo partiendo de: - La cadena a reconocer, junto con un apuntador, que nos indica cual es el token actual. - Una pila de smbolos (terminales y no terminales) - Una tabla asociada de forma unvoca a una gramtica. En esta asignatura no vamos a ver como calcular dicha tabla. La cadena de entrada acabar en el smbolo $, que consideramos como si fuese un EOF( End Of File - Fin de Fichero). GRAMATICAS SLR (del ingles Simple LR)

Este tipo de analisis usa el AFD construido a partir de elementos LR(0) y usa el token de la cadena de entrada para determinar el tipo de accion a realizar. Este metodo consulta el token de la entrada antes de realizar un desplazamiento para tener seguro que existe una transicion correspondienten el estado en el que se encuentra el analizador (sino ser a un error) y en el caso de que se tenga que hacer una reduccion se comprueba que el token actual pertenece al conjunto de SIG del no-terminal al que se quiere reducir (sino ser a un error). Limitaciones del analisis SLR: El anlisis SLR es simple y eficiente. Es capaz de describir prcticamente todas las estructuras de los lenguajes de programacion. Pero existen algunas situaciones donde este tipo de analisis no es suficientemente poderoso y falla. Veamos un ejemplo simplificado de la gramatica en Pascal que genera las llamadas a procedimientos y las asignaciones de expresiones a variables.

Teora de Lenguaje y Compiladores

Pgina 6

Universidad Nacional del Santa


y

Ing. Sistemas e Informtica

GRAMATICA LALR (del ingles Look-Ahead LR, con s mbolo de anticipacion).

Una modificacion del metodo LR(1), llamada metodo LALR mantiene el poder del LR(k) y preserva la eficiencia del SLR(1). El anlisis LALR se basa en la observacion de que en muchos casos el tamao grande del AFD de items LR(1) se debe a la existencia de muchos estados diferentes que tienen igual la primera componente, los items LR(0), y difieren solo de la segunda componente, los s mbolos de preanalisis. Lo que haremos es identificarlos como un unico estado combinando los s mbolos de preanalisis. Si el proceso esta bien hecho, llegaremos a un automata como el de items LR(0), excepto que cada estado tiene s mbolos de preanalisis. El algoritmo de analisis LALR(1) es identico al LR(1). 4. AVERIGUAR COMO SE DA EL PROCESO DE COMPILACIN EN LA ACTUALIDAD. El proceso de compilacin se puede dividir en una serie de fases, que pueden llevarse a cabo simultneamente o consecutivamente y cada una de las cuales transforma el programa fuente de una representacin en otra front end = a. lxico + a. sintctico + a. semntico back end = opt. de cod. intermedio + gen. de cod. + opt. de cod (middle end = generacin de cdigo intermedio) Si el front end (etapa de anlisis o etapa inicial), que comprende aquellas fases que dependen principalmente del lenguaje fuente, se disea adecuadamente. Es posible usar distintos back end (etapa de sntesis o etapa final), que incluye las fases que dependen de la mquina objeto, de modo que se puede obtener cdigo para distintas mquinas. Etapa de anlisis: La etapa de anlisis (front end o etapa inicial) agrupa aquellas fases que dependen principalmente del lenguaje fuente, y comprende: Etapa de sntesis El analizador lxico (tambin llamada scanner): agrupar los caracteres individuales en entidades lgicas. El analizador sintctico (tambin llamado parser) analiza la estructura general de todo el programa, agrupando las entidades simples identificadas por el scanner en construcciones mayores, como sentencias, bucles, rutinas, que componen el programa completo. Normalmente se utiliza la representacin de rboles sintcticos para reflejar dicha estructura.
Teora de Lenguaje y Compiladores Pgina 7

Universidad Nacional del Santa

Ing. Sistemas e Informtica

Una vez determinada la estructura del programa se puede analizar su significado (semntica) mediante el analizador semntico. Se determina que variables almacenaran enteros, cuales nmero en coma flotante, si el acceso a los arrays cae dentro del rango fijado en su definicin. Etapa de sntesis: La etapa de sntesis (back end o etapa final) agrupa aquellas fases que dependen principalmente de la mquina objetivo, y comprende: El optimizador de cdigo intermedio que transforma la representacin intermedia en otra equivalente pero ms eficiente. El generador de cdigo genera un programa equivalente para su ejecucin en la mquina objetivo, aadindole posiblemente rutinas de biblioteca y cdigo de inicializacin. Finalmente puede haber un optimizador de cdigo para mejorar an ms el cdigo generado. El manejador de errores y el administrador de la tabla de smbolos: Un compilador tiene que tener un determinado comportamiento ante programas errneos. Este proceso se agrupa en una fase llamada manejador de errores. Cada una de las fases anteriores interacciona con el manejador de errores. Otro elemento en la compilacin es la tabla de smbolos ala que acceden cada una de las fases a travs del administrador de la tabla de smbolos. En la tabla de smbolos se almacena informacin sobre los distintos identificadores. (De variables, constantes, funciones y procedimientos, como: tipo, memoria asignada, mbito, alcance. Las fases anteriores introducen esta informacin sobre los identificadores en la tabla de smbolos y despus la utilizan de varias formas).

Teora de Lenguaje y Compiladores

Pgina 8

Universidad Nacional del Santa


Proceso de compilacin

Ing. Sistemas e Informtica

Entorno de trabajo de un compilador Construccin de un compilador:

Teora de Lenguaje y Compiladores

Pgina 9

Universidad Nacional del Santa

Ing. Sistemas e Informtica

En la construccin de un compilador se puede proceder siguiendo varios enfoques, pudindose escribir: en lenguaje ensamblador, con lo que se consiguen compiladores muy eficientes pero difciles de mantener. en un lenguaje de alto nivel, con lo que se hace ms fcil el mantenimiento, pero an requiere mucho tiempo de desarrollo. utilizando herramientas de construccin de compiladores como flex, bison, JavaCC, JJTree, JTB.

Herramientas: Generadores de analizadores sintcticos Producen analizadores sintcticos partiendo de una gramtica independiente del contexto (ej. yacc, bison, JavaCC) Generadores de analizadores lxicos Generan automticamente analizadores lxicos partiendo de una especificacin basada en expresiones regulares (ej. lex, flex, JavaCC) Generadores de rboles sintcticos Proporcionan medios para facilitar la creacin de rboles sintcticos (ej. JJTree, JTB) Dispositivos de traduccin dirigida por la sintaxis Producen grupos de rutinas que recorren el rbol de anlisis sintctico generando cdigo intermedio Generadores automticos de cdigo Toman un conjunto de reglas que definen la traduccin de cada operacin del lenguaje intermedio al lenguaje mquina objeto. La tcnica fundamental es la concordancia de plantillas. Dispositivos para anlisis de flujo de datos Permiten la optimizacin de cdigo en funcin de una recoleccin de informacin sobre la forma en que se transmiten los valores de una parte de un programa a cada una de las otras partes. Uso de compilacin JIT en emuladores Al momento de emular la CPU, el programa traduce el cdigo mquina del software emulado en cdigo nativo de la mquina emuladora y lo escribe en una cach con permisos de ejecucin y escritura (generalmente en UNIX o en sistemas compatibles con POSIX se asigna este permiso con la funcin mprotect()). La traduccin se detiene cuando se encuentra cualquier instruccin que provoque un cambio en el contador de programa, como una interrupcin, una instruccin de salto
Teora de Lenguaje y Compiladores Pgina 10

Universidad Nacional del Santa

Ing. Sistemas e Informtica

o una llamada a subrutina y es interpretado como un retorno de rutina al compilador o a otras tareas del programa. Luego el emulador ejecuta el cdigo contenido en la cach. La ventaja de este mtodo es que si el tamao de la cach es grande, el emulador no necesita recompilar el cdigo, lo que aumenta mucho la velocidad. Sin embargo, surgen problemas cuando el programa emulado escribe su cdigo, y es necesario volver a recompilar dicho cdigo, a menos que el cdigo emulado tenga permisos de solo lectura, por ejemplo en sistemas UNIX con memoria protegida. 5. MENCIONAR QUE ES JAVA? COMPILADOR, INTERPRETE. En java El compilador que crea cdigos de byte (Bytecode) que se enva al visualizador solicitado y se interpreta en la mquina que posee un intrprete de Java o dispone de un visualizador que funciona con Java. El compilador Java traduce cada fichero fuente de clases a cdigo de bytes (Bytecode), que puede ser interpretado por todas las mquinas que den soporte a un visualizador de que funcione con Java. Este Bytecode no es especfico de una mquina determinada, por lo que no se compila y enlaza como en el ciclo clsico, sino que se interpreta Al ser cdigo interpretado, la ejecucin no es tan rpida como el cdigo compilado para una plataforma particular. El compilador Java suele ofrecer la posibilidad de compilar Bytecode en cdigo mquina de determinadas plataformas, y segn Sun este cdigo resultar de una eficacia similar a compilaciones de C y C++. 6. MENCIONAR EL NOMBRE DE 5 COMPILADORES ACTUALES y y y y y En Turbo C de Borland es: tcc hola.c En C++ de Borland: bcc hola.c En Visual C de Microsoft: cl hola.c En GNU gcc: gcc hola.c o cc hola.c El C de Zortech: ztc hola.c

Teora de Lenguaje y Compiladores

Pgina 11

Universidad Nacional del Santa

Ing. Sistemas e Informtica

CONCLUSIONES
La notacin BNF suele usarse para describir sintcticamente lenguajes de programacin. Se remonta al ao 60, en que John Backus la us para describir el lenguaje Algol. De hecho, es el acrnimo de Backus Naur Form, en homenaje a la destacada contribucin de Backus (coordinador del grupo que desarroll el lenguaje FORTRAN), y de Peter Naur (coordinador del grupo que desarroll el lenguaje Algol) al diseo de lenguajes de programacin. Un analizador sintctico (en ingls parser) es una de las un compilador que transforma su entrada en un rbol de derivacin. partes de

El proceso de compilacin en la actualidad, se da en diferentes etapas, las cuales son: etapa de anlisis, etapa de sntesis, adems usa un manejador de errores y administrador de tabla de smbolos, adems de algunas herramientas generadoras de analizadores sintcticos, lxicos, etc. Java cumple funciones de compilador e intrprete ya que el compilador traduce cada fichero fuente de clases a cdigo de bytes que puede ser interpretado por todas las maquinas que den soporte a un visualizador que funcione con java. Este Bytecode no es especfico de una mquina determinada, por lo que no se compila y enlaza como en el ciclo clsico, sino que se interpreta. Las gramticas libres de contexto permiten describir la mayora de los lenguajes de programacin, de hecho, la sntaxis de la mayora de lenguajes de programacin est definida mediante gramticas libres de contexto. Por otro lado, estas gramticas son suficientemente simples como para permitir el diseo de eficientes algoritmos de anlisis sintctico que, para una cadena de caracteres dada determinen como puede ser generada desde la gramtica. Los analizadores LL y LR tratan restringidos subconjuntos de gramticas libres de contexto.

Teora de Lenguaje y Compiladores

Pgina 12

Universidad Nacional del Santa LINKOGRAFIA

Ing. Sistemas e Informtica

WIKIPEDIA, La enciclopedia libre Tema: Notacion de Backus-Naur Disponible en: http://es.wikipedia.org/wiki/Notacion_de_Backus-Naur

DEPI, pagina web Tema: Notacion BNF Disponible en: http://www.depi.itch.edu.mx/apacheco/teoria/bnf.htm GOOGLE, Archivos.ppt Tema: Notacion BNF (Backus-Naur Form) Disponible en: http://www.uned.es/ca-alziravalencia/nova/tutorias/materialesCentro/igestion/prog/PROG1_tema2.pdf

WIKIPEDIA, La enciclopedia libre Tema: Analizador Sintctico Disponible en: http://es.wikipedia.org/wiki/Analizador_sint%C3%A1ctico

VNISERSITAT DE VALNCIA, Departamento d Informatica Tema: Gramaticas Disponible en: http://informatica.uv.es/


Teora de Lenguaje y Compiladores Pgina 13

Universidad Nacional del Santa


GOOGLE, Archivos.ppt Tema: Introduccion a la compilacion Disponible en:

Ing. Sistemas e Informtica

http://pisuerga.inf.ubu.es/cgosorio/ALeF/UD1/compilacion.pdf

INFO JAVA Tema: Que es Java. Caracteristicas de Jva como Lenguaje de programacin Disponible en: http://www.infor.uva.es/~jmrr/2007/TGP/DOC/JAVA.html

WIKILIBROS, Libros libres para un mundo libre Teama: Programacin en C, Compilar un programa Disponible en: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Compilar_un_programa

Teora de Lenguaje y Compiladores

Pgina 14

También podría gustarte