Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
2Activity
0 of .
Results for:
No results containing your search query
P. 1
ANALIZADOR SINTÁCTICO

ANALIZADOR SINTÁCTICO

Ratings: (0)|Views: 231|Likes:
Published by Grace Laguna

More info:

Published by: Grace Laguna on May 04, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/14/2014

pdf

text

original

 
 
PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR SEDE IBARRAESCUELA DE INGENIERIACARRERA DE SISTEMAS
NOMBRE:
Grace Laguna
FECHA:
03-05-2013
NIVEL:
Quinto
ANALIZADOR SINTÁCTICO
EL PAPEL DEL ANALIZADOR SINTÁCTICO
En este modelo de compilador, el analizador sintáctico obtiene una cadena de componentesléxicos del analizador léxico, y comprueba si la cadena puede ser generada por la gramática dellenguaje fuente. Se supone que el analizador sintáctico informará de cualquier error de sintaxis demanera inteligible. También debería recuperarse de los errores que ocurren frecuentemente parapoder continuar procesando el resto de su entrada.Los métodos empleados generalmente en los compiladores se clasifican como descendentes oascendentes. Como sus nombres indican, los analizadores sintácticos descendentes construyenárboles de análisis sintáctico desde arriba (la raíz) hasta abajo (las hojas), mientras que losanalizadores sintácticos ascendentes comienzan en las hojas y suben hacia la raíz. En ambos casos,se examina la entrada al analizador sintáctico de izquierda a derecha, un símbolo a la vez.
ANÁLISIS SINTÁCTICO ASCENDENTE Y DESCENDENTE
 
Análisis sintáctico ascendente
Los
analizadores sintácticos ascendentes
construyen el árbol sintáctico a partir de las hojas, paso apaso hasta llegar a la raíz. Es decir parten de los distintos tokens de la sentencia a analizar, y pormedio de reducciones llegan al símbolo inicial de la gramática. Se llaman
reducciones
, paraindicar que se efectúan en sentido contrario a las producciones de la gramática. El principalproblema que se plantea en el análisis ascendente es el del retroceso, que se traduce en la elecciónde un pivote para realizar la reducción. Para salvar este inconveniente se definieron distintos tiposde gramáticas entre las cuales las más utilizadas son las
LR(k)
. Los analizadores sintácticosascendentes que reconocen lenguajes descritos por gramáticas LR(k), toman sus decisiones enfunción de los k tokens inspeccionados por delante (
lookaheads 
) de cada vez en la cadena de
 
entrada, tomados de izquierda a derecha (
Left to right 
), realizándose el análisis por derivacionesmás a la derecha en sentido inverso (
Rightmost 
). Las gramáticas LR(k) describen la mayor parte delos lenguajes libres de contexto, y son mucho menos restrictivas que las gramáticas LL(k). Sinembargo la complejidad de los analizadores sintácticos LR(k), hace que la mayor parte de estos seconstruyan por medio de herramientas software como por ejemplo el
 yacc 
incluido en el sistemaoperativo UNIX.
 
Análisis sintáctico descendente
Los analizadores sintácticos descendentes construyen el árbol sintáctico a partir del símbolo inicialde la gramática, hasta llegar a los distintos tokens, que constituyen la sentencia a analizar. Esdecir, se parte del símbolo inicial de la gramática y se van aplicando las distintas produccioneshasta llegar a formar la sentencia. En el ejemplo de la figura 1, el árbol sintáctico se obtiene apartir de las reglas de derivación de <expresión> hasta llegar a la expresión. El orden dederivación es importante, siempre se deriva primero el no terminal situado más a la izquierdasegún se mira el árbol (derivaciones más a la izquierda).Los principales problemas que se plantean en el análisis sintáctico descendente son dos: elretroceso (en inglés backtracking) y la recursividad a izquierdas.
 
El
retroceso
, se produce cuando se eligen mal las producciones para alcanzar lasentencia a analizar, y debe de darse marcha atrás en el proceso de análisis, para elegirotra alternativa. El retroceso se repite hasta que se ha elegido la alternativa correcta;evidentemente esto ralentiza enormemente el proceso de análisis.
 
La
recursividad a izquierdas
, se deriva de que en general se elige el criterio de tomarsiempre en primera opción la alternativa más a la izquierda. Si en la gramática existenproducciones de la forma: entonces el analizador sintáctico se introduce en un bucleinfinito, del que no puede salir.Para evitar la recursividad a izquierdas y el retroceso, las gramáticas deben de cumplir unasdeterminadas propiedades, dando lugar a una clasificación de las gramáticas. Los lenguajes deprogramación que se pueden describir mediante uno de estos tipos de gramáticas, llamadas
LL(k),
se pueden analizar en forma descendente sin retroceso, y sin recursividad a izquierdas. Las gramáticas LL(k) realizan el análisis descendente determinista, por medio del reconocimiento de lacadena de entrada de izquierda a derecha (
Left to right 
) y que va tomando las derivaciones más a
 
la izquierda (
Leftmost 
) con sólo mirar los k tokens situados a continuación de donde se halla. En general se utilizan las gramáticas LL(1) para la descripción de lenguajes, que sólo miran un token.También existe una herramienta denominada
 Jack 
para generar analizadores sintácticosdescendentes en lenguaje Java, a partir de unas especificaciones gramaticales del estilo de lasherramientas clásicas de análisis sintáctico ascendente
lex 
 y 
 yacc 
. Se caracteriza por:
 
Genera código en lenguaje Java.
 
Las especificaciones léxicas, sintácticas y semánticas van en un fichero único
 
Permite el uso de cualquier carácter Unicode.
 
Realiza análisis descendente utilizando una gramática LL(k), donde se puede fijar K, es decir elnúmero de tokens que tiene que mirar hacia adelante (
lookahead 
) para determinar la regla dela gramática que aplica.
 
En el análisis semántico utiliza tanto atributos sintetizados como heredados.
ANÁLISIS SEMÁNTICO Y TRATAMIENTO DE ERRORES
 
Análisis semántico
Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico.El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintácticopara comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación decódigo.En compiladores de un solo paso, las llamadas a las rutinas semánticas se realizan directamentedesde el analizador sintáctico y son dichas rutinas las que llaman al generador de código. Elinstrumento más utilizado para conseguirlo es la gramática de atributos.En compiladores de dos o más pasos, el análisis semántico se realiza independientemente de la generación de código, pasándose información a través de un archivo intermedio, quenormalmente contiene información sobre el árbol sintáctico en forma linealizada (para facilitar sumanejo y hacer posible su almacenamiento en memoria auxiliar).En cualquier caso, las rutinas semánticas suelen hacer uso de una pila (la pila semántica) quecontiene la información semántica asociada a los operandos (y a veces a los operadores) en formade
registros semánticos 
.
 
Tratamiento de errores

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->