l-c2019/Lab5
Dionisio E Alonso 3a893cdb62 feat(coding-style): Correct coding style to examples 2023-04-19 23:03:20 -03:00
..
Lab5.hs feat(coding-style): Correct coding style 2023-04-19 22:49:55 -03:00
README.md Correct some spaces on assignment 2019-05-20 22:21:46 -03:00
examples.hs feat(coding-style): Correct coding style to examples 2023-04-19 23:03:20 -03:00

README.md

Laboratorio Lenguajes y Compiladores

Enunciado

Extender el lenguaje imperativo simple + fallas con input-output.

Tarea Extender la sintaxis abstracta con los constructores correspondientes y re-definir la función semántica

                       sem :: Expr dom → Σ → dom

que implementa el significado de estas expresiones; implementar las instancias de la clase DomSem para Int, Bool y Ω.

0.5 - Combinar el lab4 con las nuevas definiciones de dominio (Ω), la clase Eval y sus instancias contenidas en Lab5.hs 1 - Agregar los nuevos constructores para input y output utilizando GADTs 2 - Implementar la función semántica para las nuevas construcciones.

Ejemplos

Asumiendo algunos nombres de constructores, particularmente EMark (!) y QMark (?).

Ejemplo 1 while x < 10 do !x ; x := x + 1 od

ej1 :: Expr Ω ej1 = While (Lt (Var "x") (Const 10)) $ Seq (EMark $ Var "x") (Assign "x" (Plus (Var "x") (Const 1)))

eval_ej1 :: IO () eval_ej1 = eval ej1 (_ -> 0)

Ejemplo 2 while y < 10 do ?x ; !x ; !y ; y := y + 1 od

ej2 :: Expr Ω ej2 = While (Lt (Var "y") (Const 10)) $ Seq (Seq (Seq (QMark "x") (EMark $ Var "x") ) (EMark $ Var "y") ) (Assign "y" (Plus (Var "y") (Const 1)))

eval_ej2 :: IO () eval_ej2 = eval ej2 (_ -> 0)

Ejemplo 3 ?x ; newvar x := 10 in !x end ; !x

ej3 :: Expr Ω ej3 = Seq (Seq (QMark "x") (Newvar "x" (Const 10) (EMark $ Var "x") ) ) (EMark $ Var "x")

eval_ej3 :: IO () eval_ej3 = eval ej3 (_ -> 0)

Uso

$ ghci Lab5.hs
*Main> eval_ej1
0
1
2
3
4
5
6
7
8
9
*Main>