<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cumbuca Dev</title>
    <description>The latest articles on DEV Community by Cumbuca Dev (@cumbucadev).</description>
    <link>https://dev.to/cumbucadev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3698971%2Ff3b85dd5-04c6-4446-b9ef-40c4fbf2290b.png</url>
      <title>DEV Community: Cumbuca Dev</title>
      <link>https://dev.to/cumbucadev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cumbucadev"/>
    <language>en</language>
    <item>
      <title>Avaliador Sintático: Como Funciona no Pituguês</title>
      <dc:creator>Cumbuca Dev</dc:creator>
      <pubDate>Mon, 23 Mar 2026 12:51:12 +0000</pubDate>
      <link>https://dev.to/cumbucadev/avaliador-sintatico-como-funciona-no-pitugues-209a</link>
      <guid>https://dev.to/cumbucadev/avaliador-sintatico-como-funciona-no-pitugues-209a</guid>
      <description>&lt;p&gt;Depois de tratarmos sobre o Lexador, vamos avançar para a próxima etapa do processo que torna possível transformar uma linguagem de alto nível em linguagem de máquina, permitindo o desenvolvimento de uma linguagem de programação: o Avaliador Sintático!&lt;/p&gt;

&lt;p&gt;Este termo foi a escolha feita pela Design Líquido como tradução de um parser, mas também podemos encontrar por aí outros nomes equivalentes como AST Walker, AST Evaluator ou até mesmo Analisador Sintático.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retomando alguns conceitos…
&lt;/h3&gt;

&lt;p&gt;Lembram que o Lexador gera uma lista de símbolos (tokens) a partir das instruções que escrevemos no código-fonte do nosso programa? Tomemos o mesmo exemplo do artigo anterior, ao declararmos a variável:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nome_da_linguagem = "Pituguês"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O Lexador irá mapear cada elemento que contém nesta linha de código, retornando um vetor (array) de objetos Símbolo, em que é identificado o seu tipo e lexema. Estas informação são imprediscíveis para que o Avaliador Sintático possa dar continuidade da tradução da linguagem de alto nível para a de baixo nível e, assim, executar o programa que escrevemos.&lt;/p&gt;

&lt;p&gt;Mas escrever código e ter seus símbolos identificados por um Lexador não é o suficiente para que se possa tornar uma linguagem de programação executável, é a apenas a primeira parte do processo. Tomando como exemplo o Pituguês, imagine que o Lexador foi capaz de identificar a declaração de variável da seguinte linha de código:&lt;/p&gt;

&lt;p&gt;var nome_da_linguagem = "Pituguês"&lt;br&gt;
Nessa linha de código, o Lexador identificou que há dois símbolos que foram categorizados como identificadores, como nomes de variáveis, a palavra var e a palavra nome_da_linguagem. Até aí tudo bem, porque é a função dele apenas mapear os símbolos e seu tipos.&lt;/p&gt;

&lt;p&gt;Mas quando tentamos executar este código…&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg1xo2g3jhyus6zr8nr9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg1xo2g3jhyus6zr8nr9.png" width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A palavra var não é reconhecida pela linguagem por não fazer para de sua gramática e por isto temos retornado o erro acima que nos impede de executar o código. Afinal, assim como um idioma que segue uma estrutura sintática para gerar conexão entre palavras e transmitirmos uma mensagem, as linguagens de programação funcionam da mesma forma.&lt;/p&gt;

&lt;p&gt;Os símbolos que compõem uma instrução de um código precisam o corresponder a uma ordem para serem reconhecidos dentro da regra gramatical da linguagem. Então, por exemplo, não podemos declarar uma variável assim:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nome_da_linguagem "Pituguês" =&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Como o Avaliador Sintático avalia os tokens do Lexador?
&lt;/h1&gt;

&lt;p&gt;Como foi comentado antes, o Lexador gera uma lista dos símbolos que existem no código escrito e ele vai enviar essa lista para o Avaliador Sintático. A partir do momento em que o Avaliador Sintático tem acesso a esta lista de símbolos com seus devidos tipos identificados, ele terá ciência sobre o significado daquele símbolo. Isto é de suma importância pois é como o Avaliador conseguirá determinar a função daquela comando no programa.&lt;/p&gt;

&lt;p&gt;Esta etapa é como se fosse uma análise sintática de uma oração mesmo, um momento em que iremos identificar a classe e função de cada palavra em uma frase, como:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4mty54t7hmwdpvgbyyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4mty54t7hmwdpvgbyyp.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perceba que cada palavra está ordenada de uma forma que faça sentindo para transmitir sua mensagem na língua portuguesa. Cada palavra pertence a uma classificação gramatical que possui uma função específica que determina seu propósito dentro da frase.&lt;/p&gt;

&lt;p&gt;Usando o exemplo da frase acima, é como se o Lexador identificasse que existe um pronome, um verbo, uma preposição e um substantivo, nessa respectiva ordem. O Avaliador Sintático vai, agora, identificar qual é a função desses elementos e verificar se eles estão ordenados seguindo o padrão de “SUJEITO + VERBO + OBJETO”.&lt;/p&gt;

&lt;p&gt;A nossa linha de código vai sofrer um processo parecido de identificação quanto a função dela naquele programa. Mas, desta vez, irá analisar se há elementos como variáveis, condicionais, laços de repetição e etc. Tomemos como exemplo a declaração de variável que já usamos antes do Pituguês:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nome_da_linguagem = "Pituguês&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Quando o Avaliador recebe esta linha de código, terá sido mapeado que ali temos um identificador, um sinal de atribuição de valor e, por último, temos o valor, um dado de tipo textual. Após receber esta sequência de caracteres com seus significado, será analisado se aquela linha de código está na ordem correta para que seja considerada uma declaração variável. Isto será processado dentro desta função (você pode encontrá-la &lt;a href="https://github.com/DesignLiquido/delegua/blob/principal/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private async declaracaoImplicitaVariaveis(): Promise&amp;lt;Var&amp;gt; {
    const identificador = this.consumir(
        tiposDeSimbolos.IDENTIFICADOR,
        'Esperado nome de variável.'
    );
    this.consumir(tiposDeSimbolos.IGUAL, "Esperado '=' após identificador.");
    if (this.estaNoFinal()) {
        throw this.erro(
            this.simboloAnterior(),
            'Esperado valor após o símbolo de igual.'
        )
    }
    const valor = await this.expressao();
    const tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(valor, 'qualquer');
    this.pilhaEscopos.definirInformacoesVariavel(
        identificador.lexema,
        new InformacaoElementoSintatico(identificador.lexema, tipo)
    );
    return new Var(identificador, valor, tipo);
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesta função, em código TypeScript, sua assinatura espera que seja construído um objeto do tipo Var, para criarmos uma variável, após o avaliador receber aquela linha de código. Só que esta variável só será construída após passar pelas validações na função acima:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;const identificador&lt;/code&gt;: irá armazenar o identificador a nossa variável;&lt;br&gt;
É validado se existe o sinal de igual para atribuição de valor;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verifica se há algum valor após o sinal de atribuição;&lt;br&gt;
const valor: é quando o código vai verificar qual é o dado que queremos armazenar na variável;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;const tipo&lt;/code&gt;: a partir do valor, identifica o tipo do dado;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adiciona à pilha de escopo do programa a variável;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Por fim, a função retorna um objeto Var, com as constantes e seus valores definidos na função: &lt;code&gt;identificador&lt;/code&gt;, &lt;code&gt;valor&lt;/code&gt;e &lt;code&gt;tipo&lt;/code&gt;.&lt;br&gt;
Ou seja, apenas após passar por todo esse processamento e validações é que o Pituguês conseguiu gerar uma variável para aquela linha de código.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Composição de um programa
&lt;/h1&gt;

&lt;p&gt;Até aqui, conseguimos entender como o Avaliador Sintático é capaz de reconhecer uma variável, só que é preciso lembrar que um programa não consiste em apenas um elemento. Geralmente, acabamos usando uma série de construções como condicionais, funções, laços de repetição, criação de classes, enfim, temos uma ampla gama de comandos que podemos elaborar num programa.&lt;/p&gt;

&lt;p&gt;Todavia, além do processo de identificar as instruções do código, a função do Avaliador Sintático também é construir uma forma de representação hierárquica dele, conhecida por AST (Abstract Syntax Tree, ou Árvore de Sintaxe Abstrata). E é essa representação que, mais a frente, permitirá que nosso Interpretador percorra e execute o programa desenvolvido.&lt;/p&gt;

&lt;p&gt;Mas, antes, vamos entender o que é uma…&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura de Dados em Árvore
&lt;/h2&gt;

&lt;p&gt;Quando nos referimos ao tema de estrutura de dados, lidamos com formas de armazenamento de dados que são lineares por terem um início e um fim, como vetores, pilhas e filas. A árvore também é uma estrutura de dados, porém, ela não opera de forma linear como as outras mencionadas, mas de maneira hierárquica e permite um crescimento contínuo de dados.&lt;/p&gt;

&lt;p&gt;Imagine que você elaborou uma lista de filmes que quer baixar para assistir mais tarde. Pensando em estrutura de dados, você pode guardar essa lista num vetor, como, por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lista_de_filmes = [
 "Um conto chinês",
 "Nunca deixe de lembrar",
 "Nosferatu",
 "O enigma de Kaspar Hauser".
 "Cidade de Deus",
 "Minha mãe é uma peça",
 "Bacurau",
 "Parasita",
 "Invasão Zumbi"
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em um vetor, conseguimos ter essa visão mais panorâmica do que há na nossa lista e selecionar um item pela sua posição dentro do vetor, simplesmente por percorrer a estrutura com um laço de repetição, por exemplo. E até aqui tudo bem, porque a intenção era apenas de ter uma listagem dos filmes que se pretendia assistir.&lt;/p&gt;

&lt;p&gt;Agora, você já baixou os filmes e criou uma pasta chamada FILMES no seu computador para deixar eles guardadinhos ali dentro, mas isso te deixou incomodado porque só colocar os arquivos ali não ficou exatamente organizado. Então, que tal organizar os filmes de acordo com seu país de lançamento?&lt;/p&gt;

&lt;p&gt;Podemos ter uma organização em que iremos aninhar os filmes de acordo com seu país e ela ficaria mais ou mesmo assim…&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── FILMES
│ ├── Argentina
│ │ ├── Um conto chinês
│ ├── Alemanha
│ │ ├── Nunca deixe de lembrar
│ │ ├── Nosferatu
│ │ ├── O enigma de Kaspar Hauser
│ ├── Brasil
│ │ ├── Cidade de Deus
│ │ ├── Minha mãe é uma peça
│ │ ├── Bacurau
│ ├── Coreia do Sul
│ │ ├── Parasita
│ │ ├── Invasão Zumbi

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É só pensar num sistema de arquivos no seu computador de forma simplificada: depois de dividir os filmes em diretórios de acordo com seu país, você não vai mais conseguir acessar o filme da mesma forma que conseguia como no vetor de antes.&lt;/p&gt;

&lt;p&gt;Agora, se quiser assistir o filme “Cidade de Deus”, vai precisar navegar pelo caminho de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selecionar o diretório FILMES&lt;/li&gt;
&lt;li&gt;Depois o diretório Brasil&lt;/li&gt;
&lt;li&gt;E, por fim, o filme “Cidade de Deus“&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja, a partir do momento que eu quero ter acesso aos filmes que estão na pasta Brasil, eu já não tenho acesso visível aos filmes que estão aninhanados em outros países. Então, se eu estiver ainda dentro de Brasil, caso eu mude de ideia e queira assistir um filme da Argentina, eu vou precisar retroceder um diretório para poder entrar em outro, isto porque cada um do filmes está organizado na pasta do seu respectivo país.&lt;/p&gt;

&lt;p&gt;É mais ou menos assim que uma estrutura de dados em árvore se comporta. Você só consegue ter acesso àquele dado/informação se estiver “dentro do guarda-chuva dele”. É justamente por isso que não haverá linearidade em uma árvore, pois os dados estarão organizados, de novo, hierarquicamente.&lt;/p&gt;

&lt;p&gt;Se você quiser ler mais um pouquinho sobre as árvores, recomendamos este &lt;a href="https://www.freecodecamp.org/portuguese/news/tudo-o-que-voce-precisa-saber-sobre-estruturas-de-dados-em-arvore/" rel="noopener noreferrer"&gt;artigo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A AST do Avaliador Sintático
&lt;/h2&gt;

&lt;p&gt;Para que nosso programa em Pituguês seja executado o Avaliador Sintático não irá apenas identificar a função de cada trecho do código, mas vai gerar uma hierarquia em árvore dele. Vamos usar como exemplo o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;letra = "b"
se letra == "a":
    escreva("Letra A")
senao:
    "escreva("Não é letra A")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como comentamos, o Lexador irá mapear cada token presente em cada linha, retornando algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;simbolos: [
    Simbolo {
      tipo: 'IDENTIFICADOR',
      lexema: 'letra',
      literal: null,
      linha: 1,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IGUAL',
      lexema: '=',
      literal: null,
      linha: 1,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'TEXTO',
      lexema: 'b',
      literal: 'b',
      linha: 1,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'SE',
      lexema: 'se',
      literal: null,
      linha: 2,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IDENTIFICADOR',
      lexema: 'letra',
      literal: null,
      linha: 2,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IGUAL_IGUAL',
      lexema: '=',
      literal: null,
      linha: 2,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'TEXTO',
      lexema: 'a',
      literal: 'a',
      linha: 2,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'DOIS_PONTOS',
      lexema: '',
      literal: null,
      linha: 2,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'ESCREVA',
      lexema: 'escreva',
      literal: null,
      linha: 3,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'PARENTESE_ESQUERDO',
      lexema: '',
      literal: null,
      linha: 3,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'TEXTO',
      lexema: 'Letra A',
      literal: 'Letra A',
      linha: 3,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'PARENTESE_DIREITO',
      lexema: '',
      literal: null,
      linha: 3,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'SENAO',
      lexema: 'senao',
      literal: null,
      linha: 4,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'DOIS_PONTOS',
      lexema: '',
      literal: null,
      linha: 4,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'TEXTO',
      lexema: 'escreva(',
      literal: 'escreva(',
      linha: 5,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IDENTIFICADOR',
      lexema: 'Não',
      literal: null,
      linha: 5,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IDENTIFICADOR',
      lexema: 'é',
      literal: null,
      linha: 5,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IDENTIFICADOR',
      lexema: 'letra',
      literal: null,
      linha: 5,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IDENTIFICADOR',
      lexema: 'A',
      literal: null,
      linha: 5,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'TEXTO',
      lexema: ')',
      literal: ')',
      linha: 5,
      hashArquivo: undefined
    }
  ]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já o Avaliador Sintático, por sua vez, vai nos retornar algo mais enxuto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;declaracoes: [
    Var {
      linha: 1,
      hashArquivo: undefined,
      decoradores: [],
      assinaturaMetodo: '&amp;lt;principal&amp;gt;',
      simbolo: [Simbolo],
      inicializador: [Literal],
      tipo: 'texto',
      tipoExplicito: false,
      referencia: false,
      desestruturacao: false
    },
    Se {
      linha: 2,
      hashArquivo: 0,
      decoradores: [],
      assinaturaMetodo: '&amp;lt;principal&amp;gt;',
      condicao: [Binario],
      caminhoEntao: [Bloco],
      caminhosSeSenao: [],
      caminhoSenao: [Bloco]
    }
  ]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Percebe a diferença?&lt;/p&gt;

&lt;p&gt;Temos como resultado uma lista das declarações que foram feitas no nosso código: sabemos que existe uma declaração de variável e uma declaração da condicional se, mas não sabemos o que tem dentro de cada uma.&lt;/p&gt;

&lt;p&gt;É como se os ramos de uma árvore fossem vistos de longe, ou seja, podemos dizer que o retorno do Avaliador Sintático nos permite ter uma visão da ramificação do código em questão, conseguimos perceber como o código é organizado e hierarquizado.&lt;/p&gt;

&lt;p&gt;Neste exemplo, sabemos que a condicional não se limita ao o que é mostrado neste retorno, mas que ela se extende em mais linhas de código, só que, aqui, não temos acesso a esse detalhe. De toda forma, essa AST que o Avaliador Sintático gera vai ser usada pelo Interpretador. Mais adiante, é ele que irá adentrar o “ramo da condicional” e fazer com que o código ali de dentro seja executado (veremos mais detalhes sobre ele num próximo artigo).&lt;/p&gt;

&lt;h1&gt;
  
  
  Gerando os ramos da AST
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;ATENÇÃO: Recomendamos que você acompanhe o &lt;a href="https://github.com/DesignLiquido/delegua/blob/principal/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts" rel="noopener noreferrer"&gt;código do Avaliador Sintático&lt;/a&gt; durante a leitura.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Desenvolver uma linguagem de programação é uma atividade um tanto quanto complexa e temos que elaborar com bastante cuidado cada recurso e/ou funcionalidade que queremos empregar nela. Afinal, isso tudo é o que vai nos permitir construir com ela uma infinidade de soluções para sistemas e, para evitar que ocorram inconsistências na linguagem, precisamos ter todo este zelo no seu desenvolvimento.&lt;/p&gt;

&lt;p&gt;Cada funcionalidade empregada na linguagem é chamada de “construto” que nada mais é do que os comportamentos que são utilizados para programar em Pituguês e você pode encontrar uma espécie de lista deles &lt;a href="https://github.com/DesignLiquido/delegua/blob/principal/fontes/construtos/index.ts" rel="noopener noreferrer"&gt;neste arquivo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para dar um exemplo mais simples, vamos dar continuidade ao método imprima que adicionamos ao Lexador na postagem anterior sobre Pituguês…&lt;/p&gt;

&lt;p&gt;Após receber do Lexador os tipos de símbolos no trecho de código (imprima, texto e parênteses esquerdo e direito):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;imprima("Agora, você está aprendendo sobre o Avaliador Sintático do Pituguês!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Avaliador Sintático recebe esta informação e vai seguir um fluxo de validações para gerar a nossa AST. Vamos entrar em cada uma das funções para gerar este “ramo da árvore” para o nosso método imprima que vai ser mais ou menos nesta ordem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── analisar 
│ ├── resolverDeclaracaoForaDeBloco 
│ │ ├── resolverDeclaracao 
│ │ │ ├── declaracaoEscreva 
│ │ │ │ ├── expressao 
│ │ │ │ │ ├── atribuir
│ │ │ │ │ │ ├── chamar
│ │ │ │ │ │ │ ├── primario
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OBS&lt;/strong&gt;.: Durante a explicação da lógica das funções, vamos ignorar alguns trechos de código para tornar a escrita mais concisa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Função &lt;code&gt;analisar&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Neste primeiro momento, vamos receber a lista de símbolos do Lexador como argumento na função e vamos inicializar uma lista para abrigar as declarações que serão geradas e formarão a nossa AST:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let declaracoes: Declaracao[] = [];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logo abaixo, teremos um laço de repetição que permitirá que o Avaliador Sintático siga analisando os símbolos recebidos enquanto não chegar ao final das linhas de código do programa em Pituguês.&lt;/p&gt;

&lt;p&gt;O objetivo principal desta função é que os símbolos trazidos pelo Lexador sejam traduzidos em declarações pelo Avaliador Sintático e é isto que será feito dentro deste laço de repetição, pois dentro dele teremos uma linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É aqui que o código vai começar a análise de cada um dos símbolos recebidos para depois instanciarmos o construto referente a declaração que queremos gerar e adicioná-la à nossa lista de declarações.&lt;/p&gt;

&lt;h3&gt;
  
  
  Função &lt;code&gt;resolverDeclaracaoForaDeBloco&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Dentro desta função, o objetivo é verificar se a declaração é de uma função, classe, variável ou expressão. Como no caso da nossa linha de código se trata da instrução imprima, que não vai ser classificada como uma função, classe ou variável, vamos adentrar diretamente na função que irá analisar a instrução vigente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return await this.resolverDeclaracao();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Função &lt;code&gt;resolverDeclaracao&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Vamos nos deparar com algumas verificações que dizem respeito a variáveis, mas, como não estamos analisando uma variável, a nossa linha de código vai entrar em um switch case, logo abaixo, que irá entrar neste trecho:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;case tiposDeSimbolos.IMPRIMA:
case tiposDeSimbolos.ESCREVA:
    const simboloEscrevaOuImprima = this.avancarEDevolverAnterior();
    return this.declaracaoEscreva(simboloEscrevaOuImprima);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No nosso artigo sobre o Lexador, ensinamos que quando uma nova palavra-reservada for incluída, também devemos incluir o seu tipo dentro deste &lt;a href="https://github.com/DesignLiquido/delegua/blob/principal/fontes/tipos-de-simbolos/pitugues.ts" rel="noopener noreferrer"&gt;arquivo&lt;/a&gt;. É exatamente agora que ele vai ser de suma importância para que o Avaliador Sintático consiga buscar o método que irá verificar se a sintaxe do código foi escrita corretamente e gerar o construto e a declaração em questão para fazer parte da AST.&lt;/p&gt;

&lt;p&gt;Antes de irmos adiante no switch case, talvez cause uma ligeira dúvida ao leitor de: “por que estamos sendo direcionados para a função declaracaoEscreva se estamos tratando da função imprima? Por que não uma declaracaoImprima?”.&lt;/p&gt;

&lt;p&gt;A linguagem Pituguês, atualmente, é considerada um dialeto de programação e ela foi desenvolvida dentro do código-fonte de Delégua. Muitas características de Delégua foram herdadas pelo Pituguês, juntamente com os padrões de nomenclatura e assinatura dos métodos desenvolvidos para o Avaliador Sintático de Delégua.&lt;/p&gt;

&lt;p&gt;Geralmente, quando incluímos um dialeto de progamação no ecossistema de Delégua, vamos fazer com que este dialeto herde a classe Avaliador Sintatico Base que vai trazer para o nosso dialeto a assinatura de diversos métodos a serem implementados e por conta desta herança é que será empregada este padrão de nomes dos métodos. É apenas uma questão organizacional.&lt;/p&gt;

&lt;p&gt;De qualquer forma, como o nosso imprima possui o mesmo comportamento do escreva, não precisamos criar um novo método “declaracaoImprima“, por exemplo, para reproduzir esta funcionalidade, basta inserirmos o sinônimo “imprima” no switch case que será direcionado para a construção da declaração em questão.&lt;/p&gt;

&lt;h3&gt;
  
  
  Função &lt;code&gt;declaracaoEscreva&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Após ter reconhecido o símbolo &lt;code&gt;imprima&lt;/code&gt;, entramos na função que irá construir a declaração do método para adicioná-la à AST.&lt;/p&gt;

&lt;p&gt;O que você pode notar é que a função &lt;code&gt;declaracaoEscreva&lt;/code&gt; recebe como argumento o símbolo gerado pelo Lexador e que chegou do Avaliador Sintático e, agora, vamos entrar na verificação para garantir que os itens estão na ordem esperada que se possa construir, finalmente, uma declaração para &lt;code&gt;imprima&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Função &lt;code&gt;consumir&lt;/code&gt;: apenas tem a finalidade de verificar se o símbolo atual corresponde ao parentese esquerdo que precede o texto que nossa função &lt;code&gt;imprima&lt;/code&gt; deverá nos devolver;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;const argumentos [...]&lt;/code&gt;: aqui, é iniciado uma constante que deverá receber um Array de algum construto. Neste caso, será o nosso texto;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vamos adentrar um laço de repetição que irá começar a verificação do conteúdo que há após a abertura do parenteses, a fim de validar se temos um dado textual;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Função &lt;code&gt;expressao&lt;/code&gt;: ainda estamos dentro de &lt;code&gt;declaracaoEscreva&lt;/code&gt;, mas fomos direcionados para a função &lt;code&gt;expressao&lt;/code&gt; que apenas irá nos enviar para a seguinte;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Função &lt;code&gt;atribuir&lt;/code&gt;: fará uma série de verificações buscando se o símbolo atual, o texto do nosso imprima, é algum tipo de operador (&lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Operadores" rel="noopener noreferrer"&gt;lista de operadores&lt;/a&gt; do Pituguês), no entanto, como ele não irá entrar em nenhuma dessas condições, iremos para o próximo método;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Função &lt;code&gt;chamar&lt;/code&gt;: esta função tem como objetivo identificar chamadas de funções, acesso de funções, acesso por índice e fatiamentos, porém, caso não se enquadre em nenhuma dessas opções, seremos enviados para a próxima função;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Função &lt;code&gt;primario&lt;/code&gt;: finalmente, vamos passar por um switch case para inferir que os argumentos dentro de imprima são do tipo textual, além de retornar e instanciar um construto Literal que é onde estará definido o tipo do dado;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vamos &lt;code&gt;consumir&lt;/code&gt; novamente para verificar se está ocorrendo o fechamento da função com parenteses direito;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;E, finalmente, o Avaliador Sintático conseguirá instanciar uma &lt;code&gt;declaracaoEscreva&lt;/code&gt; que construirá a função &lt;code&gt;imprima&lt;/code&gt; futuramente, o que nos trará o resultado:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;declaracoes: [
  Escreva {
      linha: 1,
      hashArquivo: -1,
      decoradores: [],
      assinaturaMetodo: '&amp;lt;principal&amp;gt;',
      argumentos: [Array],
      simboloEscreva: [Simbolo]
  }
],
erros: []
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após todo esse percurso percorrido, voltaremos para dentro da função &lt;code&gt;analisar&lt;/code&gt; que terá gerado a nossa declaração para &lt;code&gt;imprima&lt;/code&gt; e irá inseri-lá na AST. A geração da AST pode ser percebida no trecho de código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let declaracoes: Declaracao[] = [];
while (!this.estaNoFinal()) {
    const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
    if (retornoDeclaracao === null) {
        continue;
    }
    if (Array.isArray(retornoDeclaracao)) {
        declaracoes = declaracoes.concat(retornoDeclaracao);
    } else {
        declaracoes.push(retornoDeclaracao as Declaracao);
    }
 // Restante do código [...]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para gerar a AST, depois de concluir todo aquele trajeto para conseguir transformar nosso símbolo numa declaração a partir da função &lt;code&gt;resolverDeclaracaoForaDeBloco&lt;/code&gt; e, por fim, enviamos o que foi retornado na variável &lt;code&gt;retornoDeclaracao&lt;/code&gt; por todo aquele processo de validação e enviamos para nosso array de &lt;code&gt;declaracoes&lt;/code&gt; com um &lt;code&gt;push&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Contribua com o Pituguês!
&lt;/h1&gt;

&lt;p&gt;Agora que você sabe o que é um Avaliador Sintático e como ele funciona no Pituguês, você já está apto a contribuir com ele!&lt;/p&gt;

&lt;p&gt;Como comentamos, o código-fonte do Pituguês mora dentro de Delégua, então você irá encontrá-lo &lt;a href="https://github.com/DesignLiquido/delegua" rel="noopener noreferrer"&gt;neste repositório do GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Além disso, também preparamos &lt;a href="https://github.com/DesignLiquido/pitugues-docs/blob/principal/CONTRIBUTING.md" rel="noopener noreferrer"&gt;este documento&lt;/a&gt; que &lt;strong&gt;te guia em como contribuir&lt;/strong&gt; com a linguagem, em que damos uma visão geral da estrutura do código e os arquivos principais para você contribuir com o Pituguês.&lt;/p&gt;

&lt;p&gt;Caso encontre alguma dificuldade, a Design Líquido fez um &lt;a href="https://www.youtube.com/watch?v=lxqY48mDjqQ&amp;amp;t" rel="noopener noreferrer"&gt;vídeo demonstrando como contribuir com um Avaliador Sintático&lt;/a&gt; e você pode pegar inspirações de lá!&lt;/p&gt;

&lt;p&gt;E se você for uma pessoa um pouquinho mais ansiosa e quer entender todas as etapas de desenvolvimento de uma linguagem de programação, te indicamos esta &lt;a href="https://www.youtube.com/watch?v=92RlDyXy5EE&amp;amp;list=PL6y10dwsUMhpnsBj_f3Us-JkRDBwEnq8O" rel="noopener noreferrer"&gt;playlist no YouTube da Design Líquido&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas com o que posso contribuir?
&lt;/h2&gt;

&lt;p&gt;De diversas formas… você pode usar a linguagem e reportar bugs pra gente, pode divulgar a linguagem e até mesmo fazer contribuições diretas no código-fonte…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Dica:&lt;/strong&gt;&lt;br&gt;
Para contribuir com o Avaliador Sintático: investigue e analise os construtos que já existem na linguagem, pense o que mais você incluiria e/ou melhoria e vem contar pra gente!&lt;/p&gt;

&lt;h3&gt;
  
  
  Um pequeno adendo sobre contribuições…
&lt;/h3&gt;

&lt;p&gt;Aderir a boas práticas, registrando no GitHub seu processo de contribuição, é de suma importância! No guia de contribuição que trouxemos para vocês, é ensinado a como buscar por issues para contribuir – ou abrir as próprias issues – e como fazer um PR (Pull Request). Parte da função dessas etapas é deixar documentado e acessível para que outros contribuidores possam acompanhar o desenvolvimento do projeto.&lt;/p&gt;

&lt;p&gt;Aliás, não apenas para que outras pessoas consigam acompanhar o desenrolar do projeto, mas também é uma forma de mostrar para o mundo o seu trabalho! Aqui, na Cumbuca Dev, a gente promove e incentiva a contribuição em projetos de Código Aberto, por ser uma das formas de pessoas iniciantes aprenderem e se desenvolverem na programação, enquanto conquistam experiência real que será super válida para o mercado de trabalho!&lt;/p&gt;

&lt;p&gt;Ou seja, enquanto você consegue participar ativamente, ajudando com o crescimento de um projeto e trocando ideia com outros contribuidores, também consegue desenvolver suas habilidades! E como tudo isso é feito com transparência, você pode facilmente comprovar experiência! ❤&lt;/p&gt;

&lt;h3&gt;
  
  
  E agora?
&lt;/h3&gt;

&lt;p&gt;Bom, agora que você já sabe como funciona e como se programa um Lexador, te convidamos a aprender e testar o Pituguês! 😉​ Escrevemos &lt;a href="https://cumbuca.dev/2025/11/07/vem-com-a-gente-programar-em-portugues/" rel="noopener noreferrer"&gt;este tutorial&lt;/a&gt; para te ensinar a como programar com ele! Além disso, você sempre pode consultar a &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cumbucadev/desafios-pitugues/issues" rel="noopener noreferrer"&gt;Neste repositório&lt;/a&gt; temos descrito alguns desafios para fazer em Pituguês! E se, por caso, tiver qualquer dificuldade com a linguagem, já pode reportar pra gente que te ajudamos!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>tutorial</category>
      <category>community</category>
    </item>
    <item>
      <title>O Lexador do Pituguês – Como Contribuir?</title>
      <dc:creator>Cumbuca Dev</dc:creator>
      <pubDate>Tue, 24 Feb 2026 16:04:09 +0000</pubDate>
      <link>https://dev.to/cumbucadev/o-lexador-do-pitugues-como-contribuir-2na1</link>
      <guid>https://dev.to/cumbucadev/o-lexador-do-pitugues-como-contribuir-2na1</guid>
      <description>&lt;p&gt;No &lt;a href="https://www.tabnews.com.br/maitecumbucadesign/como-programar-uma-linguagem-de-programacao-pitugues" rel="noopener noreferrer"&gt;post anterior&lt;/a&gt; sobre como programar o Pituguês, aprendemos que ela é uma linguagem interpretada e que sua arquitetura de projeto é composta por três camadas: o Lexador, o Avaliador Sintático e o Interpretador. Cada uma delas possui sua responsabilidade para que possamos desenvolver uma linguagem de programação e executá-la e, agora, vamos começar a desbravar um pouquinho de cada uma delas, começando por este artigo em que falaremos do Lexador e mostrar um pouquinho como podemos contribuir com o seu código.&lt;/p&gt;

&lt;p&gt;Mas, primeiramente…&lt;/p&gt;

&lt;h1&gt;
  
  
  O que é um Lexador?
&lt;/h1&gt;

&lt;p&gt;Nada mais é do que um programa que irá percorrer e escanear, da esquerda para a direita, os caracteres da nossa linguagem. Nesta etapa, serão identificados os lexemas (que também podemos chamar de símbolos ou tokens) e seu tipo, seu devido significado naquela instrução.&lt;/p&gt;

&lt;p&gt;Existem diferentes categorias de símbolos…&lt;/p&gt;

&lt;h2&gt;
  
  
  Palavras-reservadas
&lt;/h2&gt;

&lt;p&gt;Também chamadas de &lt;em&gt;keywords&lt;/em&gt;, são palavras que estão presentes na linguagem de programação e são utilizadas para se escrever instruções do que queremos que nosso programa faça. Por exemplo, palavras como “&lt;code&gt;while&lt;/code&gt;“, “&lt;code&gt;for&lt;/code&gt;“, “&lt;code&gt;const&lt;/code&gt;“, “&lt;code&gt;else&lt;/code&gt;” e entre outras que já fazem parte da linguagem e não podem ser usadas para nomear variáveis ou funções.&lt;/p&gt;

&lt;p&gt;Aliás, as funções nativas de uma linguagem também são categorizadas como palavras-reservadas e não podem ser usadas para criar alguma outra instrução. Mas, não se preocupe, caso você não saiba que o nome que você deu a uma variável ou função que já exista na linguagem, ela mesma irá te avisar!&lt;/p&gt;

&lt;p&gt;Então, tomando como o exemplo o Pituguês, se quisermos desenvolver uma função para inverter a ordem de um vetor e queremos nomeá-la com inverter, não será possível, pois &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Estruturas-de-Dados-Elementares#inverter-1" rel="noopener noreferrer"&gt;já existe uma função que leva este nome&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificadores
&lt;/h2&gt;

&lt;p&gt;É classificação que recebe tudo aquilo que podemos nomear enquanto desenvolvemos um programa! Ou seja, quando damos um nome a uma variável, seu nome é chamado de “identificador”. O mesmo acontece quando nomeamos uma função.&lt;/p&gt;

&lt;p&gt;Se criarmos a função…&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;função somar(valor1, valor2):
    retorna valor1 + valor2 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos ter a palavra-reservada função para declaração de funções e, em seguida, o identificador somar. É assim que o Lexador irá reconher o nome da função e categoriza-lo para que seja reconhecido dentro da linguagem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constantes
&lt;/h2&gt;

&lt;p&gt;São valores que não sofrem alterações ao longo da execução do programa. Pense que se formos desenvolver um software matemático, o valor do número PI (3,14) jamais poderia ser alterado durante a execução. Linguagens como JavaScript e Delégua permitem que constantes sejam declaradas da seguinte forma:&lt;br&gt;
&lt;code&gt;const valor_de_pi = 3.14;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;No entanto, assim como no Python, o Lexador de Pituguês não reconhece ou permite a declaração de constantes como no exemplo de Delégua e JavaScript. Mas isto é algo que pode ser contornado se aplicarmos a convenção do Python no Pituguês que é declarar uma variável em caixa alta:&lt;br&gt;
&lt;code&gt;VALOR_DE_PI = 3.14&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Esta convenção fará com que outras pessoas que tiverem contato com o código entendam que aquele dado não deve ser alterado.&lt;/p&gt;

&lt;p&gt;Mesmo que o Lexador do Pituguês não seja capaz de reconhecer constantes, achamos que é importante trazer para nossos leitores que elas ainda são uma forma de se identificar e categorizar dados e que, para que seu reconhecimento seja possível, deve ser incluído na programação de um Lexador (afinal, vai que um dia você mesmo queira desenvolver uma linguagem que use constantes…).&lt;/p&gt;
&lt;h2&gt;
  
  
  Operadores
&lt;/h2&gt;

&lt;p&gt;Outra categoria que um Lexador deve ser capaz de mapear são os operadores. Dentro das linguagens de progamação, teremos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Operadores Aritméticos: são os símbolos usados para realizar operações matemáticas – adição, subtração, multiplicação, divisão, módulo e exponenciação. Você pode encontrar os operadores aritméticos (ou matemáticos) que existem no Pituguês na &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Operadores#operadores-matem%C3%A1ticos" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operadores Relacionais: são os operadores usados para comparação – igual a, diferente de, maior que, menor que, maior ou igual e etc… também temos eles descritos na &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Operadores#operadores-de-compara%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;documentação do Pituguês&lt;/a&gt;;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operadores Lógicos: podem ser símbolos ou palavras-reservadas em que podemos verificar condições, geralmente retornam os valores verdadeiro ou falso. Os símbolos mais utilizados são: AND, &amp;amp;&amp;amp;, OR, || e ! – mas existem outros mais! Na documentação do Pituguês, temos listados os &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Operadores#operadores-l%C3%B3gicos" rel="noopener noreferrer"&gt;operadores lógicos&lt;/a&gt; e os &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Operadores#operadores-bit-a-bit" rel="noopener noreferrer"&gt;operadores bit a bit&lt;/a&gt;, que também podem se encaixar nesta categoria.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Símbolos Especiais
&lt;/h2&gt;

&lt;p&gt;Geralmente são os símbolos usados na estruturação do programa, por exemplo, quando uma linguagem requer que sua instrução seja terminada em ponto e vírgula, ou que a declaração de vetores exige que seus dados devem estar escrito entre colchetes. Nessas situações, o ponto e vírgula e os colchetes seriam os “símbolos especiais” que fazem parte da estrutura da linguagem para a escrita de comandos.&lt;/p&gt;
&lt;h2&gt;
  
  
  Lexemas
&lt;/h2&gt;

&lt;p&gt;Nada mais são dos que as strings que correspondem com um típo de símbolo. Por exemplo… quando declaramos uma variável em Pituguês:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nome_da_linguagem = "Pituguês"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Comentamos antes que o nome da variável é reconhecido como identificador, mas ele também vai ser mapeada como um lexema. Então, quando escrevemos esta linha de código em Pituguês e depuramos o Lexador, ele nos trará este retorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;simbolos: [
    Simbolo {
      tipo: 'IDENTIFICADOR',
      lexema: 'nome_da_linguagem',
      literal: null,
      linha: 1,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'IGUAL',
      lexema: '=',
      literal: null,
      linha: 1,
      hashArquivo: undefined
    },
    Simbolo {
      tipo: 'TEXTO',
      lexema: 'Pituguês',
      literal: 'Pituguês',
      linha: 1,
      hashArquivo: undefined
    }
 ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note o Lexador nos retorna uma lista de símbolos, em formato json, e cada símbolo é mapeado de acordo com seu tipo e seu lexema. Aqui, o lexema é a declaração literal da escrita da instrução!&lt;/p&gt;

&lt;p&gt;Esta etapa é bastante importante para que se tenha a base inicial ao programar uma linguagem de programação, pois a partir da identificação desses lexemas e tipos é que poderemos criar as regras de execução de cada símbolo, baseados na sua função. E isto acontecerá na etapa do Avaliador Sintático.&lt;/p&gt;

&lt;h1&gt;
  
  
  E como eu posso contribuir com a linguagem Pituguês?
&lt;/h1&gt;

&lt;p&gt;O repositório em que podemos encontrar o Pituguês está &lt;a href="https://github.com/DesignLiquido/delegua" rel="noopener noreferrer"&gt;disponível no GitHub&lt;/a&gt;, dentro do projeto Delégua, então, é dentro desse projeto que podemos fazer contribuições diretamente no Pituguês: é onde está seu código fonte.&lt;/p&gt;

&lt;p&gt;Além disso, temos outro repositório em que &lt;a href="https://github.com/DesignLiquido/pitugues-docs/blob/principal/CONTRIBUTING.md" rel="noopener noreferrer"&gt;disponibilizamos um documento&lt;/a&gt; que ensina a como contribuir com a linguagem! Lá você vai encontrar um guia de como criar uma conta no GitHub, um passo a passo de como contribuir com a linguagem e como deve registrar sua contribuição na plataforma.&lt;/p&gt;

&lt;h3&gt;
  
  
  Um pequeno adendo…
&lt;/h3&gt;

&lt;p&gt;Aderir a boas práticas, registrando no GitHub seu processo de contribuição é de suma importância! No guia de contribuição que trouxemos para vocês, é ensinado a como buscar por issues para contribuir – ou abrir as próprias issues – e como fazer um PR (Pull Request). Parte da função dessas etapas é deixar documentado e acessível para que outros contribuidores possam acompanhar o desenvolvimento da linguagem.&lt;/p&gt;

&lt;p&gt;Aliás, não apenas para que outras pessoas consigam acompanhar o desenrolar do projeto, mas também é uma forma de mostrar para o mundo o seu trabalho! Aqui na Cumbuca Dev, a gente promove e incentiva a contribuição em projetos de Código Aberto, por ser uma das formas de pessoas iniciantes aprenderem e se desenvolverem na programação, enquanto conquistam experiência real que será super válida para o mercado de trabalho!&lt;/p&gt;

&lt;p&gt;Ou seja, enquanto você consegue participar ativamente, ajudando com o crescimento de um projeto e trocando ideia com outros contribuidores, também consegue desenvolver suas habilidades! E como tudo isso é feito com transparência, você pode facilmente comprovar experiência! ❤&lt;/p&gt;

&lt;h1&gt;
  
  
  Contribuindo com o Lexador!
&lt;/h1&gt;

&lt;p&gt;No documento que contém o guia de como contribuir, temos esta &lt;a href="https://github.com/DesignLiquido/pitugues-docs/blob/principal/CONTRIBUTING.md#9-estrutura-do-projeto" rel="noopener noreferrer"&gt;seção que trata da Estrutura do Projeto&lt;/a&gt;, nela, temos sinalizados os principais arquivos que estão envolvidos na programação do Pituguês.&lt;/p&gt;

&lt;p&gt;Mantendo o foco no Lexador, queremos trazer um exemplo de contribuição que foi implementado por quem vos escreve, a fim de ilustrar brevemente como adicionar uma funcionalidade neste elemento estrutural do dialeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  No início...
&lt;/h2&gt;

&lt;p&gt;Como Pituguês é um dialeto, muitas estruturas e características acabavam sendo herdadas de Delégua, parecia até uma cópia. O que podemos dizer que “não era considerado muito Pythônico”, uma vez que a proposta do Pituguês é ser um equivalente a Python, enquanto Delégua tem como principais influências Ruby, C# e Kotlin.&lt;/p&gt;

&lt;p&gt;Conforme fui estudando mais o dialeto e seu código, identifiquei que o Pituguês usava a mesma função que Delégua: escreva. Então, na época, como Pessoa Iniciante Contribuidora, isto me deixou um pouco inquieta, pois se queremos aproximar o Pituguês do Python, poderíamos buscar traduções equivalentes em casos como este.&lt;/p&gt;

&lt;p&gt;Dessa forma, veio a ideia de transformar o escreva em imprima, uma tradução um pouco mais direta do print da linguagem na qual Pituguês se inspira.&lt;/p&gt;

&lt;p&gt;Como foi comentado, o Lexador visa identificar os símbolos e seus tipos para que depois sua lógica possa ser implementada no Avaliador Sintático. Precisamos lembrar que o comportamento para uma função chamada imprima já existia na função escreva da linguagem e apenas queríamos adicionar um sinônimo a ela. Portanto, o que precisamos fazer é simplesmente adicionar a palavra “imprima” como uma palavras-reservadas e fazer com que o Lexador a reconheça como parte do Pituguês.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quais arquivos eu mexo?
&lt;/h2&gt;

&lt;p&gt;Todo o código-fonte da linguagem está dentro do diretório fontes do projeto e como vamos mexer no Lexador do Pituguês, o caminho para chegar até ele é:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fontes &amp;gt; lexador &amp;gt; dialetos &amp;gt; lexador-pitugues.ts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dentro deste arquivo, você vai encontrar uma função chamada mapear. Imagine que você escreveu a seguinte linha de código:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;imprima("Você está aprendendo sobre o Lexador do Pituguês!")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Quando você escreve uma instrução como esta em um editor de código como o VS Code, por exemplo, deve lembrar que escrevemos apenas texto no editor e que esse texto precisa ser traduzido para a linguagem de máquina, como &lt;a href="https://www.tabnews.com.br/maitecumbucadesign/como-programar-uma-linguagem-de-programacao-pitugues" rel="noopener noreferrer"&gt;comentamos neste artigo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nesse contexto, o Lexador é quem fará a primeira etapa de reconhecimento do que há escrito no código, identificando e retornando os tokens ali presentes, com seus respectivos tipos. Basicamente, neste primeiro momento, precisamos apenas identificar os lexemas que compõe a nossa instrução.&lt;/p&gt;

&lt;p&gt;Dentro do Lexador do Pituguês, temos a função &lt;code&gt;mapear&lt;/code&gt; para percorrer todas linhas de código escritas no editor, identificando quando aquele comando é iniciado é encerrado. Assim como também verifica a partir de que momento está o início e o final do código por inteiro.&lt;/p&gt;

&lt;p&gt;Mas ainda não é aqui que vamos adicionar a palavra-reservada &lt;code&gt;imprima&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;Dentro do mapear, temos um trecho de código assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while (!this.eFinalDoCodigo()) {
     this.inicioSimbolo = this.atual;
     this.analisarToken();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em resumo, esta instrução está dizendo que “enquanto não for o fim do código, cada token deverá ser analisado”. E é aí aqui que vamos fazer com que o nosso comando imprima seja reconhecido! Através da função &lt;code&gt;analisarToken&lt;/code&gt; no Lexador!&lt;/p&gt;

&lt;p&gt;Esta função vai capturar caractere por caractere da nossa linha de código e vai buscar identificar cada um deles em um longo &lt;code&gt;switch case&lt;/code&gt;. Pode reparar que vamos ter diversos &lt;code&gt;cases&lt;/code&gt; para caracteres diferentes (tabulação, espaçamento, nova linha, ponto e vírgula etc). Caracteres correspondentes às categorias que vimos anteriormente no artigo (palavra-reservadas, identificadores, operadores e símbolos especiais). Ou seja, a partir de um momento que o nosso &lt;code&gt;analisarToken&lt;/code&gt; consegue identificar um desses caracteres, ele vai verificar se há um tipo de símbolo correspondente ao caractere.&lt;/p&gt;

&lt;p&gt;Mas como vamos conseguir identificar a palavra &lt;code&gt;imprima&lt;/code&gt; como palavra-reservada dentro deste &lt;code&gt;switch case&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Ainda dentro do &lt;code&gt;analisarToken&lt;/code&gt;, no final do switch case, temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;default:
    if (this.eDigito(caractere)) this.analisarNumero();
    else if (this.eAlfabeto(caractere)) this.identificarPalavraChave();
    else {
         this.erros.push({
                   linha: this.linha + 1,
                   caractere: caractere,
                   mensagem: 'Caractere inesperado.',
          } as ErroLexador);
          this.avancar();
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este trecho vai percorrer os caracteres também, mas seu objetivo é identificar o que é número e o que pode ser alguma letra do alfabeto. Inclusive, note que, na terceira linha, temos uma condição que diz que se haver um conjunto de caracteres, deve ser identificada a palavra chave através da função &lt;code&gt;identificaPalavraChave&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;Bom… vamos para esta função agora… nela, vai haver uma série de verificações quanto a composição da sequência de caracteres, mas a cereja do bolo está quando ela, finalmente, consegue determinar o lexema neste momento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const tipo: string =
    textoPalavraChave in palavrasReservadas
         ? palavrasReservadas[textoPalavraChave]
         : tiposDeSimbolos.IDENTIFICADOR;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos o que é chamado de “condição ternária” e está sendo verificado se a palavra que foi escrita no código existe ou não enquanto palavra-reservada.&lt;/p&gt;

&lt;p&gt;Na segunda linha do trecho de código anterior, temos a constante palavraReservada, em que temos dentro dela uma lista de palavras-reservadas. Esta constante é importada de um outro arquivo que está no caminho:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fontes &amp;gt; lexador &amp;gt; dialetos &amp;gt; palavras-reservadas &amp;gt; pitugues.ts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dentro da constante, vamos adicionar o nosso “imprima”, porém… temos que declará-lo neste formato:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;imprima: tiposDeSimbolos.IMPRIMA&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Você pode conferir a lista de palavras-reservadas neste &lt;a href="https://github.com/DesignLiquido/delegua/blob/principal/fontes/lexador/dialetos/palavras-reservadas/pitugues.ts" rel="noopener noreferrer"&gt;link do GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Adicionar o imprima nesta lista de palavras-reservadas ainda não é o suficiente, temos que adicionar, também, na lista de objeto tiposDeSimbolos que está no arquivo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fontes &amp;gt; tipos-de-simbolos &amp;gt; pitugues.ts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Você pode dar uma olhadinha &lt;a href="https://github.com/DesignLiquido/delegua/blob/principal/fontes/tipos-de-simbolos/pitugues.ts" rel="noopener noreferrer"&gt;neste arquivo&lt;/a&gt; para conferir o formato que devemos adicionar o nosso tipo de símbolo que é:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;IMPRIMA: 'IMPRIMA'&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testando nossa adição
&lt;/h2&gt;

&lt;p&gt;Seguindo todos esses passos, você já pode adicionar uma nova palavra-reservada no Lexador do Pituguês, mas a gente ainda precisa garantir que ela está sendo reconhecida pela linguagem e sendo executada corretamente.&lt;/p&gt;

&lt;p&gt;Agora, vamos ir para nosso arquivo de teste do Lexador de Pituguês que você pode encontrar no seguinte caminho, já saindo do fontes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;testes &amp;gt; lexador &amp;gt; dialetos &amp;gt; pitugues &amp;gt; lexador.test.ts&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Já &lt;a href="https://github.com/DesignLiquido/delegua/blob/principal/testes/lexador/dialetos/pitugues/lexador.test.ts" rel="noopener noreferrer"&gt;dentro do arquivo&lt;/a&gt;, queremos saber se o Lexador já está identificando imprima como nova palavra-reservada, então devemos elaborar um teste unitário e executá-lo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it('Sucesso - imprima', () =&amp;gt; {
    const resultado = lexador.mapear(
        ["imprima('Você está aprendendo sobre o Lexador do Pituguês!')"],
        -1
    );
    expect(resultado).toBeTruthy();
    expect(resultado.simbolos).toHaveLength(4);
    expect(resultado.simbolos).toEqual(
        expect.arrayContaining([
            expect.objectContaining({ tipo: 'IMPRIMA' }),
            expect.objectContaining({ tipo: 'PARENTESE_ESQUERDO' }),
            expect.objectContaining({ tipo: 'TEXTO' }),
            expect.objectContaining({ tipo: 'PARENTESE_DIREITO' }),
        ])
    );
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No teste para o Lexador, note que estamos apenas verificando se contém os tipos de símbolos esperados naquela linha de código. É apenas isto que precisamos fazer com o Lexador: verificar se nossos símbolos estão sendo reconhecidos como previsto.&lt;/p&gt;

&lt;p&gt;Após adicionar o teste, logo acima dele, no VS Code, você verá escrito Run | Debug e você pode clicar no Run para executar o teste e ver se ele é aprovado. Caso ele passar nos testes unitários, podemos enviar nossa contribuição para o repositório do projeto.&lt;/p&gt;

&lt;p&gt;A Design Líquido já fez um vídeo ensinando a programar um Lexador &lt;a href="https://www.youtube.com/watch?v=92RlDyXy5EE" rel="noopener noreferrer"&gt;neste vídeo do YouTube&lt;/a&gt;! Você pode dar uma conferida nele para ver como é todo o processo em ação.&lt;/p&gt;

&lt;p&gt;Lembrando que também temos este guia de como você pode fazer sua contribuições no código-fonte da linguagem!&lt;/p&gt;

&lt;h1&gt;
  
  
  E agora?
&lt;/h1&gt;

&lt;p&gt;Bom, agora que você já sabe como funciona e como se programa um Lexador, te convidamos a aprender e testar o Pituguês! 😉​ Escrevemos &lt;a href="https://cumbuca.dev/2025/11/07/vem-com-a-gente-programar-em-portugues/" rel="noopener noreferrer"&gt;este tutorial&lt;/a&gt; para te ensinar a como programar com ele! Além disso, você sempre pode consultar a documentação!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cumbucadev/desafios-pitugues/issues" rel="noopener noreferrer"&gt;Neste repositório&lt;/a&gt; temos descrito alguns desafios para fazer em Pituguês! E se, por caso, tiver qualquer dificuldade com a linguagem, já pode reportar pra gente que te ajudamos!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
      <category>learning</category>
    </item>
    <item>
      <title>Como programar uma linguagem de programação? - Pituguês</title>
      <dc:creator>Cumbuca Dev</dc:creator>
      <pubDate>Fri, 06 Feb 2026 17:53:27 +0000</pubDate>
      <link>https://dev.to/cumbucadev/como-programar-uma-linguagem-de-programacao-pitugues-288j</link>
      <guid>https://dev.to/cumbucadev/como-programar-uma-linguagem-de-programacao-pitugues-288j</guid>
      <description>&lt;p&gt;Há poucos tempo, trouxe &lt;a href="https://www.tabnews.com.br/maitecumbucadesign/programando-em-pitugues-uma-linguagem-inspirada-em-python" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; para o TabNews uma apresentação e tutorial da linguagem Pituguês. Mas lembram que também contamos que seu código-fonte é aberto? Isto significa que qualquer pessoa pode participar do desenvolvimento da linguagem, é o que chamamos de “Comunidade de Código Aberto (ou Open Source)”.&lt;/p&gt;

&lt;h2&gt;
  
  
  E como faço para participar da Comunidade de Código Aberto?
&lt;/h2&gt;

&lt;p&gt;Basta se voluntariar para ajudar em algum projeto que você tenha interesse e buscar formas de contato com as pessoas que já estão envolvidas com o projeto, seja por fóruns, redes sociais, e-mails e etc.&lt;/p&gt;

&lt;p&gt;Nesse sentido o GitHub também cumpre um papel importante para projetos de código aberto, pois podemos fazer discussões por lá, escrever documentação dos projetos, fazer nossas contribuições, deixar organizado e registrado o que e como a comunidade pode ajudar e por aí vai…&lt;/p&gt;

&lt;p&gt;As participações vão desde comentários, trazer suas dúvidas, sugestões, reportar imprevistos ao usar a linguagem, escrever e divulgar sobre ela ou, caso a pessoa se sinta a vontade, pode ajudar fazendo alterações no próprio código fonte da linguagem. Dentro do Código Aberto, cada pessoa pode colaborar com o pouquinho que lhe cabe e toda a contribuição é importante, válida e ajuda o projeto a crescer!&lt;/p&gt;

&lt;h1&gt;
  
  
  E como contribuir com o Pituguês?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Primeiramente, precisamos entender onde está o Pituguês!
&lt;/h2&gt;

&lt;p&gt;O Pituguês é uma das linguagens de programação que existem dentro de um projeto maior que é a linguagem Delégua. Como o código-fonte de Pituguês está em &lt;a href="https://pt.wikipedia.org/wiki/Del%C3%A9gua" rel="noopener noreferrer"&gt;Delégua&lt;/a&gt;, podemos dizer que ele é, até o momento, mais um “dialeto de programação”, pois ele acaba por ser uma variante de uma linguagem maior.&lt;/p&gt;

&lt;p&gt;Dialetos nada mais são do que variações de uma mesma língua, e na programação essa lógica também se aplica. Pense em um país continental como o Brasil, dividido em 5 regiões e com 27 estados (incluindo o Distrito Federal). Embora existam discussões no campo da linguística se as variações do português no Brasil sejam dialetos ou apenas sotaques, é inegável que podemos notar diferenças bem acentuadas de expressões, palavras e entonações entre regiões diferentes ao ponto de um nortista ter dificuldade de entender a fala de um sulista e vice-versa. Esta pequena diferença linguística entre pessoas oriundas de diferentes regiões de um mesmo país, que geram um contratempo comunicacional, pode ser classificada como um dialeto.&lt;/p&gt;

&lt;p&gt;E, talvez você não saiba, mas já tenha tido contato com dialetos de outras linguagens de programação! Podemos dizer que TypeScript seria um dialeto de JavaScript, por exemplo, uma vez que usa toda a sintaxe do JavaScript e adiciona a tipagem à linguagem.&lt;/p&gt;

&lt;p&gt;Outro exemplo interessante são os dialetos PL/SQL e PL/pgSQL que unem a lógica de programação procedural com linguagem de consulta. Se você for comparar, eles são bastante similares, mas ainda possuem diferenças em sua sintaxe que são bem características e que demarcam sua distinção.&lt;/p&gt;

&lt;p&gt;Se formos comparar as funções nativas de &lt;a href="https://github.com/DesignLiquido/delegua/wiki/Fun%C3%A7%C3%B5es-nativas" rel="noopener noreferrer"&gt;Delégua&lt;/a&gt; e &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Fun%C3%A7%C3%B5es-Nativas" rel="noopener noreferrer"&gt;Pituguês&lt;/a&gt;, percebemos que ambas possuem funções com nomes iguais ou semelhantes. No entanto, a forma de declaração de variáveis e definição de bloco de código são diferentes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delégua
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Declaração de variáveis requer a palavra-reservada &lt;code&gt;var&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Blocos de código são definidos entre par de chaves &lt;code&gt;{&lt;/code&gt; &lt;code&gt;}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pituguês
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Seguimos o modelo de Python em que apenas nomeamos a variável e atribuímos um valor&lt;/li&gt;
&lt;li&gt;Blocos de código são definidos após dois pontos e identancão&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Onde fica o código-fonte de Pituguês e como ele é organizado?
&lt;/h1&gt;

&lt;p&gt;Comentamos repetidas vezes que ele é um dialeto de Delégua e que vive dentro do código-fonte de Delégua. Você pode encontrar o &lt;a href="https://github.com/DesignLiquido/delegua" rel="noopener noreferrer"&gt;repositório do núcleo de Delégua disponível no Github&lt;/a&gt; e, além disso, também está disponibilizado este &lt;a href="https://github.com/DesignLiquido/pitugues-docs/blob/principal/CONTRIBUTING.md" rel="noopener noreferrer"&gt;tutorial de como contribuir com o Pituguês&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mas, antes, o que a gente precisa entender é como a linguagem tem seu código arquitetado e organizado! Lembrando que estamos programando uma linguagem de programação e que existem dois tipos principais de linguagens de programação: a compilada e a interpretada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linguagem Compilada
&lt;/h2&gt;

&lt;p&gt;Geralmente, quando construímos um software, a pessoa desenvolvedora irá escrever o código do programa com o que chamamos de “linguagem de alto nível”. Isto significa que se trata de uma linguagem de programação mais próxima à linguagem humana, de mais fácil leitura e entendimento para quem está lidando com aquele código.&lt;/p&gt;

&lt;p&gt;Por essa lógica, podemos presumir que “quanto mais baixo o nível, mais distante da linguagem humana”… O que é bem verdade!&lt;/p&gt;

&lt;p&gt;Só que quando programamos algo, estamos criando programas para serem executados em máquinas e elas não falam a mesma língua que a gente! Elas só entendem linguagens de baixo nível, que vem a ser o que chamamos de “linguagem de máquina” ou “linguagem binária”.&lt;/p&gt;

&lt;p&gt;É a famosa linguagem composta de zeros e uns, em que eles representam o estado da eletricidade – desligado ou ligado. Convenhamos que ela realmente não é muito acessível para se escrever um programa…&lt;/p&gt;

&lt;p&gt;O ponto é que, nas linguagens compiladas, a gente consegue escrever programas de uma forma que é acessível para pessoas, mas ainda não é para a máquina. Então, após o programa ser desenvolvido por inteiro, é aí que entra o papel do compilador que vai fazer no nosso código passar por um processo que, normalmente, é chamado de “build” (construir) e que irá traduzir o nosso código da linguagem humana para a linguagem de máquina. Só assim vamos conseguir executar o programa na máquina.&lt;/p&gt;

&lt;p&gt;E isso pode acontecer sucessivamente, pois cada vez que identificamos algum bug ou queremos atualizar ou editar algo no código, vamos ter que fazer todo esse processo de reconstruir o código para criar um arquivo executável dele que a máquina consiga rodar.&lt;/p&gt;

&lt;p&gt;Um detalhe bastante interessante é que as linguagens compiladas elas te ajudam a identificar erros de sintaxe na escrita do código, pois, se houver qualquer erro, elas vão impedir o processo de compilação – a construção do programa -, já que ele não conseguirá ser executado de jeito nenhum.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linguagem Interpretada
&lt;/h2&gt;

&lt;p&gt;Já aqui, nas linguagens interpretadas, ainda que o programa precise ser traduzido para código de máquina, as instruções serão executadas ao mesmo tempo em que a linha de código é lida. É como se fosse uma tradução simultânea.&lt;/p&gt;

&lt;p&gt;As linguagens compiladas nos avisam quando encontram um erro que as impede de construir o programa. Já as linguagens interpretadas, quando o interpretador esbarra numa linha de código que possui um bug, ou alguma inconsistência, simplesmente quebram e interrompem o a execução.&lt;/p&gt;

&lt;p&gt;Por um lado, ela nos dá uma certa vantagem de que não precisamos compilar nosso código, reconstruindo o programa, toda vez que for necessário fazer alguma alteração nele. Ela acaba nos dando mais flexibilidade e agilidade na edição do algoritmo, embora sua execução possa ficar um pouco comprometida.&lt;/p&gt;

&lt;p&gt;Outra diferença importante é que o interpretador pode tanto traduzir a linguagem de alto nível direto para a linguagem de máquina, como pode haver uma linguagem intermediária que esta irá traduzir para o código de máquina.&lt;/p&gt;

&lt;p&gt;Afinal, como é programado o Pituguês?&lt;/p&gt;

&lt;p&gt;Bom, acabamos de ver, de forma resumida, quais são os dois principais de tipos de linguagens de programação. E isso é bastante importante para sabermos como programar a nossa linguagem!&lt;/p&gt;

&lt;p&gt;Mas… qual delas é o Pituguês?&lt;/p&gt;

&lt;p&gt;No próprio código-fonte, é descrito como é organizada a arquitetura da linguagem, com os componentes: lexador, avaliador sintático e, finalmente, interpretador. Dessa forma, podemos presumir que ela é uma linguagem interpretada, uma vez que sua arquitetura possui um interpretador.&lt;/p&gt;

&lt;p&gt;Cada um dos componentes mencionados é responsável por uma etapa do processo que faz com que as instruções escritas em Pituguês sejam traduzidas para o código de máquina, permitindo que um programa desenvolvido nesta linguagem possa ser efetivamente executado. Vamos entender um pouquinho deles…?&lt;/p&gt;

&lt;h2&gt;
  
  
  Lexador
&lt;/h2&gt;

&lt;p&gt;A Design Líquido escolheu a palavra “Lexador” para traduzir o que normalmente é chamado de “Lexer” e/ou “Tokenizer”, mas você ainda pode encontrar outras traduções que irão usar o termo “Analisador Léxico” e/ou “Tokenizador”.&lt;/p&gt;

&lt;p&gt;E qual é a função dele aqui?&lt;/p&gt;

&lt;p&gt;Bom, pense que as linguagens de programação possuem símbolos e termos específicos que usamos para conseguirmos elaborar instruções e construir um programa para a finalidade que queremos. Todo esse arcabouço de recursos precisa ser mapeado e reconhecido como um item que faz parte daquela linguagem e é o Lexador que cumprirá este papel.&lt;/p&gt;

&lt;p&gt;Por exemplo, quando queremos declarar uma variável no Pituguês:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nome_da_linguagem = "Pituguês"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O Lexador vai percorrer cada caractere existente nesta linha de código e mapear cada elemento e sua devida função no código, então, teremos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;“nome_da_linguagem”: será reconhecido como o “identificador”, o nome da variável;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“=”: a maioria das pessoas nomeia este símbolo como “sinal de igual”, mas no contexto da declaração de variável, o Lexador deverá identifica-lo como um “sinal de atribuição”, pois após ele deverá ser escrito o valor que aquela variável conterá;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Pituguês”: finalmente temos o valor que será guardado pela variável e, neste caso, como o Pituguês é capaz de identificar o tipo de dado por si mesmo, a própria linguagem deverá presumir que se trata de um tipo textual.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja, para o Pituguês aceitar a declaração de uma variável, o Lexador deve conseguir mapear cada um destes elementos, caso contrário, por ser uma linguagem interpretada, o programa irá interromper sua execução abruptamente, enquanto está em processo de execução. Esta mesma lógica é empregada para todas as outras palavras reservadas e símbolos que compõem a linguagem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avaliador Sintático
&lt;/h2&gt;

&lt;p&gt;O Avaliador Sintático é a parte do processo que irá fazer a “análise sintática”, identificando se os símbolos estão dispostos na ordem adequada para serem reconhecidos enquanto sentenças que fazem parte da linguagem em questão. Ele vai receber do Lexador os símbolos mapeados e verificar se eles estão estruturados de uma maneira que faça sentido para que se possa executar as instruções do programa.&lt;/p&gt;

&lt;p&gt;E por que essa etapa é tão importante?&lt;/p&gt;

&lt;p&gt;Pense que o único propósito do Lexador é mapear e identificar os tipos de símbolos. Vamos supor que tentamos declarar uma variável escrita na seguinte maneira:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var nome_da_linguagem = "Pituguês"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note que adicionamos a palavra ‘var’ antes do identificador da variável, ‘nome_da_linguagem’, o Lexador ainda consegue reconhecer e identificar os símbolos que existem nesta sequência textual, porém, o Avaliador Sintático vai impedir que esta linha de código seja executada, pois ela não será reconhecida como uma sentença válida.&lt;/p&gt;

&lt;p&gt;E o que faz o Avaliador Sintático reconhecer uma instrução possível ou não? A sua programação! É dentro deste componente estrutural da linguagem de programação que elaboramos e verificamos quais instruções serão válidas: nós programamos o Avaliador Sintático para que não reconheça “var” enquanto uma palavra reservada para declaração de variáveis.&lt;/p&gt;

&lt;p&gt;Esse tipo de comportamento é equivalente ao que encontramos num idioma, por exemplo, ao ler a sentença “Eu batata programo em Pituguês”. Note que temos uma palavra inserida que não faz sentido para a mensagem da frase. Podemos dizer que ela não está seguindo as regras gramaticais do português, uma vez que tempos uma palavra extra deslocada na frase.&lt;/p&gt;

&lt;p&gt;Agora, se escrevermos “eu programo em Pituguês”, os termos estarão conectados e relacionados, tornando a mensagem compreensível! Da mesma forma acontece com linguagens de programação: &lt;strong&gt;seguir suas regras gramaticais é essencial para que se possa construir um programa!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Interpretador
&lt;/h2&gt;

&lt;p&gt;Esta é a etapa da nossa arquitetura que será responsável pela execução do código! Como mencionamos antes, um interpretador é como se fosse uma tradução simultânea em que, conforme nosso interpretador vai lendo linha a linha, suas instruções vão sendo verificadas pelo Avaliador Sintáitco e, se estiverem na estrutura esperada da linguagem, serão executadas.&lt;/p&gt;

&lt;p&gt;Para que a execução seja efetuada, partimos do princípio em que nosso código passou pela aprovação do Lexador e do Avaliador Sintático e, agora, o Interpretador, também, precisará contribuir com a sua aprovação.&lt;/p&gt;

&lt;p&gt;Mas como isso é feito?&lt;/p&gt;

&lt;p&gt;Ele irá receber as declarações que foram identificadas no Avaliador Sintático e que estão seguindo as regras gramaticais esperadas. Caso a gramática não esteja de acordo, é o momento em que a nossa “tradução simultânea” será interrompida abruptamente e a linguagem retornará um erro para nós.&lt;/p&gt;

&lt;p&gt;Devemos lembrar que o Avaliador Sintático fez a verificação gramatical das instruções em Pituguês e, se ela corresponder às normas esperadas, irá gerar uma espécie de Árvore de Análise Sintática, também conhecida como Árvore de Derivação. É papel do Interpretador percorrer essa “árvore” e verificar qual instrução está sendo chamada para execução e, para desempenhar esta função, o Interpretador vai usar um “Design Pattern” conhecido como “Visitor Pattern”, ou “padrão Visitante”.&lt;/p&gt;

&lt;p&gt;É com o padrão Visitante é que o interpretador poderá buscar e identificar a instrução escrita em Pituguês a partir de Árvore de Análise Sintática, no entanto, estes conceitos são um pouco mais complexos e sua aplicabilidade para o Pituguês será tratada mais futuramente. Mas… caso você tenha interesse em já ir conhecendo um pouquinho mais deles, recomendamos a leitura do &lt;a href="https://refactoring.guru/design-patterns/visitor" rel="noopener noreferrer"&gt;artigo Visitor do refactoring.guru&lt;/a&gt; e o trecho de Análise Sintática do ebook &lt;a href="https://johnidm.gitbooks.io/compiladores-para-humanos/content/part1/syntax-analysis.html" rel="noopener noreferrer"&gt;Compiladores para Humanos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Recomendamos fortemente que eassista &lt;a href="https://www.youtube.com/watch?v=PgKMZbUGFy8&amp;amp;t" rel="noopener noreferrer"&gt;este vídeo&lt;/a&gt;, produzido pela Design Líquido, demonstrando como cada etapa funciona e se complementa – Lexador, Avaliador Sintático e Interpretador. No vídeo, a demonstração é com a linguagem Delégua, mas a mesma estrutura é utilizada na programação do Pituguês e pode ficar mais claro para você ao ver cada etapa em ação!&lt;/p&gt;

&lt;p&gt;E, só pra reforçar, como vimos antes, nas linguagens interpretadas, elas podem traduzir nosso código diretamente para o código de máquina, ou podem ter um código intermediário que a traduz para o código de máquina.&lt;/p&gt;

&lt;p&gt;No caso do Pituguês, ela é uma linguagem de programação desenvolvida em TypeScript que passará direto para o JavaScript, que é uma linguagem de característica híbrida, o que chamamos de &lt;a href="https://www.freecodecamp.org/portuguese/news/compilacao-just-in-time-explicada/" rel="noopener noreferrer"&gt;Just In Time Compilation (JIT)&lt;/a&gt;, para traduzir/transpilar o Pituguês para a linguagem de máquina e ser executado. O processo de transpilação do JavaScript se dá por uma Máquina Virtual, chamada de V8, para criar o código de máquina e rodar o programa.&lt;/p&gt;

&lt;p&gt;Ou seja, o Pituguês precisa de um intermediário para traduzir seu código em código de máquina e tornar possível a execução de um programa, percorrendo um caminho mais ou menos assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcumbucadev%2Fblog%2Frefs%2Fheads%2Fmain%2F.gitbook%2Fassets%2FPitugu%25C3%25AAs%2520-%2520Linguagem%2520Interpretada%2520%282%29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcumbucadev%2Fblog%2Frefs%2Fheads%2Fmain%2F.gitbook%2Fassets%2FPitugu%25C3%25AAs%2520-%2520Linguagem%2520Interpretada%2520%282%29.png" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Falando sobre o futuro…
&lt;/h1&gt;

&lt;p&gt;Até a escrita deste artigo, como comentamos repetidamente, Pituguês é considerado um dialeto, uma vez que ele vive dentro do código-fonte de Delégua. Por ele se encontrar dependende do núcleo de outra linguagem, acaba por ter certas limitações no seu desenvolvimento, principalmente por ambas compartilharem do mesmo Interpretador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Acreditamos que para maior expansão do Pituguês, ele precise “caminhar com suas próprias pernas” e ser oficialmente uma linguagem!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gostaríamos de promover a independência do Pituguês para que, assim como em Python, a comunidade possa ter mais liberdade de contribuir e incrementar tudo aquilo que for benéfico para seus usuários! E, principalmente, sem a preocupação do quanto as contribuições possam afetar outro projeto.&lt;/p&gt;

&lt;p&gt;Te convidamos a trocar uma ideia com a gente futuro do Pituguês neste &lt;a href="https://github.com/DesignLiquido/delegua/discussions/1074" rel="noopener noreferrer"&gt;fórum do GitHub&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Inicialmente, queremos propor as discussões:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quais os primeiros passos para tornar o Pituguês independente?&lt;/li&gt;
&lt;li&gt;Como podemos projetar esta linguagem?&lt;/li&gt;
&lt;li&gt;Aliás, em qual linguagem de programação devemos programar o Pituguês? Continuaríamos com TypeScript ou seria mais interessante escolher outra e por quê?&lt;/li&gt;
&lt;li&gt;Materíamos a arquitetura de: Lexador, Avaliador Sintático e Interpretador?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>community</category>
      <category>opensource</category>
      <category>programming</category>
      <category>python</category>
    </item>
    <item>
      <title>Programando em Pituguês! - Uma linguagem inspirada em Python</title>
      <dc:creator>Cumbuca Dev</dc:creator>
      <pubDate>Wed, 28 Jan 2026 17:43:48 +0000</pubDate>
      <link>https://dev.to/cumbucadev/programando-em-pitugues-uma-linguagem-inspirada-em-python-49bi</link>
      <guid>https://dev.to/cumbucadev/programando-em-pitugues-uma-linguagem-inspirada-em-python-49bi</guid>
      <description>&lt;p&gt;&lt;code&gt;⚠️ Atenção: Esse texto é uma introdução e tutorial! Divirta-se! :)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Quando começamos a aprender a programar, uma das primeiras descobertas que nos deparamos é que: as linguagens de programação são todas em inglês! Bom, pelo menos as que são utilizadas no mercado de trabalho.&lt;/p&gt;

&lt;p&gt;Estatisticamente falando, apenas 5% dos brasileiros entendem inglês em algum nível, enquanto apenas 1% possui fluência. Ou seja, nem todos os falantes de língua portuguesa tem conhecimento do idioma inglês.&lt;/p&gt;

&lt;p&gt;O que faz com que a pessoa aprendiz passa encontrar barreiras que a faça dispor mais esforço para desenvolver várias habilidades ao mesmo tempo (programar e aprender outro idioma concomitantemente). Ela terá dificuldades de lidar com recursos e instruções da linguagem de programação, o que poderá comprometer sua aprendizagem de lógica e algoritmos.&lt;/p&gt;

&lt;p&gt;Aí tem-se a importância de existir uma linguagem como o Pituguês, em que a pessoa nativa em português consiga programar em sua língua mãe, eliminando a barreira idiomática.&lt;/p&gt;

&lt;h1&gt;
  
  
  Mas de onde vem o Pituguês?
&lt;/h1&gt;

&lt;p&gt;Sua sintaxe é inspirada na da linguagem de programação Python que, embora seu nome faça alusão a uma espécie de cobra e seu símbolo seja composto de duas cobras em Ying &amp;amp; Yang, seus criadores eram muito fãs da série de comédia “Monty Python’s Flying Circus” e batizaram a linguagem com o nome de “Python”.&lt;/p&gt;

&lt;p&gt;Pegando carona até mesmo no nome, se formos traduzir “python”, temos “píton”. Assim, para trazer a ideia de uma linguagem de programação inspirada em Python para a língua portuguesa, uniu-se “píton” + “português” que resultou em: Pituguês!&lt;/p&gt;

&lt;p&gt;E, como comentamos, o Pituguês vai se inspirar e buscar trazer características do Python para português, como…&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipagem Dinâmica
&lt;/h2&gt;

&lt;p&gt;Quando lidamos com linguagem de programação, devemos lembrar que existem tipos diferentes de dados, como dados textuais, numéricos, binários e etc.&lt;/p&gt;

&lt;p&gt;Algumas linguagens exigem que o tipo de dado seja declarado como, por exemplo, em Java, declaramos uma variável da seguinte maneira…&lt;/p&gt;

&lt;p&gt;&lt;code&gt;int numero = 2025;&lt;/code&gt;&lt;br&gt;
&lt;code&gt;String nome = "Java";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note que, em Java, indicamos o tipo do dado (int, para números inteiro, e String para tipos textuais), escrevemos o nome da variável e, por fim, damos um valor a ela. Se formos comparar com Python, já possui uma diferença acentuada…&lt;/p&gt;

&lt;p&gt;&lt;code&gt;numero = 2025&lt;/code&gt;&lt;br&gt;
&lt;code&gt;nome = "Python"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Como podem ver, já não é necessário indicar o tipo da variável, pois a linguagem irá verificar isso automaticamente, é o que chamamos de “inferir tipo”.&lt;/p&gt;

&lt;p&gt;No Pituguês, não vai ser diferente, a nossa declaração de variáveis também vai inferir o tipo...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;numero = 2025&lt;/code&gt;&lt;br&gt;
&lt;code&gt;nome = "Pituguês"&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Indentação
&lt;/h2&gt;

&lt;p&gt;A indentação nada mais é que o aninhamento de trechos de código que, no caso do Python, se dá através da tabulação (4 espaçamentos), ela tem o objetivo de determinar quais linhas de código pertencem a um bloco lógico, definindo a estrutura e hierarquia.&lt;/p&gt;

&lt;p&gt;Ou seja, declaramos uma função, por exemplo, em seguida, escrevemos os dois pontos e, logo abaixo deles, com certo espaçamento, começamos a escrever o que a nossa função irá executar. Dessa forma que definimos o escopo e a hierarquia do código, determinando em que momento o trecho de código é iniciado e finalizado.&lt;/p&gt;

&lt;p&gt;Caso a indentação não seja feita da maneira correta, sem o espaçamento ou com espaçamento excessivo, o próprio Python irá nos sinalizar com uma mensagem de erro.&lt;/p&gt;

&lt;p&gt;Na documentação do Pituguês você consegue ter acesso a exemplos de como a indentação funciona:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Fun%C3%A7%C3%B5es" rel="noopener noreferrer"&gt;Funções&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/La%C3%A7os-de-Repeti%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;Laços de Repetição&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki/Orienta%C3%A7%C3%A3o-a-Objetos" rel="noopener noreferrer"&gt;Classes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pituguês X Python
&lt;/h2&gt;

&lt;p&gt;Assim como o Python, o Pituguês também é uma linguagem de Código Livre e está aberta a contribuições e, deste a postagem original deste tutorial e introdução a respeito da linguagem, já aconteceram mudanças bastante significativas...&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaração de Variáveis
&lt;/h3&gt;

&lt;p&gt;Há pouco tempo atrás, Pituguês adicionava a palavra &lt;code&gt;var&lt;/code&gt; na declaração de variáveis, o que o distanciava de Python. No entanto, contribuições mais recentes da comunidade fizeram que consigamos declarar variáveis da mesma forma que em Python:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;linguagem_de_programacao = "Pituguês"&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Interpolação de Texto
&lt;/h3&gt;

&lt;p&gt;Em resumo, Pituguês existe no repositório de uma outra linguagem de programação em português chamada Delégua e acabou herdando algumas características dela, como a interpolação:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var linguagemDeProgramacao = "Delégua"&lt;/code&gt;&lt;br&gt;
&lt;code&gt;escreva("Linguagem de programação: ${linguagemDeProgramacao}")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Este tipo de interpolação também se distanciava do Python, mas contribuições recentes trouxeram proximidade entre Pituguês e Python e, agora, a interpolação segue o padrão f-strings:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;linguagem_de_programacao = "Pituguês"&lt;/code&gt;&lt;br&gt;
&lt;code&gt;imprima(f"Linguagem de programação: {linguagemDeProgramacao}")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lembrando que estamos atualização a &lt;a href="https://github.com/DesignLiquido/pitugues-docs/wiki" rel="noopener noreferrer"&gt;documentação&lt;/a&gt; do Pituguês constantemente e, qualquer dúvida que senha sobre a sintaxe, basta consultá-la!&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas como programar em Pituguês?
&lt;/h2&gt;

&lt;p&gt;Para programar em Pituguês, basta que você instale uma extensão no VS Code. Se na aba de extensões você procurar por "pitugues", deve encontrar a extensão da Design Líquido que possui todo um ecossistema de linguagens em português como: linguagem de programação, de marcação, de estilo, de consulta e etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cumbuca.dev/2025/11/07/vem-com-a-gente-programar-em-portugues/" rel="noopener noreferrer"&gt;Nesta postagem&lt;/a&gt; você pode encontrar um tutorial semelhante a este, mas que demonstra por imagens como instalar a extensão e como executar seus programar em Pituguês!&lt;/p&gt;

&lt;h2&gt;
  
  
  Lembrando...
&lt;/h2&gt;

&lt;p&gt;O Pituguês é uma iniciativa feita pela comunidade, para a comunidade e toda contribuição conta! 🐍💜&lt;br&gt;
É uma linguagem que está em constante transformação e vocês podem acompanhar junto com a gente todo esse processo!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/DesignLiquido/delegua" rel="noopener noreferrer"&gt;Código fonte do Pituguês no repositório de Delégua&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/DesignLiquido/pitugues-docs/blob/principal/CONTRIBUTING.md" rel="noopener noreferrer"&gt;Manual de Contribuição do Pituguês&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Junte-se a nós e ajude a construir o Pituguês — uma linguagem feita com comunidade, propósito e muito coração. 💜&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>python</category>
      <category>opensource</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Hackeando o Inglês: Programando na Língua em que Você Pensa</title>
      <dc:creator>Cumbuca Dev</dc:creator>
      <pubDate>Wed, 28 Jan 2026 17:34:31 +0000</pubDate>
      <link>https://dev.to/cumbucadev/hackeando-o-ingles-programando-na-lingua-em-que-voce-pensa-56e6</link>
      <guid>https://dev.to/cumbucadev/hackeando-o-ingles-programando-na-lingua-em-que-voce-pensa-56e6</guid>
      <description>&lt;p&gt;Ingressar no mercado de tecnologia, cujo idioma utilizado nas linguagens de programação é o inglês costuma ser bastante desafiador para quem ainda não tem conhecimentos da língua. É um cenário que força pessoas iniciantes a aprenderem duas habilidades ao mesmo tempo: a lógica de programação e um novo idioma. E, convenhamos, não são habilidades triviais de aprender…&lt;/p&gt;

&lt;p&gt;A barreira idiomática é uma das causas de desistência de muitas pessoas iniciantes na programação. Imagino que você mesmo tenha tido contato com alguém que comentou sobre a dificuldade com o inglês enquanto tentava aprender a programar, não?&lt;/p&gt;

&lt;p&gt;Buscando ultrapassar essa barreira, a &lt;a href="https://cumbuca.dev/" rel="noopener noreferrer"&gt;Cumbuca Dev&lt;/a&gt; e a &lt;a href="https://www.designliquido.com.br/" rel="noopener noreferrer"&gt;Design Líquido&lt;/a&gt; se uniram para oferecer ferramentas e conteúdo de capacitação técnica que são acessíveis a pessoas falantes da língua portuguesa e podem ser&lt;br&gt;
usadas para fins educacionais ou comerciais e, acima de tudo, são Open Source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas quais são a vantagens de se programar em português, afinal?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Facilita a Localização de Erros&lt;/strong&gt;: Programar em português pode tornar mais fácil a localização e correção de erros de código, uma vez que as pessoas desenvolvedoras podem compreender rapidamente o contexto dos problemas;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Acessibilidade e Compreensão&lt;/strong&gt;: Programar em sua língua materna, como o português, torna os conceitos de programação mais acessíveis e fáceis de entender, especialmente para iniciantes, reduzindo a barreira de entrada para novas pessoas programadoras;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Facilita o Aprendizado&lt;/strong&gt;: A programação em português permite que as aprendizes concentrem-se nos conceitos de programação em vez de lidar com a barreira de um segundo idioma. Isso pode acelerar o processo de aprendizado, especialmente para pessoas que não têm fluência em inglês (considerando que cerca de 95% dos falantes de português nunca tiveram contato com a língua inglesa);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Melhor Comunicação e Documentação&lt;/strong&gt;: Programar em seu idioma nativo leva a uma comunicação mais clara e eficaz com colegas e clientes locais. Além disso, a documentação em português é mais fácil de compreender e seguir;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contribuição para a Identidade Cultural&lt;/strong&gt;: Linguagens de programação em português contribuem para a preservação e fortalecimento da identidade cultural e linguística, promovendo o uso e a adoção do idioma em contextos tecnológicos;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Agora, vamos conhecer um pouco mais do ecossistema?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Delégua
&lt;/h3&gt;

&lt;p&gt;Uma linguagem com sintaxe totalmente em português, pensada para tornar a programação mais próxima, inclusiva e acessível para quem fala a nossa língua.&lt;br&gt;
E vai muito além do educacional: com Delégua e o ecossistema da Design Líquido, você pode construirprojetos reais e profissionais 100% em português!&lt;/p&gt;

&lt;h3&gt;
  
  
  LMHT
&lt;/h3&gt;

&lt;p&gt;Inspirada no HTML, LMHT propõe uma estrutura de marcação totalmente em português, facilitando a compreensão e utilização por falantes da nossa língua.&lt;br&gt;
Mais do que uma ponte para quem está começando, a LMHT é uma ferramenta prática para a criação de páginas e sistemas reais, sem barreiras idiomáticas.&lt;/p&gt;

&lt;h3&gt;
  
  
  FolEs
&lt;/h3&gt;

&lt;p&gt;FolEs é a linguagem de folhas de estilo do ecossistema Design Líquido, análoga ao CSS, com sintaxe em português.&lt;br&gt;
Pronta para uso profissional, também torna o aprendizado de estilização muito mais acessível!&lt;/p&gt;

&lt;h3&gt;
  
  
  LinConEs
&lt;/h3&gt;

&lt;p&gt;Linguagem de consulta de banco de dados inspirada no SQL, com comandos e estruturas em português, tornando o trabalho mais acessível para quem fala a nossa língua.&lt;br&gt;
Amplia as oportunidades na área de dados, democratizando o acesso a uma das habilidades mais valorizadas no mercado de tecnologia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Líquido
&lt;/h3&gt;

&lt;p&gt;E, finalmente, o framework que conecta todas as tecnologias da Design Líquido! Com ele, é possível desenvolver aplicações web com um código 100% em português!&lt;br&gt;
Reúne linguagens, ferramentas e documentação pensadas para tornar o desenvolvimento acessível&lt;br&gt;
em português, desde o aprendizado até a produção de soluções profissionais.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lembrando que esse ecossistema é de código aberto e você pode encontrá-los &lt;a href="https://github.com/DesignLiquido" rel="noopener noreferrer"&gt;neste link&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Além disso, você também pode contribuir e ajudar os projetos a crescerem!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Contribuir com projetos de Código Aberto pode ser uma ótima porta de entrada para uma pessoa iniciante construir experiência, aprender junto à comunidade de código aberto e aumentar network. E, para além da experiência, participar do desenvolvimento de projetos assim tem um gostinho especial de estar construindo algo real e útil que pessoas que nem imaginamos podem se beneficiar!&lt;/p&gt;

&lt;p&gt;A Design Líquido e a Cumbuca Dev acreditam e praticam o código aberto como filosofia de trabalho. *&lt;em&gt;Todo esse ecossistema é feito pela comunidade e para a comunidade!&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Por isso, queremos te convidar a explorar, usar, construir e contribuir com estes projetos! Eles existem para beneficiar nós, falantes da língua portuguesa, tornando mais acessível o ensino e a prática da programação.&lt;/p&gt;

&lt;p&gt;Só assim, em unidade, podemos construir ferramentas que correspondam à nossa realidade!&lt;/p&gt;

&lt;p&gt;E, só para dar aquela reforçadinha: você pode encontrar todos estes projetos no &lt;a href="https://github.com/DesignLiquido" rel="noopener noreferrer"&gt;GitHub da Design Líquido&lt;/a&gt; com toda a documentação de como utilizar e como contribuir, além do canal no YouTube que contém uma série de vídeos demonstrativos, que explicam a estrutura de cada um desses projetos.&lt;/p&gt;

&lt;p&gt;Se você gostou do ecossistema e também acredita que o inglês pode ser uma barreira: dê uma estrela nos repositórios do GitHub ⭐ Isso ajuda mais pessoas a conhecerem este ecossistema e pode abrir portas para quem busca uma entrada na tecnologia.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>news</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
