1 / 12

Um Interpretador para Exp1

Um Interpretador para Exp1. Haskell Prática 2. Tipos algébricos recursivos. Tipos de dados recursivos data Expr = Lit Int | Add Expr Expr | Sub Expr Expr Funções definidas recursivamente

elu
Download Presentation

Um Interpretador para Exp1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Um Interpretador para Exp1 Haskell Prática 2

  2. Tipos algébricos recursivos • Tipos de dados recursivos data Expr = Lit Int | Add Expr Expr | Sub Expr Expr • Funções definidas recursivamente eval :: Expr -> Inteval (Lit n) = neval (Add e1 e2) = (eval e1) + (eval e2)eval (Sub e1 e2) = (eval e1) - (eval e2)

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

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

  5. Exercícios • Defina as seguintes funções: showExpr :: Expr -> String toList :: List t -> [t] fromList :: [t] -> List t depth :: Tree t -> Int collapse :: Tree t -> [t] mapTree :: (t -> u) -> Tree t -> Tree u

  6. Linguagem Exp1 • 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

  7. Sintaxe Abstrata da Linguagem Exp1 Programa ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria Valor ::= ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao

  8. Programas de Exp1 • Programa 1 4 • Programa 2 4 + 5

  9. Sintaxe Abstrata de Exp1 data Programa = PROG Expressao data Expressao = LITI Int | LITB Bool | LITS String -- ExpUnaria | MINUS Expressao | NOT Expressao | LENGTH Expressao -- ExpBinaria | SOMA Expressao Expressao | SUBTRACAO Expressao Expressao | AND Expressao Expressao | OR Expressao Expressao | IGUAL Expressao Expressao | CONCATENA Expressao Expressao

  10. Exemplos de programas Exp1 p1 = PROG (LITI 4) p2 = PROG (SOMA (LITI 4) (LITI 5))

  11. Entidades Semânticas -- Valores -- data Valor = V1 Int | V2 Bool | V3 String -- showValor :: Valor -> String -- showValor (V1 i) = show i -- showValor (V2 b) = show b -- showValor (V3 s) = show s

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

More Related