Tema 05 Experiência profissional · Parsing · Tipos · WebAssembly
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.
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.
Tokenização
Reconhecer números, operadores e parênteses como elementos separados do texto.
Estrutura
Organizar os elementos segundo precedência e agrupamento antes de avaliar.
Validação
Conferir operandos e tipos. Um texto em uma multiplicação numérica produz um erro no exemplo.
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*operadorprecovariável*operador(parêntese1número-operadordescontovariá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*operadorprecovariável*operador(parêntese1nú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
- Expressão:
quantidade * preco * (1 - desconto). O texto da fórmula, como alguém escreveria em uma regra de negócio. - Tokens: quantidade (variável), * (operador), preco (variável), * (operador), ( (parêntese), 1 (número), - (operador), desconto (variável), ) (parêntese).
- Estrutura: Multiplicação entre (quantidade × preco) e (1 − desconto). Os parênteses fazem a subtração acontecer antes da multiplicação final.
- Validação: Variáveis definidas: quantidade, preco, desconto (ok); O operador * recebe dois números (ok); O operador - recebe dois números (ok).
- Resultado: 3 × 40 × (1 − 0,1) = 108
Fórmula com erro
- Expressão:
quantidade * preco * (1 - "10%"). O texto da fórmula, como alguém escreveria em uma regra de negócio. - Tokens: quantidade (variável), * (operador), preco (variável), * (operador), ( (parêntese), 1 (número), - (operador), "10%" (texto), ) (parêntese).
- Estrutura: Multiplicação entre (quantidade × preco) e (1 − "10%"). A estrutura é sintaticamente válida: o problema só aparece na análise semântica.
- 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).
- 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.
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.