Skip to content

Compiler

Edgar Mesquita edited this page Jan 25, 2026 · 10 revisions

O Compilador (CSharpToJs)

O compilador é o componente central que permite a magia do eQuantic.UI. Ele transforma a semântica do C# em código TypeScript eficiente e legível.

🛠️ Componentes do Compilador

1. TypeScriptEmitter

O TypeScriptEmitter é o ponto de entrada para a geração de arquivos .ts. Ele organiza as importações, define as classes e utiliza o CSharpToJsConverter para converter os corpos dos métodos.

2. CSharpToJsConverter

Uma implementação baseada no padrão Strategy que percorre a árvore sintática (AST) do Roslyn.

  • Cada tipo de expressão ou declaração C# possui uma estratégia dedicada (ex: BinaryExpressionStrategy, IfStatementStrategy).

3. Heurísticas de Identificadores

O conversor aplica heurísticas inteligentes para decidir como mapear nomes de variáveis:

  • Propriedades e campos do C# são mapeados para this.propertyName no JS.
  • Variáveis locais e parâmetros mantêm seus nomes originais.
  • Métodos do sistema como Console.WriteLine são automaticamente mapeados para console.log.

🔄 Estratégias Suportadas

Atualmente, o compilador suporta uma vasta gama de construções C#:

  • Expressões: Aritméticas, Lógicas, Ternários, Null-coalescing (??).
  • Control Flow: if, switch, for, foreach, while.
  • Exceções: Suporte completo a try-catch-finally.
  • LINQ: Conversão direta de métodos LINQ para equivalentes JS (Selectmap, Wherefilter).
  • Async/Await: Mapeamento de Task para Promise e suporte a await nativo.

📝 Exemplo de Conversão

C# Source:

private void Increment() {
    Count++;
    if (Count > 10) Console.WriteLine("Max reached");
}

TypeScript Output:

increment() {
    this.count++;
    if (this.count > 10) console.log("Max reached");
}

Clone this wiki locally