universidade federal da paraíba departamento de informática construção de compiladores análise...
TRANSCRIPT
![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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.pub/reader035/viewer/2022062318/552fc10d497959413d8c44c0/html5/thumbnails/21.jpg)
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;