Skip to content

ULL-ESIT-GRADOII-TFG/TFG-Eleazar-18

Repository files navigation

ScriptFlow

ScriptFlow es un lenguaje de programación interpretado pensado para la creación de lenguajes de dominios específicos. El objetivo del lenguaje es combinar ficheros de configuración, con características del lenguaje y APIs Webs

Instalación

ScriptFlow permite una sencilla instalación por medio del uso de la herramienta Stack. La cual es un wrapper a cabal, el cual gestiona las dependencias. Stack se encarga de asegurar que es posible construir el proyecto en periodo largo de tiempo, ya que el proyecto se fija a una version del LTS(Long Term Support).

Stack también gestiona la instalación del compilador. El primer paso es instalar dicha herramienta:

wget -qO- https://get.haskellstack.org/ | sh

O se puede usar un paquete específico según el sistema operativo que se este usando. Consultar en la página de Stack.

El siguiente paso es instalar el compilador y las dependencias necesarias:

git clone https://github.com/ULL-ESIT-GRADOII-TFG/TFG-Eleazar-18
cd TFG-Eleazar-18

stack build

Una vez ejecutado todos los comandos, se podrá realizar una instalación en el directorio local de binarios del sistema operativo correspondiente en el caso de Linux $HOME/.local/bin

stack install

En el caso de que no se quiera instalar, se puede hacer uso de:

stack exec scriptflow -- args

Donde args son los argumentos que se pasaran al ejecutable scriptflow.

Cualquier modificación en el código fuente requiere volver a ejecutar. stack build

Uso

Una vez realizado el proceso de instalación, el ejecutable nos brinda diversas opciones, las cuales pueden ser consultadas mediante el argumento --help

La ejecución del ejecutable sin ningún argumento iniciará el intérprete cargando la configuración por defecto, que en caso de no existir se creará. Se puede cargar otra configuración con el parámetro --config=filepath_to_conf

Otra opción es ejecutar un script de ScriptFlow. Pasando el archivo como argumento (No se tiene en cuenta que extensión se use).

scriptflow script.sf

Configuración

El fichero de configuración se localiza mediante el estándar XDG. Normalmente localizado en /home/username/.config/scriptflow La configuración es un fichero tipo YAML. El cual permite especificar parámetros de configuración, tales como el prompt, shell. O parametros específicos con la API Web; tales como la autenticación o posibles preferencias.

Prompt

En el modo interactivo del intérprete (repl) permite la personalización del prompt. Tales como la salida de la ejecución de comandos shell, y diversos comandos propios del intérprete. La configuración del prompt se puede realizar desde el fichero de configuración en la sección repl.

Por defecto, la sección del prompt contiene la siguiente configuración:

repl:
  # ...
  prompt: |
     $"pwd".exec().strip() ++ " >>> "
  # ...

La configuración del prompt debe ser una expresión de ScriptFlow.

REPL

El REPL puede ser accedido mediante comando de líneas scriptflow, o con la finalización de ejecución de un script con la opción -e. Se pueden ver más opciones del ejecutable del intérprete mediante scriptflow --help. Una vez, iniciado el REPL se mostrará por defecto el prompt predeterminado.

Desde el REPL se puede escribir cualquier tipo de expresión definida por el lenguaje. Y los comandos del intérprete los cuales comienzan por “:”. Se puede ver una lista de los comandos con :help

  • :instr

    Permite visualizar, a que instrucciones se traduce el código. Estas instrucciones son parciales solo sirven de guía.

  • :mem

    Muestra parcialmente las variables disponibles en memoria.

  • :quit

    Sale del intérprete.

  • dir obj Permite visualizar métodos y atributos de un objeto dir "val". Actualmente se encuentra en desarrollo esta funcionalidad.

Documentation

See ./docs/lang.pdf

Work in Progress:

  • Usar FUSE para montar la API
    • Se necesita una ubicacion para el punto de montaje
    • Ubicación para los repositorios
  • No establecer las direcciones de los argumentos en las funciones al generar el scope. Aplazarlo al runtime.
  • El tema de lo errores se debe mejorar.
    • Los errores internos del compilador, deben producir version+commit y localizacion de lanzamiento de excepcion.
    • Los errores del codigo compilado deben consolidarse. E imprimir correctamente la seccion y localizacion, Como un texto informativo del error
  • Implementar el config dentro del interprete
    • Pensar una forma de realizar interpolación de cadenas
      • Requiere un tipo nuevo LStr ([Object] -> String)
      • Se puede obviar por el momento construir un método interno para propósito específico
  • Realizar las comunicaciones con el API de Github
    • Mediante el propio lenguaje o de forma interna

License

The 3-Clause BSD License