Tipo ListaId = Expressao Tipo := string | int | boolean | TipoPolimorfico TipoPolimorfico := T ListaTipo ::= Tipo | ListaTipo, ListaTipo Regra Modificada Nova Regra">

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 Alexandre Barza José Benito Laís Neves.

Apresentações semelhantes


Apresentação em tema: "Tipos Explícitos e Tipos Polimórficos para LF1 Alexandre Barza José Benito Laís Neves."— 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 – Implementação dos tipos explícitos Parte 2 – 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 ListaTipo ::= Tipo | ListaTipo, ListaTipo Regra Modificada Nova Regra

4 Parser Modificado 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) public int sec(T0 x, T1 y){ return x; } public T0 sec1(T0 x, T1 y) { return y; } Erros em tempo de compilação!

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 sec2(T0 x, boolean y){ return y; } public T0 sec3(T0 x, T1 y){ return 2+1; }

10 Tipos Polimórficos em Java Exemplos Corretos public int sec4(T0 x, T1 y){ return 1+2; } public T0 sec5(T0 x, T1 y) { return x; }

11 Tipos Polimórficos em LF1 let fun sec : T0 T1 -> int x y = x in sec(1, 2) 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 Incorretos 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) Exemplos Corretos

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

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 Verifica se Tipos Primitivos são Compatíveis

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

16 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 Alexandre Barza José Benito Laís Neves."

Apresentações semelhantes


Anúncios Google