Um Interpretador para Exp 1 Haskell Prtica 2

  • Slides: 12
Download presentation
Um Interpretador para Exp 1 Haskell Prática 2

Um Interpretador para Exp 1 Haskell Prática 2

Tipos algébricos recursivos Tipos de dados recursivos data Expr = Lit Int | Add

Tipos algébricos recursivos Tipos de dados recursivos data Expr = Lit Int | Add Expr | Sub Expr n Funções definidas recursivamente n eval : : Expr -> Int (Lit n) = n (Add e 1 e 2) = (eval e 1) + (eval e 2) (Sub e 1 e 2) = (eval e 1) - (eval e 2)

Tipos algébricos polimórficos n Tipos de dados polimórficos: data Pair n Pairs t =

Tipos algébricos polimórficos n Tipos de dados polimórficos: data Pair n Pairs t = Pair t t 6 8 : : Pairs Int True : : Pairs Bool [] [1, 3] : : Pair [Int] Listas data List t = Nil | Cons t (List t) n Árvores binárias data Tree t = Nil. T | Node t (Tree t)

Derivando instâncias de classes data List t = Nil | Cons t (List t)

Derivando instâncias de classes data List t = Nil | Cons t (List t) deriving (Eq, Ord, Show) data Tree t = Nil. T | Node t (Tree t) deriving (Eq, Ord, Show)

Exercícios n Defina as seguintes funções: show. Expr : : Expr -> String to.

Exercícios n Defina as seguintes funções: show. Expr : : Expr -> String to. List : : List t -> [t] from. List : : [t] -> List t depth : : Tree t -> Int collapse : : Tree t -> [t] map. Tree : : (t -> u) -> Tree t -> Tree u

Linguagem Exp 1 n n Inclui apenas valores constantes (literais) e operações sobre valores

Linguagem Exp 1 n n Inclui apenas valores constantes (literais) e operações sobre valores Valores e operações sobre inteiros, booleanos e string são admitidos Um programa é uma expressão Agrupa valores em tipos e uma verificação de tipos pode ser implementada

Sintaxe Abstrata da Linguagem Exp 1 Programa : : = Expressao : : =

Sintaxe Abstrata da Linguagem Exp 1 Programa : : = Expressao : : = Valor | Exp. Unaria | Exp. Binaria Valor : : = Valor. Concreto : : = Valor. Inteiro | Valor. Booleano | Valor. String Exp. Unaria : : = "-" Expressao | "not" Expressao | "length" Expressao Exp. Binaria : : = Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao

Programas de Exp 1 n Programa 1 4 n Programa 2 4 + 5

Programas de Exp 1 n Programa 1 4 n Programa 2 4 + 5

Sintaxe Abstrata de Exp 1 data Programa = PROG Expressao data Expressao = LITI

Sintaxe Abstrata de Exp 1 data Programa = PROG Expressao data Expressao = LITI Int | LITB Bool | LITS String -- Exp. Unaria | MINUS Expressao | NOT Expressao | LENGTH Expressao -- Exp. Binaria | SOMA Expressao | SUBTRACAO Expressao | AND Expressao | OR Expressao | IGUAL Expressao | CONCATENA Expressao

Exemplos de programas Exp 1 = PROG (LITI 4) p 2 = PROG (SOMA

Exemplos de programas Exp 1 = PROG (LITI 4) p 2 = PROG (SOMA (LITI 4) (LITI 5))

Entidades Semânticas -- Valores -- data Valor = V 1 Int | V 2

Entidades Semânticas -- Valores -- data Valor = V 1 Int | V 2 Bool | V 3 String ----- show. Valor : : Valor -> String (V 1 i) = show i (V 2 b) = show b (V 3 s) = show s

Função de Interpretação interprete : : Programa -> String interprete (PROG e) = show

Função de Interpretação interprete : : Programa -> String interprete (PROG e) = show (eval e) -- Funcao de Avaliacao de Expressoes eval eval : : Expressao -> Valor (LITI i) = i (LITB b) = b (LITS s) = s (NOT e) = not (eval e) (SOMA e 1 e 2) = (eval e 1) + (eval e 2)