Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise...

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

Transcript of Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise...

Page 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.

Universidade Federal da ParaíbaDepartamento de Informática

Construção de Compiladores

Análise Semântica

Exemplos sob a Perspectiva da Implementação

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

Universidade Federal da ParaíbaDepartamento de Informática

Abre escopo

Fechar escopo

Análise Semântica

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

Universidade Federal da ParaíbaDepartamento 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(); …

}

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

pilhaEsc = new Pilha();

8

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

$

pilhaEsc.push(“$”);

8

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

pilhaEsc.push(exemplo);

exe..

8

simbolo_lido.token

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

pilhaEsc.push(a);

8

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.push(b);

8

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.push(b);

p

8

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.push(“$”);

p

8

$

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.push(x);

p

x

8

$

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.push(b);

p

x

b

8

$

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.push(c);

p

x

b

8 c

$

$

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

Universidade Federal da ParaíbaDepartamento 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

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

Universidade Federal da ParaíbaDepartamento 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--;

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.procurar(x);

p

x

b

8 c

$

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

pilhaEsc.procurar(y);

p

x

b

8 c

ERRO

$

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

While (topo != “$”) pilhaEsc.pop()pilhaEsc.pop() // retirar $

p

x

b

8 c

$

$

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

Universidade Federal da ParaíbaDepartamento de Informática

Análise Semântica

a

exe..

b

p

x

b

8 c

exemplo;

$

$

Observação 3: E o identificador do programa?

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

Universidade Federal da ParaíbaDepartamento 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?

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

Universidade Federal da ParaíbaDepartamento 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;