20.06.2013 Views

Acceso al documento en PDF - Biblioteca Nacional de Maestros

Acceso al documento en PDF - Biblioteca Nacional de Maestros

Acceso al documento en PDF - Biblioteca Nacional de Maestros

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Fig. 3 AFD usado para IR construcción <strong>de</strong>l an<strong>al</strong>izador Lexicográfico<br />

Se <strong>de</strong>finió una clase, a la que se llamó TScanner, capaz <strong>de</strong> cont<strong>en</strong>er todos los ‘datos y el<br />

comportami<strong>en</strong>to necesarios para soportar <strong>al</strong> an<strong>al</strong>izador lexicográfico. Para su implem<strong>en</strong>tación se siguió<br />

un método sistemático que a cada estado le correspon<strong>de</strong> un segm<strong>en</strong>to <strong>de</strong>, código. Si exist<strong>en</strong>, arcos<br />

s<strong>al</strong>i<strong>en</strong>do <strong>de</strong>l estado, <strong>en</strong>tonces su código lee un caracter y selecciona el arco a seguir; si es posible. Se<br />

usa una función miembro NextChar() para leer el próximo caracter <strong>de</strong> la <strong>en</strong>trada, avanzar el puntero <strong>al</strong><br />

caracter y <strong>de</strong>volver el caracter leído (Aho et <strong>al</strong> [1987]).<br />

2.2.1.2. El an<strong>al</strong>izador sintáctico<br />

El análisis sintáctico o parsing es el proceso <strong>de</strong> <strong>de</strong>terminar si una cad<strong>en</strong>a <strong>de</strong> tok<strong>en</strong>s pue<strong>de</strong> ser<br />

g<strong>en</strong>erada por una gramática dada (Aho et <strong>al</strong> [1987]).<br />

Una vez fin<strong>al</strong>izado el <strong>de</strong>sarrollo <strong>de</strong>l an<strong>al</strong>izador lexicográfico se com<strong>en</strong>zó con la implem<strong>en</strong>tación <strong>de</strong>l<br />

an<strong>al</strong>izador sintáctico trabajando sobre la base <strong>de</strong> la gramática dada <strong>en</strong> la figura 2. Se construyó así Un<br />

tipo <strong>de</strong> an<strong>al</strong>izador sintáctico top-down conocido como <strong>de</strong>sc<strong>en</strong>d<strong>en</strong>te recursivo consist<strong>en</strong>te <strong>en</strong> un conjunto<br />

<strong>de</strong> procedimi<strong>en</strong>tos mutuam<strong>en</strong>te recursivos <strong>en</strong>cargados <strong>de</strong> llevar a<strong>de</strong>lante el análisis. Más precisam<strong>en</strong>te,<br />

Se implem<strong>en</strong>tó una forma especi<strong>al</strong> <strong>de</strong> parsing <strong>de</strong>sc<strong>en</strong>d<strong>en</strong>te recursivo, llamado parsing predictivo, <strong>en</strong> el<br />

cu<strong>al</strong> se asocia un procedimi<strong>en</strong>to con cada no termin<strong>al</strong> <strong>de</strong> la gramática y el símbolo <strong>de</strong> lookahead no<br />

ambiguo leído sobre la <strong>en</strong>trada <strong>de</strong>termina el procedimi<strong>en</strong>to asociado a un no termin<strong>al</strong> que va a<br />

ejecutarse(Aho et <strong>al</strong> [1987]).<br />

Para po<strong>de</strong>r implem<strong>en</strong>tar este tipo <strong>de</strong> parser, es necesario que la gramática sea LL(l) (Aho et <strong>al</strong><br />

[1979] [1987]). Nuestra gramática pres<strong>en</strong>ta un problema con la producción<br />

::= + ; ccomposición <strong>de</strong> FF><br />

( - ; )<br />

don<strong>de</strong> pue<strong>de</strong> com<strong>en</strong>zar con cu<strong>al</strong>quiera <strong>de</strong> los símbolos con que comi<strong>en</strong>za una<br />

función. Este problema fue resuelto sobre el código <strong>de</strong> la sigui<strong>en</strong>te manera: si el símbolo Sigui<strong>en</strong>te a la<br />

composición <strong>de</strong> formas funcion<strong>al</strong>es es ‘-‘, <strong>en</strong>tonces estamos seguros <strong>de</strong> que se trata <strong>de</strong> un condicion<strong>al</strong>,<br />

<strong>en</strong> CUYO Caso se asumirá como condición <strong>de</strong>l condicion<strong>al</strong> sólo la última función que aparezca <strong>en</strong> la<br />

composición. Si comi<strong>en</strong>za con el paréntesis ‘(’ tampoco se pue<strong>de</strong> saber si se trata <strong>de</strong> un condicion<strong>al</strong> o<br />

<strong>de</strong> ta forma funcion<strong>al</strong> repetitiva while, pero esto es inmediatam<strong>en</strong>te resuelto cuando se lee el próximo<br />

símbolo sobre la <strong>en</strong>trada y se verifica si se trata <strong>de</strong> un whíle o no. En el caso que no lo fuese, estamos<br />

fr<strong>en</strong>te a un condicion<strong>al</strong> cuya condición pue<strong>de</strong> estar formada por la composición <strong>de</strong> cu<strong>al</strong>quier número <strong>de</strong><br />

funciones.<br />

Se <strong>de</strong>finió la clase TParserDi<strong>al</strong>og, <strong>en</strong>cargada tanto <strong>de</strong>l an<strong>al</strong>isis sintáctico como <strong>de</strong> crear y visu<strong>al</strong>izar<br />

la Caja <strong>de</strong> diálogo don<strong>de</strong> se le muestra <strong>al</strong> usuario el resultado <strong>de</strong>l proceso <strong>de</strong> compilación.<br />

232

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

Saved successfully!

Ooh no, something went wrong!