Vous êtes sur la page 1sur 12

1

INDICE DE CONTENIDO

4.1 INTRODUCCIN A LAS GRAMTICAS LIBRES DE CONTEXTO Y RBOLES DE DERIVACIN....3 GRAMTICA...3 AUTMATA3 RBOLES DE DERIVACION...4 4.2 DIAGRAMAS DE SINTAXIS.5 4.3 PRECEDENCIA DE OPERADORES5

Prioridad de operadores.5
4.4 ANALIZADOR SINTCTICO...6

Tipos de analizadores sintcticos..7 Analizador descendente (LL)7


4.5 ADMINISTRACIN DE TABLAS DE SMBOLOS...8 4.6 MANEJO DE ERRORES SINTCTICOS Y SU RECUPERACIN8

Tipos de errores..9 Estrategias de recuperacin de errores.9 Recuperacin en modo pnico10 Recuperacin a nivel de frase..10 Producciones de error..11 Correccin global.11
4.7 GENERADORES DE CDIGO PARA ANALIZADORES SINTCTICOS: YACC, BISON, BYACC, ANTLR, JAVACC11

4.1 INTRODUCCIN A LAS GRAMTICAS LIBRES DE CONTEXTO Y RBOLES DE DERIVACIN. Gramtica _ Permite definir un lenguaje mediante reglas que nos permiten generar o producir cadenas de un lenguaje. _ Estas gramticas son similares a las gramticas de los lenguajes naturales, pero mucho ms restrictivas y sencillas. _ Un ejemplo de regla de una gramtica: Oracin _ Sujeto predicado _ Estas reglas se suelen llamar reglas de reescritura: el smbolo Oracin se puede reescribir por el smbolo Sujeto seguido del smbolo Predicado. Autmata: Al igual que con los lenguajes regulares podemos definir un autmata como una mquina reconocedora de cadenas (palabras) de un determinado lenguaje. Los autmatas con los que trabajaremos en este tema son algo ms complejos que los AF. UN EJEMPLO ORACIN SUJETO PREDICADO | PREDICADO SUJETO ARTCULO NOMBRE ARTICULO el | la NOMBRE casa | nio

PREDICADO VERBO COMPLEMENTO VERBO corre | es COMPLEMENTO bien | obediente | bonita

RBOLES DE DERIVACION Derivaciones por la izquierda y derecha: Existen bsicamente dos formas de describir como en una cierta gramtica una cadena puede ser derivada desde el smbolo inicial. La forma ms simple es listar las cadenas de smbolos consecutivas, comenzando por el smbolo inicial y finalizando con la cadena y las reglas que han sido aplicadas. Si introducimos estrategias como reemplazar siempre el no terminal de ms a la izquierda primero, entonces la lista de reglas aplicadas es suficiente. A esto se le llama derivacin por la izquierda. Por ejemplo, si tomamos la siguiente gramtica: (1) S S + S (2) S 1

4.2 DIAGRAMAS DE SINTAXIS Es otra forma (al igual que los rboles de derivacin) de especificar gramticas del tipo. La caracterstica de este esquema es que permite ver las derivaciones al Instante de que ocurren. Todo diagrama de sintaxis posee un origen y un destino, que no se suelen representar explcitamente, sino que se asume que el origen se encuentra a la izquierda del diagrama y el destino a la derecha. Cada arco con origen en " y destino en $ representa que el smbolo " puede ir seguido del $ (pudiendo ser " y $ tanto terminales como no terminales). De esta forma todos los posibles caminos desde el inicio del grafo hasta el final, representan formas sentenciales vlidas. Demostraremos que los diagramas de sintaxis permiten representar las mismas gramticas que la notacin BNF, por induccin sobre las operaciones bsicas de BNF: 4.3 PRECEDENCIA DE OPERADORES La precedencia de operadores es de vital importancia en el proceso de anlisis sintctico ya que nos representar la forma en que debe construirse el rbol de derivacin. En aritmtica existen prioridades, por ejemplo: * y / tienen preferencia sobre + y -. () Indican la mxima prioridad. Prioridad de operadores La instruccin a = b + c / 2 en la mayora de los lenguajes no se evala de la forma a = (b + c) /2, sino de la forma a = b + (c/2) La forma de evaluacin depende de cmo se construyan los operadores, ya sea en infijo, postfijo o prefijo. Las operaciones se realizan de abajo hacia arriba.
5

4.4 ANALIZADOR SINTCTICO Un analizador sintctico (Parser) es un programa que reconoce si una o varias cadenas de caracteres forman parte de un determinado lenguaje. Los lenguajes habitualmente reconocidos por los analizadores sintcticos son los lenguajes libres de contexto. 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 sintcticos a partir de una especificacin de la sintaxis del lenguaje, tales y como YACC, GNU bison y javacc. Es el proceso de determinar si una cadena dada puede ser generada por una gramtica. Los analizadores sintcticos de lenguajes de programacin suele hacerse de izquierda a derecha, viendo un componente lxico a la vez Los analizadores pueden clasificarse dependiendo de la forma en como se construyen los nodos del rbol de derivacin sintctico: ascendentes y descendentes. Las gramticas se pueden expresar en forma BNF (Backus-Naur Form). El anlisis sintctico impone una estructura jerrquica. id1 :=id2 +id3 *60

Tipos de analizadores sintcticos

LL (left to left) leen la cadena de izquierda a derecha y derivan por la izquierda LR (left to right) SaA AaBbC Bb Cc Analizador descendente (LL) Existen diferentes mtodos de anlisis sintctico. La mayora caen en una de dos categoras: ascendentes y descendentes.Los ascendentes construyen el rbol desde las hojas hacia la raz. Los descendentes lo hacen en modo inverso. Un analizador ampliamente utilizado se denomina mtodo de anlisis predictivo descendente recursivo que es muy sencillo. Derivacin izquierda: SAaaaBbCaabbCaabbc (1234) SaAaaBbCaaBbcaabbc (3421) LL(k) traductores top-down Un anlisis anticipado de k caracteres
7

.SaS|cA AbA|cB|vacia BcB|a| vacia Construir cadena acbb SaS o ScA; al anticipar el primer smbolo L={anabcn | n>0} SaSc|aabc Se requiere una anticipacin de por los menos tres smbolos LL(3) SaaAc ASc|abc LL(1)

4.5 ADMINISTRACIN DE TABLAS DE SMBOLOS La tabla de smbolos se crea durante la fase de anlisis lxico a travs de los componentes lxicos, pero en el proceso de anlisis sintctico sufren algunas Modificaciones. Generalmente se agregan valores de tipo y significado para el anlisis sintctico. 4.6 MANEJO DE ERRORES SINTCTICOS Y SU RECUPERACIN Si los traductores tuvieran que procesar programas correctas el proceso de implantacin se simplificara mucho.
8

Cmo debe de responder un compilador de pascal a un cdigo Fortran? Ningn mtodo de recuperacin de errores resuelve todos los problemas Tipos de errores Lxicos: como escribir mal un identificador, palabra clave u operador. Sintcticos: como una expresin aritmtica con parntesis no equilibrados. Semnticos: como un operador aplicado a un operadorando incompatible. Lgicos: como una llamada infinitamente recursiva La mayora de los errores se centra en la fase de anlisis sintctico. El manejador de errores debe: Informar la presencia de errores con claridad y exactitud. Recuperar de cada error con la suficiente rapidez como para detectar errores posibles. No debe retrasar de manera significativa el procesamiento de programas correctos. Debe indicar la lnea del error y algn mensaje informativo Estrategias de recuperacin de errores Modo Pnico Nivel de Frase Producciones de error Correccin global

Recuperacin en modo pnico Es el ms sencillo de implantar. El analizador sintctico desecha componentes lxicos hasta encontrar un carcter de sincronizacin. Estos caracteres son el punto y como (;) entre otros. Recuperacin en modo pnico int a.b,c; struct c { . } main() { int a; }

Recuperacin a nivel de frase Esta tcnica utiliza una correccin de caracteres adyacentes, ya sea por insercin, eliminacin o intercambio. Esta tcnica permite sustituir , por ;, etc. Son traductores que corrigen errores. Desafortunadamente para muchos casos no aplican por lo que no se utilizan demasiados.

10

Producciones de error Se pueden generar gramticas para generar producciones de error y as de esta forma seguir con el proceso. La dificultad radica en el sentido de encontrar esas reglas gramaticales para generar error. En algunos casos sera inclusiva ms extensa que la gramtica del propio lenguaje. for(i<3,> Correccin global Idealmente, sera recomendable que un traductor hiciera el mnimo de cambios para procesar una entrada invlida. Este algoritmo genera menores costos globales para realizar cambios. El problema radica en que el implementar estas estrategias son muy costosas en tiempo y espacio.

4.7 GENERADORES DE CDIGO PARA ANALIZADORES SINTCTICOS: YACC, BISON, BYACC, ANTLR, JAVACC. YACC (YET ANOTHER COMPILERCOMPILER): provee una herramienta general para describir la entrada de un programa de computacin. El usuario de YACC especifica las estructuras de su entrada, junto con el cdigo que ser invocado en la medida en que cada una de esas estructuras es reconocida. YACC/BISON YACC convierte esa especificacin en una subrutina que maneja el proceso de entrada. La subrutina de entrada producida por YACC llama a la rutina provista por el usuario para devolver el prximo tem bsico de la entrada.

11

GNU Bison es un generador de parsers de propsito general que convierte una descripcin gramatical desde una gramtica libre de contexto LALR en un programa en C para hacer el parser. Es utilizado para crear parsers para muchos lenguajes, desde simples calculadoras hasta lenguajes complejos. GNU Bison tiene compatibilidad con Yacc: todas las gramticas bien escritas para Yacc, funcionan en Bison sin necesidad de ser modificadas. Cualquier persona que est familiarizada con Yacc podra utilizar Bison sin problemas. Es necesaria experiencia con C para utilizar Bison.

12

Vous aimerez peut-être aussi