Pular para o conteúdo
Hora local do proprietário em SP:
EXPERIMENTO 006 · yanawa

playground de linguagem mínima

tokens, árvore sintática, diagnósticos e um interpretador limitado

ativosimuladocriado em yanawa 7fd082ecódigo-fonte ↗

Pergunta

O que uma linguagem faz com algumas linhas de código antes de executá-las? Edite um programa pequeno e veja seus tokens, sua árvore sintática, erros legíveis e uma execução limitada, uma etapa por vez. A sintaxe é um pequeno subconjunto lido das notas de design do yanawa; o yanawa ainda não tem compilador, e este não é ele.

Bancada

bancada · executa neste navegador
Exemplos

Variáveis, uma anotação de tipo, strings e interpolação.

Código-fonte

Apenas espaços, 4 por nível nos exemplos. Os blocos terminam onde a indentação diminui. Comentários começam com //.

Problemas

Escolha um exemplo ou edite o código. As etapas se atualizam enquanto você digita.

    Etapas

    O lexer corta o código em tokens e transforma a indentação em tokens de indent e dedent.

    O que observar

    tokens
    Antes de entender qualquer coisa, o texto é cortado em tokens: palavras, números, strings, operadores. A indentação vira tokens de indent e dedent, que é como uma linguagem sem chaves marca seus blocos.
    árvore sintática
    O parser transforma a lista plana de tokens numa árvore que mostra a estrutura: `1 + 2 * 3` põe o `*` abaixo do `+` porque ele liga mais forte. A precedência está na árvore, não no texto.
    diagnósticos
    Uma boa mensagem diz o que era esperado, o que foi encontrado e onde. Depois de um erro, o parser pula a linha quebrada e continua, então um engano não esconde o próximo.
    avaliação
    O interpretador percorre a árvore. Nada é compilado e nada é avaliado como JavaScript: os nomes vivem nos escopos do próprio programa, então `process` ou `constructor` são apenas nomes indefinidos.
    limites
    Cada etapa tem um limite: tamanho do código, profundidade de aninhamento, passos de avaliação, profundidade de chamadas, saída e tamanho de string. Um laço infinito termina com uma mensagem em vez de travar a aba.

    Limites

    • Este não é o compilador do yanawa. O yanawa está na fase de design da linguagem e ainda não tem um compilador verificado. A sintaxe aqui é um pequeno subconjunto lido de suas notas de design (revisão 7fd082e), e as regras que as notas deixam em aberto foram decididas nesta página.
    • Incluído: let, const, fn com parâmetros tipados, if/elif/else, while, for sobre um intervalo, and/or/not, inteiros, strings com interpolação, booleanos, comentários //, print e len.
    • Não incluído: structs, enums, traits, tipos anuláveis, arrays, switch, floats, imports, erros como valores. As anotações de tipo (int, str, bool) são verificadas quando o programa roda; a verificação estática de tipos do yanawa não está implementada.
    • Um intervalo como 1..6 exclui o fim, e a divisão de inteiros trunca; as notas não fixam nenhum dos dois, então são escolhas feitas aqui.
    • O código é limitado a 4.000 caracteres e 200 linhas. Nada é guardado nem enviado a lugar nenhum.

    Fidelidade

    sintaxesubconjunto lido das notas do yanawa · revisão 7fd082e
    compilador do yanawaainda não existe · este não é ele
    execuçãointerpretador próprio · limitado · sem eval de JavaScript
    persistêncianenhuma · o código fica nesta aba

    Baseado nas notas de sintaxe e de arquitetura do compilador da revisão 7fd082e do yanawa. As notas deixam várias regras em aberto (fim do intervalo, divisão de inteiros, largura da indentação) e esta página fez suas próprias escolhas. Nada é compilado nem avaliado como JavaScript, e o código nunca é guardado nem enviado.

    Relacionados

    notas de sintaxe do yanawa — em inglêsgithub ↗notas de arquitetura do compilador do yanawa — em inglêsgithub ↗repositório do yanawagithub ↗