Registos de ActivaçãoTopSintaxe AbstractaAnálise Semântica

Análise Semântica

Ánálise Semântica

Análise Semântica:

Tabela de Símbolos (Ambiente)

Mapeamento de Ids para Tipos e Localização:

Tabela de Símbolos: Implementação

Primeiro, notar que sigma1 + sigma2 != sigma2 + sigma1:

Múltiplas Tabelas de Símbolos

Algumas linguagens permitem ambientes múltiplos:

Notas de Implementação

Bindings

Tiger tem dois espaços de nomes:

Em Tiger tipos são:

Bindings: Exemplo

struct Ty_ty_
  { enum{Ty_record, Ty_nil, Ty_int, Ty_string,
        Ty_array, Ty_name, Ty_void} kind;
    union {Ty_fieldList record;
           Ty_ty array;
           struct {S_symbol sym; Ty_ty;} name;
    } u;  }
Ty_ty Ty_Nil(void);      Ty_ty Ty_Int(void);
Ty_ty Ty_String(void);   Ty_ty Ty_Void(void);

Ty_ty Ty_Record(Ty_fieldlist fields);
Ty_ty Ty_Array(Ty_ty ty);
Ty_ty Ty_Name(S_symbol sym, Ty_ty ty);

struct Ty_tyList_ {Ty_ty head;Ty_tyList tail;}
Ty_tyList Ty_tyList(Ty_ty head,Ty_tyList tail);

struct Ty_field_ {S_symbol name; Ty_ty ty;}
Ty_field Ty_Field(S_symbol name; Ty_ty ty);

struct Ty_fieldList_ {Ty_field head; 
                      Ty_fieldList tail;}
Ty_fieldList Ty_FieldList(Ty_field head;
                          Ty_fieldList tail);

Ambientes

Em Tiger temos ambientes para tipos e valores:

let type a = int
    var a : a = 5
    var b : a = a
  in b + a
end

Verificação de Tipos: Expressões

Verifica o tipo dos elementos que aparecem na árvore sintáctica:

Verificação de Tipos

Verificação de Tipos: Recursão

O que fazer com tipos ou funções que se chamam mútuamente?

type list = {first: int, rest: list}
  1. primeiro pôr cabeçalhos no ambiente e, construindo e1: cabeçalho é type list =
  2. processar e1 com cabeçalhos:
    {first: int, rest: list}
    
  3. a tradução de tipos deve parar logo que encontre um Ty_Name, senão pode encontrar um NULL.
  4. agora, podemos colocar o novo tipo no campo ty.
Funções são processadas em 2 passos: primeiro obtém cabeçalhos, segundo entra no corpo das funções.
vitor@cos.ufrj.br

Registos de ActivaçãoTopSintaxe AbstractaAnálise Semântica