Skip to content

Conversation

@derickandrade
Copy link

Mudanças para Suporte a Meta Statements e Biblioteca Padrão (stdlib)

1. Meta Statements

  • Definição:
    Meta statements são comandos especiais reconhecidos pelo interpretador, que executam funções integradas diretamente no ambiente de execução.
  • Implementação:
    • Adicionado o tipo Statement::MetaStmt(String) na AST (src/ir/ast.rs).
    • O interpretador (src/interpreter/statement_execute.rs) agora reconhece esse tipo de statement e consulta uma tabela global de metabuiltins.
    • Se o nome do meta statement existir na tabela, a função correspondente é executada, podendo manipular o ambiente e retornar um novo statement.
    • Caso o nome não exista, é retornado um erro descritivo.

2. Biblioteca Padrão (stdlib)

  • Definição:
    A stdlib implementa funções integradas (metabuiltins) como input, print e open, acessíveis via meta statements.
  • Implementação:
    • Criada uma tabela estática global (METABUILTINS_TABLE) em src/stdlib/standard_library.rs usando OnceLock para garantir inicialização thread-safe.
    • Cada metabuiltin segue a assinatura:
      pub type MetaBuiltinStmt = fn(&mut Environment<Expression>) -> Statement;
    • As funções integradas acessam argumentos via o ambiente e retornam statements, geralmente do tipo Statement::Return.
    • Exemplo de funções disponíveis:
      • input(prompt?): Lê uma linha do usuário, exibindo um prompt opcional.
      • print(value?): Imprime um valor na saída padrão.
      • open(path, mode?): Abre um arquivo para leitura ou escrita.

3. Integração com o Interpretador

  • O interpretador, ao encontrar um MetaStmt, consulta a tabela de metabuiltins.
  • Se encontrar a função, executa-a com o ambiente atual.
  • O resultado pode ser um novo statement (por exemplo, um retorno de valor para o programa).

4. Extensibilidade

  • Para adicionar novas funções integradas:
    1. Implemente uma função com a assinatura MetaBuiltinStmt.
    2. Adicione-a à tabela em get_metabuiltins_table().
    3. Documente os parâmetros e comportamento.
    4. Inclua testes para validar a funcionalidade.

5. Exemplo de Uso

nome = input("Digite seu nome: ")
print("Olá, " + nome)

6. Referências de Código

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants