A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Semântica Exemplos sob a Perspectiva da Implementação.

Apresentações semelhantes


Apresentação em tema: "Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Semântica Exemplos sob a Perspectiva da Implementação."— Transcrição da apresentação:

1 Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Semântica Exemplos sob a Perspectiva da Implementação

2 Universidade Federal da Paraíba Departamento de Informática Abre escopo Fechar escopo Análise Semântica

3 Universidade Federal da Paraíba Departamento de Informática Análise Semântica Procedimento analisador_sintático { pilhaEsc = new Pilha(); obtenha_símbolo(); PROG(); } Procedimento PROG { se simbolo_lido.token != Programa então ERRO(falta programa); senão { pilhaEsc.push($); obtenha_símbolo(); se simbolo_lido.tipo == IDENT então pilhaEsc.add(simbolo_lido.token); obtenha_símbolo(); se simbolo_lido.token == ; então DECL(); … }

4 Universidade Federal da Paraíba Departamento de Informática Análise Semântica pilhaEsc = new Pilha(); 8

5 Universidade Federal da Paraíba Departamento de Informática Análise Semântica $ pilhaEsc.push($); 8

6 Universidade Federal da Paraíba Departamento de Informática Análise Semântica pilhaEsc.push(exemplo); exe.. 8 simbolo_lido.token $

7 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. pilhaEsc.push(a); 8 $

8 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.push(b); 8 $

9 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.push(b); p 8 $

10 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.push($); p 8 $ $

11 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.push(x); p x 8 $ $

12 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.push(b); p x b 8 $ $

13 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.push(c); p x b 8 c $ $

14 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.procurar(b); p x b 8 c Observação 2: Como saber se identificar é declarado ou usado? $ $ Observação 1: Note que a pilha retorna a referência correta

15 Universidade Federal da Paraíba Departamento de Informática Análise Semântica pilhaEsc.procurar(b); Observação 2: Como saber se identificar é declarado ou usado? x 0; … se simbolo_lido.tipo == IDENT então { se (x==0) pilhaEsc.add(simbolo_lido.token); senão pilhaEsc.procurar(simbolo_lido.token); obtenha_símbolo(); … } se simbolo_lido.token == BEGIN então x++; se simbolo_lido.token == END então x--;

16 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.procurar(x); p x b 8 c $ $

17 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b pilhaEsc.procurar(y); p x b 8 c ERRO $ $

18 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b While (topo != $) pilhaEsc.pop() pilhaEsc.pop() // retirar $ p x b 8 c $ $

19 Universidade Federal da Paraíba Departamento de Informática Análise Semântica a exe.. b p x b 8 c exemplo; $ $ Observação 3: E o identificador do programa?

20 Universidade Federal da Paraíba Departamento de Informática Análise Semântica Procedimento COM_COMP { se simbolo_lido.token != begin então; ERRO(falta begin); senão { obtenha_símbolo(); COM_OPC(); se simbolo_lido.token != end então ERRO(falta end); senão x--; fecharEscopo(); obtenha_símbolo(); … } ERRADO Observação 4: Como fechar o escopo?

21 Universidade Federal da Paraíba Departamento de Informática Análise Semântica Procedimento COM_COMP { se simbolo_lido.token != begin então ERRO(falta begin); senão { obtenha_símbolo(); COM_OPC(); se simbolo_lido.token != end então ERRO(falta end); senão x--; se (x == 0) então fecharEscopo(); obtenha_símbolo(); … } fecharEscopo Observação 4: Como fechar o escopo? C := 10;


Carregar ppt "Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Semântica Exemplos sob a Perspectiva da Implementação."

Apresentações semelhantes


Anúncios Google