A DSL for drawing manipulation, based on an algebraic approach. Decouples syntax and semantics for easy customization and modifications for diverse applications. Provides default support for screen printing using Gloss library. Project developed as part of the Programming Paradigms university course at FaMAF - UNC. Language idea based on the Peter Henderson paper
- Clone the repository
git clone https://github.com/Naevier/Domain-Specific-Language.gitcurl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
cabal update
cabal install glossThe drawings can be printed from the src directory with
$ ghci Main.hs
ghci> :set args Escher
ghci> mainwhere the argument (Escher in the example) represents the name of the drawing that will be displayed on the screen, and can be replaced with the name of any other drawing. New drawings can be added creating a new file in the Dibujos directory, importing the new module into the Main file, and adding it to the configs list in the same file.
The complete list of available drawings can be consulted by using --lista as argument.
Escher drawing
Drawing DSL uses HUnit as a test framework. It can be installed with
cabal install HUnitand the tests can be run from the test directory over the functions of Dibujo.hs with
$ ghci TestDibujo.hs -i ../src/Dibujo.hs
ghci> mainand over the functions of Pred.hs with
$ ghci TestPred.hs -i ../src/Dibujo.hs ../src/Pred.hs
ghci> main| File | Description |
|---|---|
| Main.hs | Main program |
| Dibujo.hs | Data structure and operations for Dibujo type (syntax) |
| Interp.hs | Geometric interpretation of the drawings (semantic) using Gloss |
| FloatinPic.hs | Vector data types and geometric interpretation of the grid |
| Pred.hs | Predicates over drawings (deprecated) |
| Grilla.hs | Functions over the grid |
| Dibujos/GrillaNumerada.hs | Numbered-grid sample drawing |
| Dibujos/Feo.hs | Test drawing that demonstrates the functions |
| Dibujos/Escher.hs | Escher-style recursive drawing |
| tests/TestDibujo.hs | Test suite for the Dibujo module |
| tests/TestPred.hs | Test suite for the Pred module |
Each drawing is associated with an instance of the Dibujo type, which includes its own set of basic drawings and semantics. This approach makes it possible to extend the DSL with new basic figures and interpretations of the semantics, such as adding support for SVG printing for example.
The basic figures can be easily changed in the interpBas function of each drawing, and the semantics can be changed in the Interp file
- @naevier
- @Gonzalia
- @Conyweasley
- @beta-ziliani (kickstart)
This DSL is licensed under the Apache License, Version 2.0 - See the license file for more information
