Compilação

Fazendo a compilação de um script vivi-lang.

Importação

Considere importar a biblioteca da vivi-lang, aqui demos o nome de @fantastic/compiler

import { compile } from "@fantastic/compiler";

Execução da compilação

A execução da compilação

import { compile } from "@fantastic/compiler";

const sourceCode = `
$<vivi>
  // your vivi-lang code
$</vivi>
`
const tree = compile(sourceCode)

console.log(tree)

Com sucesso

Gerando a compilação do seguinte código em vivi-lang

$<vivi>
  print("Hello World");
$</vivi>

O retorno será a árvore no seguinte formato:

{
    "nodeType": "$<vivi>",
    "left": {
        "nodeType": "id",
        "left": {
            "nodeType": "print",
            "left": {
                "nodeType": "id",
                "value": "name"
            }
        },
        "right": null
    },
    "right": {
        "nodeType": "$</vivi>",
        "left": null,
        "right": null
    }
}

Com erro léxico

Gerando a compilação do seguinte código em vivi-lang onde o @ não é um token válido

$<vivi>
  print(name);
  @
$</vivi>

O retorno será um LexicalException no seguinte formato:

{
    error: "UNEXPECTED_CHARACTER",
    line: 3,
    column: 2,
}

Com erro sintático

Gerando a compilação do seguinte código em vivi-lang, removido ;

$<vivi>
  print(name)
$</vivi>

O retorno será um SyntaxException no seguinte formato:

{
    error: "EXPECTED_TOKEN",
    token: { type: '$</vivi>', value: '$</vivi>', line: 3, column: 1 },
    tokenType: ';'
}