Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Aprenda a Criar Sua Própria Linguagem de Programação
Rating: 5.0 out of 5(18 ratings)
161 students

Aprenda a Criar Sua Própria Linguagem de Programação

Aprenda a criar, do zero, um interpretador estilo Python e JavaScript com C++
Created byMarcos Oliveira
Last updated 2/2025
Portuguese
Portuguese [Auto],

What you'll learn

  • Aprenda a construir sua própria linguagem de programação, do conceito ao código, desenvolvendo um interpretador estilo Python e JavaScript com C++
  • Como criar uma Linguagem de Programação DO ZERO
  • Avançar significamente seu conhecimento em C++ e programação em geral
  • Design Patterns
  • C++23
  • Memory-safety

Course content

1 section30 lectures7h 37m total length
  • Apresentação5:25

    Nesse vídeo inicial veremos o que será necessário para seguirmos e o que iremos aprender de fato.

  • Introdução7:21

    As linguagens de programação se diferenciam a princípio pela transformação. Existem linguagens de programação que são compiladas e as que são interpretadas, além das que utilizam os dois conceitos.

  • Iniciando o projeto fazendo leitura de arquivo17:31

    A princípio vamos criar a classe principal da nossa linguagem de programação, para isso vamos criar o header e a execução: My.hpp e My.cpp com 3 funções-membro do tipo estática para não precisarmos criar um objeto.

  • Escaneando e adicionando tokens18:47

    O scanner (ou lexer, analisador léxico) é a primeira etapa da compilação ou interpretação de uma linguagem de programação. Ele recebe o código-fonte como entrada e o transforma em uma sequência de tokens, que são unidades léxicas usadas pelo analisador sintático (parser).

  • Escaneando e finalizando Scanner28:12

    Etapas finais do scanner, como o tratamento de erros, a otimização do desempenho e a integração com o parser, garantindo uma análise eficiente e precisa.

  • Padrão Visitor17:01

    O Padrão Visitor é um padrão de design comportamental que permite adicionar novas operações a uma estrutura de objetos sem modificar suas classes. Ele separa os algoritmos da estrutura de dados, permitindo que novos comportamentos sejam implementados sem alterar o código existente.

  • Representando código AST7:00

    Esse capítulo não acrescenta nada de fato, ainda, ao nosso interpretador. No entanto, vamos preparar os arquivos que irão gerar o Ast(Uma árvore de sintaxe abstrata, uma estrutura de dados).

    Os Ast's será o "pseudo-código" transpilado, com ele ficará mais fácil até para criar árvores para ordem de execução.

    Por exemplo, suponhamos que o código da sua linguagem de programação possua essa linha:

    var result = 1 + 2 * 3 - 4


    Sabemos que na Matemática primeiro calculamos a multiplicação e divisão(na ordem que aparecerem da esquerda para direita) e depois as somas e subtrações também com a regra da esquerda para direita, isso quando não há parênteses e colchetes na expressão, pois eles priorizam ordem.

    Mas, como fazer a sua linguagem de programação entender e executar essa regra? Em resumo, vamos ordenar em uma árvore que montará a sequência de acordo com a precedência dos operadores.

  • Analisando Expressões - PARTE 0113:32

    No capítulo anterior nós adicionamos parênteses às nossas expressões numéricas. No entanto, qual a forma correta de adicionar?

    // Assim:

    (6 / 3) - 1


    // Ou assim:

    6 / (3 - 1)


    Lógico que você acertou, a primeira operação que é válida, pois multiplicação e divisão precisam ser efetuadas primeiro. Ou seja, nesse capítulo iremos tratar precedência dos operadors. E para isso usaremos a Análise de descida recursiva.

  • Analisando Expressões - PARTE 0223:03

    Continuação do capítulo anterior.

  • Avaliando Expressões - PARTE 0120:14

    Nos interpretadores os valores são criados por literais, computados por expressões e armazenados em variáveis. Ou seja, os objetos que criamos são implementados na linguagem subjacente em que nosso interpretador foi escrito.

  • Avaliando Expressões - PARTE 0216:00

    Continuação do capítulo anterior.

  • Declarações e Estado - PARTE 0118:28

    Nesse capítulo iremos nossa primeira execução de código, ou seja, não mais criar regras de leitura de árvores para cálculos(parecíamos que estávamos desenvolvendo uma calculadora ?).

    Vamos fazer pelo menos o print "" e print("") funcionar e conseguir imprimir e testar se a lógica para expressões que criamos no capítulo anterior estão realmente funcionando.

  • Declarações e Estado - PARTE 0219:33

    Nesse capítulo vamos imprimir declarações de variáveis.

  • Declarações e Estado - PARTE 0313:12

    Nesse capítulo vamos resolver alguns bugs.

  • Declarações e Estado - PARTE 0413:44

    Nesse vídeo vamos finalizar em capítulo.

  • Controle de Fluxo - PARTE 0111:20

    Nesse capítulo vamos implementar as condições: if, else além de and e or e também os loops: while e for. Vamos adicionar por partes para entendermos a lógica de cada um, até mesmo quando você quiser adicionar sintaxe extra na sua linguagem de programação.

  • Controle de Fluxo - PARTE 028:23

    Como implementar o and e o or.

  • Controle de Fluxo - PARTE 0317:07

    Vamos finalizar Controle de Fluxo nesse vídeo.

  • Funções - PARTE 0123:18

    Esse capítulo é um dos mais úteis desse livro/curso. Vamos implementar uso de funções pelo programador!

  • Funções - PARTE 0222:26

    Vamos criar as chamadas de função.

  • Funções Nativas7:50

    Funções nativas são aquelas já pré-definidas pela nossa linguagem. Por exemplo, print() já é uma função nativa da nossa linguagem, mas agora que temos o suporte a funções definidas pelo programador/usuário, basta usarmos os recursos que criamos para definir uma função nativa facilmente.

  • Resolucão e Vinculação - PARTE 0117:58

    Nesse capítulo vamos resolver problemas relacionados a escopos: global e local.

  • Resolucão e Vinculação - PARTE 0225:11

    Vamos criar a execução do nosso header criado no vídeo anterior.

  • Classes - PARTE 0120:17

    Nesse vídeo vamos iniciar a implementação do recurso de Programação Orientada a Objetos para nossa linguagem de programação.

  • Classes - PARTE 0218:23

    Nesse vídeo vamos implementar o recurso de instâncias.

  • Classes - PARTE 0317:54

    Vamos finalizar nosso capítulo: Classes

  • Ajustes e Desafios10:59

    Nossa linguagem já está quase pronto, mas vamos ajustar algumas coisas, além de desafios para aprimorar o uso do programador da nossa linguagem de programação.

  • Compilando e Instalando no Windows com CMake e MSVC8:17

    Vamos compilar, instalar e testar no Windows.

  • Compilando e Instalando em Sistemas tipo Unix com CMake6:18

    Nossa linguagem de programação em sistemas tipo e UNIX.

  • Mylang - Obrigado!3:00

    Terminamos!

Requirements

  • É necessário saber C++

Description

Vamos iniciar nosso "Curso de como Criar Sua Própria Linguagem de Programação". Meu nome é Marcos Oliveira e serei o seu guia nessa jornada. Eu vou usar imagens coloridas nos slides e também tentar fazer uso de uma linguagem divertida para tentar suavizar o conteúdo, pois teremos técnicas "pesadas" para compreensão, e acredito que dessa forma conseguirei fazer que você assimile os conhecimentos de uma forma mais agradável.

Primeiramente precisamos possuir os pré-requisitos:

Um computador

É indispensável que você utilize um COMPUTADOR, você pode até assistir os vídeos em um celular, mas se desenvolver códigos nele, sua dificuldade será muito maior. E esse computador precisa ter, no mínimo, 4GB de memória RAM. Qualquer sistema operacional satisfará as necessidades: Windows, macOS, GNU/Linux, algum BSD, Haiku e entre outros.

O que iremos aprender?

Nós desenvolveremos uma linguagem de programação DO ABSOLUTO ZERO, sem nenhuma ferramenta adicional. A escolha do editor de texto, IDE, compilador, SCons, analisadores estáticos e demais ferramentas de compilação fica a critério de cada um. Utilize o que você se sente melhor e mais confortável para adaptar os conhecimentos e raciocínios.

O que iremos fazer não se trata de uma engenhoca de um professor Pardal, e sim de técnicas reais de como as linguagens de programação com mais credibilidade do mercado são feitas.

Preciso saber sobre programação antes de iniciar esse curso?

Com certeza! Esse curso não é pra qualquer um. São abstrações avançadas que iremos transformar em código. Logo, você precisa saber C++ com Orientação a Objetos antes desse curso. No entanto, se você conhece C++, mas prefere aplicar as técnicas em outra linguagem de programação, é possível também e fique à vontade.

Aliás, eu aprendi todos esses conceitos que veremos aqui em um livro que ensinava em Java, eu conheço Java e uso também, mas adaptei para C++, pois tenho mais facilidade e também por questões de desempenho. No entanto, o único suporte que iremos oferecer é para códigos escritos em C++.

A versão do C++ que será utilizada nesse Curso será o C++23 com as declarações modernas e gerenciamento automático de memória para satisfazer a Safe Memory, logo, utiilizaremos:

  • std::any e std::variant em vez de void*;

  • Smart Pointers em vez de new, delete, malloc e entre outras declarações;

  • Conteiners e Classes modernas, como por exemplo: std::filesystem;

  • E em entre outras técnicas nesse segmento.

Logo, certifique-se que suas ferramentas satisfazem esses atributos.

Ao final iremos ver o código sendo compilado e rodando com os compiladores: GNU GCC, Clang/LLVM e MSVC, nos sistemas operacionais: DOS/Windows e GNU/Linux.

Após esse Curso suas habilidade em C++ e programação em geral, aumentará significativamente e a curva do seu conhecimento será muito mais elevada!


Who this course is for:

  • Desenvolvedores de Softwares, Estudantes e Entusiastas