Skip to content

geeksLabTech/compilation-dsl-project

Repository files navigation

compilation-dsl-project

TZscript es un DSL para la creación de contratos inteligentes, tiene como objetivo compilar a código Michelson y generando un archivo .tz que es el código nativo que entiende la máquina virtual de Tezos.

Para saber como luce un contrato inteligente en TZscript,asi como las palabras claves de este lenguaje puede consultar la documentación en la carpeta doc del proyecto.

Lexing

Para el lexer de este proyecto se utiliza la biblioteca sly

Parsing

Para el parsing se desarrolló un parser SLR desde 0

Procesamiento del AST

El AST generado por el parser es procesado utilizando el patrón Visitor. Entre las distintas operaciones que se realizan sobre el AST destacan:

  • Type Check (Realiza un checkeo de tipos sobre el AST)
  • Semantic Check (Realiza un checkeo de semántico sobre el AST)
  • Intermediate Representation (Genera una representación intermedia que se utiliza luego para generar Código Michelson)
  • Michelson Generator (A partir de la representación intermedia genera código Michelson)

CLI:

Se brinda una interfaz de consola para construir los ficheros .tz de michelson o para obtener una representacion de AST.

  • Representación en string del AST realiza todo el proceso de verificación pero genera como resultado la representación del cóigo en el AST, genera un fichero 'file.tzs.rep'
python cli.py represent 'file.tzs'
  • Generación de código Michelson Genera código michelson a partir del código TzScript, si no se especifica un fichero de salida se generará un fichero 'file.tz'
python cli.py build 'file.tzs' 'out_file.tz'
  • Ayuda El cli cuenta con un menú de ayuda:
python cli.py --help
  • Ejecución de código en AST Procesa todo el archivo .tzs y ejecuta el código en el núcleo de python, se deberá definir un entry sin parámetros que será el que llamará al resto de funciones en el contrato

Esta condición es solo para cuando se ejecute el intérprete en python, el código michelson no necesita del entry anteriormente mencionado

python cli.py run 'file.tzs'