- Descripción
- Requisitos previos
- Configuración inicial
- Implementaciones
- Tests
- Estructura del Proyecto
- Recursos
Interprete desarrollado en ocaml que permite correr programas con operaciones simples, tales operaciones aritméticas/booleanas, condicionales, definiciones de valores y funciones de primera clase.
- Ocaml version 5.2 (or newer)
- Opam version 2.1 (or newer)
Para poder ejecutar el proyecto se necesita configurar el ambiente con los siguientes comandos:
opam init
opam update
opam switch create compilation 5.2.0
eval $(opam env)
opam install dune utop merlin containers alcotestSe agregaron los siguientes valores y operaciones al lenguaje:
- Bool: el lenguaje soporta valores booleanos
trueyfalse - Operaciones booleanas : el lenguaje soporta las operaciones
andynot - Operaciones aritméticas: el lenguaje soporta resta usando el operador
-y división usando el operador/ - Comparación: el lenguaje soporta comparación entre números usando el operador
<y= - Condiciones: el lenguaje soporta evaluación acorde a condiciones usando el operador
if bool-cond branch-true branch-false - Definiciones de variables: el lenguaje soporta definición de variables unarias como
(let (var expr) body)y definiciones múltiples de la forma(let ((var expr) ...) body) - Funciones de primera clase: el lenguaje soporta funciones definidas de la forma
(fun arg body)
Además se agregó la funcion simplify que aplica las siguientes simplificaciones a una expresión:
x + 0 = x = 0 + x
1 * x = x = x * 1 De esta manera un programa válido para el lenguaje sería:
(let ((f (fun (x) (+ 3 x)))
(g (fun (y) (* 7 y)))
(z (< 5 10)))
(if (not z) (f 27) (g 10)))Para probar el interprete se pueden escribir programas en la carpeta examples de la forma nombre_programa.src y luego ejecutarlo con el comando:
make interp src=examples/nombre_programa.srcAdemás, para ejecutar el interprete de forma interactiva se debe correr el comando:
dune utop
open Dev.Interp;;Se realizaron test que verifican los valores y operaciones agregados al lenguaje, además de testear la función para simplificar expresiones. No se realizaron tests de las excepciones que se lanzan al checkear igualdad de tipos en operaciones.
Para correr los test implementados es necesario ejecutar el siguiente comando:
make testENTREGA0/
├── _build # Ocamlbuild
├── .devcontainer # Ambiente de desarrollo
├── dev/ # Archivos principales de OCaml
│ ├── ast.ml # Árbol de sintáxisis abstracta
│ ├── interp.ml # Intérprete
│ ├── lib.ml # Estructuras
│ ├── parse.ml # Parse
│ └── dune
├── examples/ # Ejemplos de programas
│ ├── prog0.src # Programa con operación aritmética
│ ├── prog1.src # Programa con let anidados
│ ├── prog2.src # Programa con let con múltiples valores
│ ├── prog3.src # Programa con let como valor
│ └── prog4.src # Programa con operación condicional
├── execs/ # Archivos ejecutables de Ocaml
│ ├── run.ml # Archivo para correr programas
│ ├── test.ml # Archivo para correr tests
│ └── dune
├── .gitignore # Archivos ignorados por Git
├── .ocamlformat
├── dune-project
├── dune-workspace
├── Makefile # Comandos del proyecto
└── README.md # Documentación del proyectoDocumentación de las librerías de ocaml: