Interpretadores de expressões e integração entre linguagens

Participei da manutenção e extensão de uma biblioteca C++ existente, acrescentando funções, operadores e tipos em equipe. Desenvolvi individualmente sua versão WebAssembly para levar a avaliação de expressões ao navegador. Meu trabalho reuniu evolução do núcleo e implementação da ponte entre linguagens, com escopos de autoria distintos.

Participação
Equipe e contribuição individual Evolução de biblioteca em equipe e implementação individual da integração com navegador
Contexto
Experiência profissional em bibliotecas e integração entre linguagens

Contexto

Bibliotecas de interpretação transformam texto em uma estrutura que pode ser validada e avaliada. Usar essa capacidade em outro ambiente acrescenta uma fronteira de integração.

Minha contribuição combina trabalho coletivo sobre uma base existente e implementação individual da integração com navegador. Trata-se de experiência profissional, não de um produto pessoal.

Problema

Antes de avaliar uma expressão, é preciso reconhecer seus elementos, respeitar precedência e verificar se as operações são válidas para os tipos envolvidos.

Entre linguagens, conversões de valores, representação de erros e disponibilidade das operações precisam de contratos explícitos.

Minha atuação

Participei da manutenção e extensão da biblioteca C++ existente, adicionando funções, operadores e tipos em equipe; não criei o núcleo original.

Desenvolvi individualmente a versão WebAssembly e a integração com JavaScript para disponibilizar a avaliação no navegador.

Minha experiência também inclui participação em integração Ruby/C++, com autoria compartilhada.

Critérios técnicos

Na integração com navegador que desenvolvi, reutilizei o núcleo C++ por WebAssembly, em vez de reescrever o interpretador em JavaScript. Essa abordagem permite levar o comportamento existente a outro ambiente sem criar uma segunda implementação da interpretação.

Meu raciocínio técnico distingue o significado da expressão do transporte de valores entre linguagens: a ponte precisa tornar tipos, entradas, saídas e erros compreensíveis. Um exemplo pequeno, como 2 + 3 * 4, permite explicar precedência sem expor uma gramática profissional.

Alternativas e trade-offs

Critérios gerais e análise técnica escritos para este portfólio.

  • Reutilizar um núcleo pode reduzir divergências, mas não elimina diferenças de representação numérica, memória ou tratamento de falhas entre ambientes.
  • Validação sintática e validação de tipos são responsabilidades distintas. Um texto pode ter estrutura válida e ainda descrever uma operação sem sentido.

Aplicação e exemplos

Os exemplos visuais desta página foram escritos para o portfólio. Usam matemática comum e resultados pré-definidos, sem executar uma biblioteca profissional.

Exemplo independente com valores pré-definidos: sqrt(9) + 7 se divide em tokens e uma árvore. A raiz quadrada de 9 se torna 3; depois 3 + 7 se torna 10. A chuva decorativa usa apenas operações matemáticas comuns. Nenhum interpretador é executado.
  1. Tokenização

    Reconhecer números, operadores e parênteses como elementos separados do texto.

  2. Estrutura

    Organizar os elementos segundo precedência e agrupamento antes de avaliar.

  3. Validação

    Conferir operandos e tipos. Um texto em uma multiplicação numérica produz um erro no exemplo.

  4. Integração

    Definir como valores e erros atravessam a fronteira entre o código nativo e a aplicação que o utiliza.

Visualização

Etapa 1 de 5: Expressão

Fórmula válida

01 · Expressão

quantidade * preco * (1 - desconto)

02 · Tokens

  • quantidadevariável
  • *operador
  • precovariável
  • *operador
  • (parêntese
  • 1número
  • -operador
  • descontovariável
  • )parêntese

03 · Estrutura

Multiplicação entre (quantidade × preco) e (1 − desconto). Os parênteses fazem a subtração acontecer antes da multiplicação final.

04 · Validação

  • Variáveis definidas: quantidade, preco, desconto
  • O operador * recebe dois números
  • O operador - recebe dois números

05 · Resultado

108

3 × 40 × (1 − 0,1) = 108

Valores de exemplo: quantidade = 3 · preco = 40 · desconto = 0,1

Fórmula com erro

01 · Expressão

quantidade * preco * (1 - "10%")

02 · Tokens

  • quantidadevariável
  • *operador
  • precovariável
  • *operador
  • (parêntese
  • 1número
  • -operador
  • "10%"texto
  • )parêntese

03 · Estrutura

Multiplicação entre (quantidade × preco) e (1 − "10%"). A estrutura é sintaticamente válida: o problema só aparece na análise semântica.

04 · Validação

  • Variáveis definidas: quantidade, preco
  • O operador * recebe dois números
  • O operador - recebe um número e um texto

05 · Resultado

O operador "-" recebeu um número e um texto. A fórmula é rejeitada antes de qualquer cálculo.

Valores de exemplo: quantidade = 3 · preco = 40

Descrição em texto

Fórmula válida

  1. Expressão: quantidade * preco * (1 - desconto). O texto da fórmula, como alguém escreveria em uma regra de negócio.
  2. Tokens: quantidade (variável), * (operador), preco (variável), * (operador), ( (parêntese), 1 (número), - (operador), desconto (variável), ) (parêntese).
  3. Estrutura: Multiplicação entre (quantidade × preco) e (1 − desconto). Os parênteses fazem a subtração acontecer antes da multiplicação final.
  4. Validação: Variáveis definidas: quantidade, preco, desconto (ok); O operador * recebe dois números (ok); O operador - recebe dois números (ok).
  5. Resultado: 3 × 40 × (1 − 0,1) = 108

Fórmula com erro

  1. Expressão: quantidade * preco * (1 - "10%"). O texto da fórmula, como alguém escreveria em uma regra de negócio.
  2. Tokens: quantidade (variável), * (operador), preco (variável), * (operador), ( (parêntese), 1 (número), - (operador), "10%" (texto), ) (parêntese).
  3. Estrutura: Multiplicação entre (quantidade × preco) e (1 − "10%"). A estrutura é sintaticamente válida: o problema só aparece na análise semântica.
  4. Validação: Variáveis definidas: quantidade, preco (ok); O operador * recebe dois números (ok); O operador - recebe um número e um texto (falha).
  5. Resultado: O operador "-" recebeu um número e um texto. A fórmula é rejeitada antes de qualquer cálculo. Não avaliada. O erro é reportado antes da execução.
Ilustração conceitual Exemplo didático independente de interpretação e validação. Os resultados são pré-definidos; nenhuma biblioteca de avaliação é executada no navegador.

O que esta experiência demonstra

Desenvolvi uma versão WebAssembly que disponibiliza a avaliação de expressões no navegador, além de participar da evolução do núcleo C++ em equipe. A autoria individual é da versão para navegador, não de toda a biblioteca ou de todas as integrações.

A demonstração desta página explica conceitos com dados fictícios; não representa a gramática, o catálogo ou a execução do trabalho profissional.

Tecnologias

  • C++
  • WebAssembly
  • JavaScript
  • Parsing

Conte qual problema você precisa resolver

Quer contratar para sua equipe ou resolver um problema do seu produto? Conte o contexto e o resultado esperado. Podemos conversar sobre uma posição de Senior Full Stack Developer ou Tech Lead, desenvolvimento de projeto ou consultoria técnica.

WhatsApp

+55 71 99705-3401

Abre o WhatsApp com uma mensagem inicial que você pode editar. Nada é enviado automaticamente.

Também estou no GitHub e no LinkedIn.