análise semântica prof. heloise manica paris teixeira orginais:profa. valéria d. feltrim - din...

29
Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago A. S. Pardo, ICMC-USP/São Carlos

Upload: internet

Post on 17-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Análise Semântica

Prof. Heloise Manica Paris Teixeira

Orginais:Profa. Valéria D. Feltrim - DIN – UEMEste material foi gentilmente cedido pelo Prof. Thiago A. S. Pardo, ICMC-USP/São Carlos

Page 2: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Estrutura geral de um compilador programa-fonte

analisador léxico

analisador sintático

analisador semântico

gerador de código intermediário

otimizador de código

gerador de código

programa-alvo

Tabela de símbolos

Tabela de palavras esímbolos reservados

Manipulaçãode erros

dados deentrada

saída

Page 3: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Análise semântica Função: verificação do uso adequado

Análise contextual: declarações prévias de variáveis, procedimentos, etc.

Checagem de tipos Coisas que vão além do domínio da sintaxe

Sensitividade ao contexto!

Tipos de análise semântica Estática, em tempo de compilação: linguagens tipadas,

que exigem declarações C, Pascal, etc.

Dinâmica, em tempo de execução: linguagens em que as variáveis são determinadas pelo contexto de uso LISP, PROLOG

Page 4: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Análise semântica

Devido às variações de especificação semântica das linguagens de programação, a análise semântica Não é tão bem formalizada Não existe um método ou modelo padrão de representação

do conhecimento Não existe um mapeamento claro da representação para o

algoritmo correspondente

Análise é artesanal, dependente da linguagem de programação

Page 5: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Análise semântica

Semântica dirigida pela sintaxeSemântica dirigida pela sintaxe Conteúdo semântico fortemente relacionado à

sintaxe do programa Maioria das linguagens de programação

modernas

Em geral, a semântica de uma linguagem de programação não é especificada O projetista do compilador tem que analisar e

extrair a semântica

Page 6: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Análise semântica

Em geral, a gramática de atributos de uma gramática especifica Comportamento semântico das operações Checagem de tipos Manipulação de erros Tradução do programa

Tabela de símbolos: estrutura essencial para a análise semântica

Page 7: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

Captura a sensitividade ao contexto e as ações executadas no decorrer do programa

Atrelada a todas as etapas da compilação

Permite a realização da análise semântica

Fundamental na geração de código

Page 8: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Permite saber durante a compilação de um

programa o tipotipo e o valorvalor de seus elementos (números e identificadores), escopoescopo destes, número e tipo dos parâmetrosparâmetros de um procedimento, etc. Cada token tem atributos/informações diferentes

associadas

Cadeia Token Categoria Tipo Valor ...

i id var integer 1 ...

fat id proc - - ...

2 num - integer 2 ...

...

Page 9: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

Exemplo de atributos de identificador de variável Tipo de variável (inteira, real, etc.), nome da

variável, endereço na memória, escopo (global, local, etc.), etc.

Para vetores, ainda seriam necessários atributos de tamanho do vetor, o valor de seus limites, etc.

Page 10: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

Principais operações efetuadas Inserir: armazena na tabela informações fornecidas pelas

declarações no programa Busca: recupera da tabela informações de um elemento

declarado no programa quando esse elemento é utilizado Remover: remove (ou torna inacessível) da tabela

informações sobre um elemento declarado que não se mostra mais necessário no programa

As especificidades dessas operações são dependentes da linguagem de programação em questão

Page 11: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

A tabela é acessada pelo compilador sempre que um elemento é mencionado no programa Verificar ou incluir sua declaração Verificar seu tipo, seu escopo ou alguma outra informação Atualizar alguma informação associada ao identificador

(p.e., valor) Remover um elemento quando este não se faz mais

necessário ao programa

Page 12: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Estrutura da tabela de símbolos: determinada

pela eficiência das operações de inserir, verificar e remover

Várias possibilidades Implementação

Estática Dinâmica (Melhor opção)

Estrutura Listas lineares Árvores de busca (por exemplo, B e AVL) Hashing

Page 13: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

Questões de projeto

Tamanho da tabela: tipicamente, de algumas centenas a mil campos Dependente da forma de implementação

Na implementação dinâmica, não é necessário se preocupar com isso

Uma única tabela para todas as declarações ou várias tabelas, sendo uma para cada tipo de declaração (constantes, variáveis, tipos, procedimentos e funções) Diferentes declarações têm diferentes informações/atributos

por exemplo, variáveis não têm número de argumentos, enquanto procedimentos têm

Page 14: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

Representação de escopo de identificadores do programa Várias tabelas ou uma única tabela com a identificação do

escopo (como um atributo) para cada identificador Tratamento de escopo

Inserção de identificadores de mesmo nome, mas em níveis diferentes

Remoção de identificadores cujos escopos deixaram de existir

A tabela de símbolos pode ser utilizada para armazenar as palavras reservadas e símbolos especiais da linguagem, podendo dispensar o uso da tabela de palavras e símbolos reservados

Page 15: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

Descritores Registros (campos) que formam a tabela de

símbolos

Diferentes identificadores têm diferentes descritores Tem que se levar isso em consideração no

projeto da tabela de símbolos para sua otimização

Page 16: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Inserção de elementos na tabela

Associação de regras semânticas às regras gramaticais Verificar se o elemento já não consta na tabela

Busca de informação na tabela Realizada antes da inserção Busca de informações para análise semântica

Remoção de elementos da tabela Tornar inacessíveis dados que não são mais necessários

por exemplo, após o escopo ter terminado Linguagens que permitem estruturação em blocos

Page 17: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

program id corpo .

programa

inserir(cadeia,token=“id”,cat=”nome_prog”)

Cadeia Token Categoria Tipo Valor ...

meu_prog id nome_prog - - ...

program meu_prog ...

Inserção de elementos na tabela Declaração, principalmente

Page 18: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

var id real

declaraçãode variáveis

inserir(cadeia,token=“id”,cat=”var”)

Cadeia Token Categoria Tipo Valor ...

meu_prog id nome_prog - - ...

x id var integer ...

y id var integer ...

,

:

integer

inserir(tipo=“real”)

inserir(tipo=“integer”)var x, y: integer

Obs: não esta sendo ilustrado o controle das

posições na tabela!

Page 19: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Exercício: inclua as funções adequadas

procedure id real

declaração deprocedimentos

,

:

integer

id ( ) corpo

;

Obs: não esta sendo ilustrado o controle das

posições na tabela!

procedure meu_proc(a: integer; b,c: real) ...

Page 20: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

Exercício: inclua as funções adequadas

procedure id real

declaração deprocedimentos

,

:

integer

id ( ) corpo

;inserir(cadeia,token=“id”,cat=”proc”)

Cadeia Token Categoria Tipo Valor ...

meu_proc id proc - - ...

procedure meu_proc(a: integer; b,c: real) ...

Obs: não esta sendo ilustrado o controle das

posições na tablea!

Page 21: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Exercício: inclua as funções adequadas

procedure id real

declaração deprocedimentos

,

:

integer

id ( ) corpo

;

inserir(cadeia,token=“id”,cat=”proc”)

inserir(cadeia,token=“id”,cat=”par”)

inserir(tipo=“real”) a partir de...

inserir(tipo=“integer”) a partir de...

procedure meu_proc(a: integer; b,c: real) ...

Obs: não esta sendo ilustrado o controle das

posições na tabela!

Page 22: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Exercício: inclua as funções adequadas

Cadeia Token Categoria Tipo Valor ...

meu_prog id nome_prog - - ...

x id var integer ...

y id var integer ...

meu_proc id proc - - ...

a id par integer ...

b id par real ...

c id par real ...

procedure meu_proc(a: integer; b,c: real) ...

Page 23: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Tratamento de escopo

Como diferenciar variáveis globais de locais Tratamento de variáveis de mesmo nome, mas de escopos

diferentes

program meu_progvar x, y: integer

procedure meu_proc(x: integer)var y: realbegin

read(y);x:=x+y

end;begin

read(y);x:=x*y

end.

Page 24: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos Possibilidades para tratamento de escopos

Inclusão de um campo a mais na tabela de símbolos indicando o nível da variável no programa

Tabelas diferentes para diferentes escopos

Busca de informação Sempre que um elemento do programa é utilizado

comando e fator Verifica-se se foi declarado, seu tipo, etc.

Page 25: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

id

fator

número real

número inteiro

( expressão )

busca(cadeia,token=“id”,cat=“var”)

Page 26: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tabela de símbolos

comandoread

write

( )id

,

:=id expressão

( )id

;

busca(cadeia,token=“id”, cat=“var”)

busca(cadeia,token=“id”,cat=“proc”)busca(cadeia,token=“id”,cat=“par”)

busca(cadeia,token=“id”,cat=“var”)

Page 27: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tratamento semântico

Verificação do uso adequado dos elementos do programa Declaração de identificadores

Erro: identificador não declarado ou declarado duas vezes

Compatibilidade de tipos em comandos Checagem de tipos

Concordância entre parâmetros formais e atuais, em termos de número, ordem e tipo

Page 28: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tratamento semântico Declaração de identificadores

Verificado durante a construção da tabela de símbolos

Compatibilidade de tipos Dependente do contexto

Atribuição: inteiro:=inteiro, real:=inteiro, string:=cadeia de caracteres Erro: inteiro:=real

Comandos de repetição: while booleano do..., if booleano then... Expressões e tipos esperados pelos operadores: inteiro+inteiro,

real*real, inteiro+real, inteiro/inteiro, booleano and booleano Erro: inteiro+booleano

Arrays: vetor[integer]

Page 29: Análise Semântica Prof. Heloise Manica Paris Teixeira Orginais:Profa. Valéria D. Feltrim - DIN – UEM Este material foi gentilmente cedido pelo Prof. Thiago

Tratamento semântico

Concordância entre parâmetros formais e atuais, em termos de número, ordem e tipo Por exemplo, se declarado:

procedure p(var x: integer; var y: real) Erros

procedure p(x:integer, y:integer) procedure p(y:real, x:integer) procedure p(x:integer)

Tratamento de escopo Erro: variável local a um procedimento utilizada no programa

principal