https://github.com/emmanuelmess/interactivesetlanguage
An interactive language for dealing with sets with Haskell
https://github.com/emmanuelmess/interactivesetlanguage
haskell interactive set
Last synced: 3 days ago
JSON representation
An interactive language for dealing with sets with Haskell
- Host: GitHub
- URL: https://github.com/emmanuelmess/interactivesetlanguage
- Owner: EmmanuelMess
- License: bsd-3-clause
- Created: 2021-12-08T01:49:56.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-12-08T16:35:35.000Z (over 4 years ago)
- Last Synced: 2025-03-05T09:20:36.760Z (about 1 year ago)
- Topics: haskell, interactive, set
- Language: Haskell
- Homepage:
- Size: 10.7 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog.md
- License: LICENSE
Awesome Lists containing this project
README
# Interactive Set Language
This is a proposal for final project for the programming language analysis course.
## How to run
stack setup
stack build
stack exec TPFinal-exe
## About
Para mi projecto final, se propone la creación de un lenguaje de dominio especifico
que permite el procesamiento de conjuntos, llamado lenguaje de conjuntos
interactivo (ICL), esto se hace de la siguiente manera:
* se definen las operaciones a+b, a-b, a^b que son la unión, resta e intersección de conjuntos respectivamente
* se definen los operadores "-" unario, "print" e "in", el primero representa el complemento,
el segundo imprime un conjunto, y el in permite saber si un elemento pertenece a un conjunto
* se definen los constructores [] y {}, el primero crea un conjunto cerrado [a; b]
y el segundo crea un conjunto por sus elementos {a; b; c; d}
* se define el operador "exit" que termina la ejecución
* se definen los valores v como un flotante que puede ser negativos
Este lenguaje es interpretado y se ejecuta desde terminal, un ejemplo:
ISL> x = [1.0, 2.0]
ISL> y = -x
ISL> print y
[-inf *=* 1.0, 2.0 *=* inf]
Para implementar este TP final se requiere el uso de:
* Parsec (https://hackage.haskell.org/package/parsec) para parsear la entrada
* Data.Range (https://hackage.haskell.org/package/range-0.3.0.2/docs/Data-Range.html)
* y otros: Data.Map.Strict, Data.Maybe, Prelude
* Tambien se usa stack para obtener dependencias
Manejo de errores:
* Para errores de sintaxis se emite el error de Parsec, que es muy detallado respecto
de lo que se esperaba.
* (no implementado) Para conjuntos se avisa cuando un conjunto es vacio pero no
se ingreso con el constructor "{}", por ejemplo "x = [3.0, 2.0]" es vacio, pero probablemente
un error de tipeo, entonces se emite: "Warning: x is empty but {} was not used to declare it".
* Para manejo de errores de variables no declaradas se emite "Error: x not declared".
## Examples
```
ISL> a = {}
ISL> print a
[]
ISL> b = {1.0}
ISL> print b
[SingletonRange 1.0]
ISL> c = {1.0, 2.0}
ISL> print c
[SingletonRange 1.0, SingletonRange 2.0]
ISL> d = [3.0, 4.0]
ISL> print d
[3.0 +=+ 4.0]
ISL> e = c + d
ISL> print e
[SingletonRange 1.0, SingletonRange 2.0, 3.0 +=+ 4.0]
```