Você está na página 1de 3

PUCSP Cincia da Computao (Prof.

Julio Arakaki) COMP P2 (2007) GABARITO

Questo 1) Gramtica:
E (L) | a L L , E | E

Ajustando e eliminando a recurso esquerda:


E E L L E E E E (L.) (L). .a a. E (L) | a E L , E L | L L L L .EL E.L EL. .,EL L L L L ,.EL ,E.L ,EL. .

Itens LR(0):
E E E E .E E. .(L) (.L)

NFA (opcional):
E E. E E .E E .a a E a. L .,EL , L ,.EL E L ,E.L L L .EL E L E .(L) ( E (.L) L E (L.) )

E (L).

L E.L

L EL.

L .

L ,EL.

DFA:
0

E .E E .(L) E .a a
2

E E.

(
3 4 5

E a.

E L E E

(.L) .EL .(L) .a

L E

E (L.)
6

E (L).

L E.L L .,EL L . ( ,
8 9

L EL.

L ,.EL E .(L) E .a

, E

L ,E.L L .,EL L .

10

L ,EL.

Tabela de anlise Sinttica


Entrada Estado 0 1 2 3 4 5 6 7 8 9 10 2: reduz E a 3 8 9 10 8 7 2: reduz E a 3 5: reduz E (L) 6 4 a 2: reduz E a 4 ( 3 aceita ) , $ E 1 Ir Para L L

Pilha de anlise Sinttica e aes Pilha


$0 $0(3 $0(3(3 $0(3(3a2 $0(3(3E6 $0(3(3L4 $0(3(3L4)5 $0(3E6 $0(3E6,8 $0(3E6,8a2 $0(3E6,8E9 $0(3E6,8E9,8 $0(3E6,8E9,8(3 $0(3E6,8E9,8(3a2 $0(3E6,8E9,8(3E6 $0(3E6,8E9,8(3E6,8 $0(3E6,8E9,8(3E6,8a2 $0(3E6,8E9,8(3E6,8E9 $0(3E6,8E9,8(3E6L7 $0(3E6,8E9,8(3L4 $0(3E6,8E9,8(3L4)5 $0(3E6,8E9,8E9 $0(3E6,8E9L10 $0(3E6L7 $0(3L4 $0(3L4)5 $0E1

Entrada
((a),a,(a,a))$ (a),a,(a,a))$ a),a,(a,a))$ ),a,(a,a))$ ),a,(a,a))$ ),a,(a,a))$ ,a,(a,a))$ ,a,(a,a))$ a,(a,a))$ ,(a,a))$ ,(a,a))$ (a,a))$ a,a))$ ,a))$ ,a))$ a))$ ))$ ))$ ))$ ))$ )$ )$ )$ )$ )$ $ $ carrega carrega carrega reduz E a

Ao

reduz L EL e L . carrega reduz E (L) carrega carrega reduz E a carrega carrega carrega reduz E a carrega carrega reduz E a reduz L ,EL e L . reduz L EL carrega reduz E (L) reduz L ,EL e L . reduz L ,EL reduz L EL carrega reduz E (L)

aceita

Questo 2) Gramtica que exemplifique a Anlise Semntica Dirigida pela Sintaxe.


Gramtica para Declarao de variveis
D var L : id-tipo L id RL RL , id RL | id-tipo integer | char | boolean

Gramtica para Declarao de variveis, incluindo semntica (aes)


D var L : id-tipo #2 L id #1 RL RL , id #1 RL | id-tipo integer | char | boolean

a) Regras e aes
Regras
As variveis devem ser declaradas apenas uma vez. id-tipo deve ser integer, char ou boolean.

Aes semnticas
# 1 (* Verificar se a varivel j foi declarada*) Verificar se id Tabela de Smbolos (TS) Se sim, Erro Semntico ( Varivel j declarada) Se no, Incluir id na Tabela de Smbolos # 2 (* Verificar se tipo vlido*) Se id-tipo integer, char ou boolean Ento atribui id-tipo ao atributo tipo de cada id declarado Senao Erro Semntico (Tipo Invlido)

b) Funo da tabela de smbolos: manter informaes (nome, categoria, atributos) sobre identificadores usados no programa fonte. Exemplo: implementao da tabela de smbolos atravs de matriz (array) var x : integer
Nome x Categoria Id-variavel Atributo 1 integer Atributo 2 ... Atributo n -

Você também pode gostar