You are on page 1of 7

1.

Decir que elementos gramaticales componen el conjunto de smbolos no


terminales y cules el de terminales.
= {; int float double char bool id , = numero carcter true false if ( ) { } else
while + - * / % > < !}
N = { program declaraciones tipo lista-variables init sentencias sentencia
sentenciaIF senetenciaWhile sentenciaAsig opasig condicin expresin }
2. Asignar un smbolo para representar a cada uno de los elementos no
terminales, por ejemplo: expresin ser representada por E y programa por P.
Esto con el motivo de simplificar la notacin de la gramtica y sea de manejo
ms sencillo.
P program
D declaraciones
T tipo
L lista-variables
I init
S setnencias
C sentencia
F sentenciaIF
W sentenciaWhile
A sentenciaAsig
O opasig
C condicin
E expresion
P-> DS
D-> DTL;| TL;
T-> int | float |double | char
L-> idI, L | idI
I-> =id | =numero | = carcter | =true | =false
S-> SZ|Z
Z-> F|W|A
F-> if(C){S} |if(C){S}else{S}
W-> while(C){S}
A-> idOE
O-> +=|-=|*=|/=|%=|=
C-> C>C|C<C|C==C|C!=C1C>=C|C<=C|E
E-> E+E|E-E|E*E|E/E|E%E|(E)|id|numero|caracter|true|false

3. Elaboracin del analizador lxico


(a) Definir clases lxicas
1
ID
2
NUMERO

3
4
5
6
7
8
9
10

CARACTER
TRUE
FALSE
OPERADOR
PR
LPAR
RPAR

(b) El analizador Lxico tendr como entrada un archivo de texto con las
palabras que deber reconocer como cdigo fuente.
(c) Los valores de los tokens se deben guardar en la variable yylval.
(d) Cada vez que el programa encuentre un token deber imprimirlo en
pantalla. (se pueden imprimir en un archivo).
(e) Los errores que encuentre se debern imprimir en pantalla, indicando el
nmero de lnea donde ocurri y el nmero de carcter.
4. Elaboracin del parser
(a) Eliminar la ambigedad de la gramtica si es que la tiene.
condicioncondicion > condiciondos | condicion< condiciondos | condicion==
condiciondos | condicion! = condiciondos |condicion>= condiciondos |
condicion<= condiciondos | condiciondos
condiciondos-> expresin
C-> C > Cdos | C< Cdos | C== Cdos | C! = Cdos |C>= Cdos | C<= Cdos | Cdos
Cdos-> expresin
C-> C > Cdos|C<Cdos| C>=Cdos|C<=Cdos|Cdos
Cdos-> Cdos==C|Cdos!=C|E

expresion expresion + expresiondos | expresion expresiondos |


expreciondos
expresiondos-> expresiondos * expresiontres | expresiondos / expresiontres |
expresiondos% expresiontres | expresiontres
expresiontres -> ( expresion ) | id | numero | caracter | true | false
E E + Edos | E Edos | Edos
Edos-> Edos * Etres | Edos / Etres | Edos% Etres | Etres
Etres -> ( E ) | id | numero | caracter | true | false
(b) Factorizar y eliminar la recursividad por la izquierda.
P-> DS

*D-> DTL;| TL;


D-> TL;D
D->TL;D|
T-> int | float |double | char
>> L-> idI, L | idI
L-> idIL
L-> ,L|
>> I-> =id | =numero | = carcter | =true | =false
I-> =I
I->id|numero|character|true|false
*S-> SZ|Z
S-> ZS
S-> ZS|
Z-> F|W|A
>>F-> if(C){S} |if(C){S}else{S}
F-> if(C){S}F
F-> else{S}|
W-> while(C){S}
A-> idOE
O-> +=|-=|*=|/=|%=|=
*C-> C > Cdos|C<Cdos| C>=Cdos|C<=Cdos|Cdos
C-> CdosC
C-> >CdosC|<CdosC|>=CdosC|<=CdosC|
*Cdos-> Cdos==C|Cdos!=C|E
Cdos-> ECdos
Cdos-> ==CCdos|!=CCdos|
*E E + Edos | E Edos | Edos
E EdosE
E-> + EdosE | EdosE |
*Edos-> Edos * Etres | Edos / Etres | Edos% Etres | Etres
Edos-> EtresEdos
Edos-> * Etres Edos | / Etres Edos | % Etres Edos |
Etres -> ( E ) | id | numero | caracter | true | false

(c) Representar la gramtica en notacin EBNF.


Gramtica
Representacin EBNF
P-> DS
P-> DS
D-> TL;D
D-> TL;D

D->TL;D|
D-> {TL;}
T-> int | float |double | char
T-> int | float |double
| char
L-> idIL
L-> idIL
L-> ,L|
L->[,L]
I-> =I
I-> =I
I->id|numero|character|true|false
I->id|numero|character|
true|false
S-> ZS
S-> ZS
S-> ZS|
S-> {Z}
Z-> F|W|A
Z-> F|W|A
F-> if(C){S}F
F-> if(C){S}F
F-> else{S}|
F->[else{S}]
W-> while(C){S}
W-> while(C){S}
A-> idOE
A-> idOE
O-> +=|-=|*=|/=|%=|=
O-> +=|-=|*=|/=|%=|
=
C-> CdosC
C-> CdosC
C-> >CdosC|<CdosC|>=CdosC|<=CdosC|
C-> { >Cdos|<Cdos|
>=Cdos|<=Cdos}
Cdos-> ECdos
Cdos-> ECdos
Cdos-> ==CCdos|!=CCdos|
Cdos-> {==C|!=C}
E EdosE
E EdosE
E-> + EdosE | EdosE |
E-> {+Edos|-Edos}
Edos-> EtresEdos
Edos-> EtresEdos
Edos-> * Etres Edos | / Etres Edos | % Etres Edos |
Edos->
{*Etres|/Etres|%Etres}
Etres -> (E)|id|numero|caracter|true|false
Etres -> (E)|id|numero|
caracter|true|false

(d) Dibujar los diagramas de sintaxis.

(e) Calcular los conjuntos FIRST y FOLLOW de la gramtica resultante.


Estado
Anulable
FIRST
FOLLOW
P
D
D

T
L
L
I
I
S
S
Z
F
F
W
A
O
C
C
Cdos
Cdos
E
E
Edos
Edos
Etres

(f) Calcular la tabla de anlisis sintctico LL(1).


(g) El programa deber imprimir el nombre de la funcin que se est
ejecutando y la produccin que est derivando.
5. Al terminar el anlisis lxico mostrar el contenido de la tabla de smbolos.
(Esta se puede guardar en un archivo).

6. El programa deber estar documentado, cada funcin debe contener una


descripcin breve de lo que hace, el nombre de quienes elaboraron el
programa y fecha de elaboracin. Se deber respetar la sangra que denota la
dependencia de instrucciones, si se entregan programas donde no se respete
el sangrado de las instrucciones ser motivo de anulacin de la entrega del
programa.

You might also like