Skip to content

Latest commit

 

History

History
108 lines (91 loc) · 4.32 KB

File metadata and controls

108 lines (91 loc) · 4.32 KB

Proyecto - Interprete

Índice

Descripción

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.

Requisitos previos

  • Ocaml version 5.2 (or newer)
  • Opam version 2.1 (or newer)

Configuración inicial

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 alcotest

Implementaciones

Se agregaron los siguientes valores y operaciones al lenguaje:

  • Bool: el lenguaje soporta valores booleanos true y false
  • Operaciones booleanas : el lenguaje soporta las operaciones and y not
  • 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.src

Además, para ejecutar el interprete de forma interactiva se debe correr el comando:

dune utop
open Dev.Interp;;

Tests

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 test

Estructura del proyecto

ENTREGA0/                                   
├── _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 proyecto

Recursos

Documentación de las librerías de ocaml: