22.11.2014 Views

Procesadores de Lenguaje Tema 4: Analizador sintáctico ...

Procesadores de Lenguaje Tema 4: Analizador sintáctico ...

Procesadores de Lenguaje Tema 4: Analizador sintáctico ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Analizador</strong> <strong>sintáctico</strong><br />

Conceptos: clases <strong>de</strong> estrategias <strong>de</strong> análisis <strong>sintáctico</strong><br />

• Segundo enfoque:<br />

• A partir <strong>de</strong> la ca<strong>de</strong>na <strong>de</strong> “tokens” <strong>de</strong>vueltos por el analizador morfológico, se<br />

comienza a leer intentando i<strong>de</strong>ntificar las partes <strong>de</strong>rechas <strong>de</strong> las reglas <strong>de</strong> la<br />

gramática.<br />

• Cuando esto ocurre se sustituye la ca<strong>de</strong>na <strong>de</strong> “tokens” por el no terminal <strong>de</strong> la<br />

parte izquierda <strong>de</strong> la regla y se continúa el mismo análisis teniendo en cuenta<br />

esta sustitución<br />

• Si en algún momento ninguna secuencia <strong>de</strong> la ca<strong>de</strong>na se correspon<strong>de</strong> con la<br />

parte <strong>de</strong>recha <strong>de</strong> ninguna regla tal vez se tenga que <strong>de</strong>shacer alguna elección<br />

para probar si con otra <strong>de</strong>cisión se consigue terminar el análisis<br />

• Cuando se han probado sistemáticamente todas las opciones sin po<strong>de</strong>r terminar<br />

el análisis se concluye que el programa es sintácticamente incorrecto.<br />

• La otra forma <strong>de</strong> terminar el análisis es cuando se consigue obtener por el<br />

mecanismo <strong>de</strong>scrito el axioma <strong>de</strong> la gramática.<br />

• En este último caso se concluye que el programa es sintácticamente correcto.<br />

<strong>Analizador</strong> <strong>sintáctico</strong><br />

Conceptos: clases <strong>de</strong> estrategias <strong>de</strong> análisis <strong>sintáctico</strong><br />

• Al primer enfoque, por la manera y el or<strong>de</strong>n en que proce<strong>de</strong> se le conoce también<br />

como análisis <strong>de</strong>scen<strong>de</strong>nte o “top down”.<br />

• Por la misma razón al segundo enfoque se le conoce también como análisis<br />

ascen<strong>de</strong>nte o “bottom up”.<br />

5<br />

6<br />

Análisis <strong>sintáctico</strong> <strong>de</strong>scen<strong>de</strong>nte<br />

Introducción<br />

• El alumno pue<strong>de</strong> imaginar alguna solución a este problema con las herramientas que<br />

ha adquirido en otras materias <strong>de</strong> la carrera.<br />

• Se está ante una situación en la que se <strong>de</strong>be encontrar una <strong>de</strong>rivación (secuencia <strong>de</strong><br />

aplicación <strong>de</strong> reglas <strong>de</strong> la gramática en lugares concretos) que lleve <strong>de</strong>s<strong>de</strong> el no<br />

terminal inicial (el axioma) hasta la situación final (el programa proporcionado como<br />

entrada)<br />

• A<strong>de</strong>más, el número <strong>de</strong> posibles <strong>de</strong>rivaciones es muy gran<strong>de</strong> (potencialmente infinito)<br />

• Esta situación pue<strong>de</strong> a los problemas <strong>de</strong> búsqueda <strong>de</strong> un camino que llevara <strong>de</strong> una<br />

situación inicial a otra final atravesando un espacio enorme <strong>de</strong> posibles situaciones.<br />

• Ya se ha estudiado en asignaturas como IA la existencia <strong>de</strong> estrategias generales<br />

(para cualquier problema) <strong>de</strong> búsqueda ciega y sus propieda<strong>de</strong>s <strong>de</strong> las que se<br />

mencionan algunas:<br />

• Las dos estrategias básicas son en anchura y en profundidad<br />

• En anchura siempre se pue<strong>de</strong> conseguir encontrar la solución óptima (aquella<br />

para la que se requiere un menor número <strong>de</strong> pasos)<br />

• En profundidad, excepto árboles infinitos, se suele tener oportunidad <strong>de</strong><br />

encontrar alguna solución con menos esfuerzo<br />

Análisis <strong>sintáctico</strong> <strong>de</strong>scen<strong>de</strong>nte<br />

“Top-down” con vuelta atrás lenta: conceptos<br />

• Podríamos consi<strong>de</strong>rar el análisis <strong>sintáctico</strong> top-down con vuelta atrás lenta como un<br />

caso particular <strong>de</strong> búsqueda ciega en profundidad (se <strong>de</strong>sempate <strong>de</strong> izquierda a<br />

<strong>de</strong>recha)<br />

• El criterio para <strong>de</strong>cidir si una regla es aplicable en una posición es la coinci<strong>de</strong>ncia <strong>de</strong><br />

esa posición con el no terminal que está en la parte izquierda <strong>de</strong> la regla.<br />

• No podremos continuar por un camino cuando tengamos terminales que discrepen<br />

con el programa (po<strong>de</strong>mos suponer el or<strong>de</strong>n <strong>de</strong> recorrido natural <strong>de</strong>l programa (<strong>de</strong><br />

izquierda a <strong>de</strong>recha)<br />

• Habremos terminado el proceso en dos situaciones:<br />

• Si el árbol <strong>de</strong> <strong>de</strong>rivación “se cierra” porque se ha llegado a eliminar todos los no<br />

terminales y se obtiene la misma secuencia <strong>de</strong> terminales <strong>de</strong>l programa. En este<br />

caso se ha construido un árbol <strong>sintáctico</strong> para el programa que resulta ser<br />

correcto<br />

• Si no se ha podido “cerrar” el árbol <strong>de</strong> <strong>de</strong>rivación pero se ha probado todas las<br />

reglas en cada posición y no se pue<strong>de</strong> aplicar ninguna otra opción. En ese caso<br />

se ha <strong>de</strong>mostrado que el programa es sintácticamente incorrecto.<br />

• Describiremos esta técnica mediante los siguientes ejemplos<br />

7<br />

8

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!