Entenda como seu código Jech é processado e executado
Nesta página, você vai descobrir como o comando say("hello world");
passa por cada etapa do nosso compilador/interpretador até ser executado.
Vamos explorar todas as fases: desde a análise léxica até a execução final.
Digite um código Jech e veja como ele é processado em cada etapa:
O código fonte é dividido em tokens (unidades mínimas de significado).
Cada caractere é lido e agrupado em categorias: palavras-chave, identificadores, operadores, literais, etc.
Os tokens são organizados em uma Árvore Sintática Abstrata (AST).
O parser verifica se a sequência de tokens segue as regras gramaticais da linguagem.
Verifica se o código faz sentido lógico.
Checa tipos de dados, escopo de variáveis, e se funções/variáveis foram declaradas antes de serem usadas.
A AST é convertida em bytecode ou código intermediário.
Este formato é mais fácil de executar e otimizar que a AST original.
O código intermediário é executado pela máquina virtual.
A VM interpreta cada instrução e executa as operações correspondentes.
O que faz: Transforma o código fonte (string) em uma sequência de tokens.
say("hello world");
[
{ type: 'IDENTIFIER', value: 'say' },
{ type: 'LPAREN', value: '(' },
{ type: 'STRING', value: 'hello world' },
{ type: 'RPAREN', value: ')' },
{ type: 'SEMICOLON', value: ';' }
]
O que faz: Organiza os tokens em uma estrutura hierárquica (AST) que representa a estrutura do programa.
CallExpression
├── callee: Identifier("say")
└── arguments:
└── StringLiteral("hello world")
O que faz: Verifica se o código faz sentido do ponto de vista lógico.
say existe?O que faz: Converte a AST em instruções mais simples e otimizadas.
LOAD_CONST "hello world" ; Carrega a string
LOAD_GLOBAL say ; Carrega a função say
CALL_FUNCTION 1 ; Chama com 1 argumento
POP_TOP ; Remove resultado da pilha
O que faz: Executa as instruções do bytecode usando uma máquina virtual.
LOAD_CONST "hello world"LOAD_GLOBAL say e empilha a funçãoCALL_FUNCTION 1: desempilha função e argumento, executasay imprime "hello world" no consolePOP_TOP remove o resultado da pilhasay)