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

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

Tipos Explícitos e Tipos Polimórficos para LF1

Apresentações semelhantes


Apresentação em tema: "Tipos Explícitos e Tipos Polimórficos para LF1"— Transcrição da apresentação:

1 Tipos Explícitos e Tipos Polimórficos para LF1
Alexandre Barza José Benito Laís Neves

2 RoadMap Parte 1 Parte 2 Implementação dos tipos explícitos
Melhoria das mensagens de erros de tipos Implementação de tipos polimórficos para funções

3 BNF Modificada ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao DeclaracaoFuncional ::= DecVariavel | DecFuncao | DeclaracaoFuncional "," DeclaracaoFunciona DecVariavel::= “var” Id “:” Tipo “=” Expressao DecFuncao ::= “fun” Id “:” ListaTipo “->” Tipo ListaId “=” Expressao Tipo := “string” | “int” | “boolean” | TipoPolimorfico TipoPolimorfico := “T” <IDENTIFICADOR_NUMERICO> ListaTipo ::= Tipo | ListaTipo, ListaTipo Regra Modificada Nova Regra

4 Parser Modificado Barza! Tokens de tipos

5 Parser Modificado Regra Tipo

6 Parser Modificado Regra Tipo Polimórfico

7 Exemplos Tipos Explícitos
Declaração de Variável let var x : int= 1 in x + 1 let var a : string = "hello" in a ++ "world” letvar b : boolean= true in b and true Declaração de Função let fun prod : int int -> int x y = if y == 0 then 0 else x + prod(x,y-1) in prod(3,3)

8 Antes um Breve Parênteses
Tipos Polimórficos em Java Erro: tipos incompatíveis da imagem (int) e da expressão x (T0) Erro: tipos incompatíveis da imagem (T0) e da expressão y(T1) Erros em tempo de compilação! public <T0, T1> int sec(T0 x, T1 y){ return x; } let fun sec : T0 T1 -> T0 x y = y in sec(1, “true”) public <T0, T1> T0 sec1(T0 x, T1 y) { return y; }

9 Tipos Polimórficos em Java
Erro: tipos incompatíveis da imagem (T0) e da expressão y (boolean) Erro: tipos incompatíveis da imagem (T0) e da expressão 2+1(int) public <T0> T0 sec2(T0 x, boolean y){ return y; } public <T0, T1> T0 sec3(T0 x, T1 y){ return 2+1; } let fun sec : T0 T1-> T0 x y = 2+1 in sec(1, true)

10 Tipos Polimórficos em Java
Exemplos Corretos public <T0, T1> int sec4(T0 x, T1 y){ return 1+2; } public <T0, T1> T0 sec5(T0 x, T1 y) { return x; } Let fun sec : T0 T1 -> T0 x y = x in sec(1, true)

11 Tipos Polimórficos em LF1
let fun sec : T0 T1 -> int x y = x in sec(1, 2) Exemplos Incorretos let fun sec : T0 T1 -> T0 x y = y in sec(1, true) let fun sec : T0 boolean-> T0 x y = y in sec(1, true) let fun sec : T0 T1-> T0 x y = 2+1 in sec(1, true) Exemplos Corretos let fun sec : T0 T1 -> int x y = 1+2 in sec(1, true) let fun sec : T0 T1 -> T0 x y = x in sec(1, true)

12 Análise da Implementação
DefFuncao Novos Atributos Lais

13 DefFuncao Empilhamento dos Tipos Checagem de Tipos da Expressão
Checagem de Tipos da Imagem

14 DefFuncao Verifica se Imagem e Expressão são Tipos Polimórficos
Verifica se Imagem e Expressão são Tipos Primitivos So compara se imagem e expressao forem ambas Primitivas ou Polimorficas Verifica se Tipos Primitivos são Compatíveis

15 Verifica os tipos polimórficos após eles terem sido inferidos
Tipo Função Verifica os tipos polimórficos após eles terem sido inferidos

16 Apenas compara se tokens forem iguais
Tipo Polimórfico Método eIgual(Tipo tipo) Apenas compara se tokens forem iguais

17 Demonstração


Carregar ppt "Tipos Explícitos e Tipos Polimórficos para LF1"

Apresentações semelhantes


Anúncios Google