# Microfundamentos Compiladores

A grande maioria dessas aulas ainda não estão prontas, e algumas precisam de passar por algumas revisões antes que possam ser usadas para ensino. Por conta disso, olhe o conteúdo desse repositório com cuidado. Se você puder contribuir de alguma forma para esse repositório, eu ficaria muito agradecido.

**Microfundamentos de Compiladores**

![social2](https://user-images.githubusercontent.com/9157977/233157283-4e2e0a6c-0b15-4ef7-a34b-e4c4dcf8cfe4.jpg)

Essa disciplina tem a fama de ser bem difícil e as vezes pode ser difícil encontrar material bom na internet que consiga explicar bem o conteúdo. Por esse motivo, decidi criar esse repositório para agrupar todos os materiais pertinentes para o aprendizado da disciplina, desde a fundamentação em FTC(Fundamentos Teóricos da Computação), até a Geração de Código em Assembly.

Pense nesse repositório como apenas um lugar para auxiliar nos seus estudos.

Também não se esqueçam de olhar as referência bibliográficas sugeridas pelo seu professor. mas caso alguns de vocês queiram as minhas referências para a disciplina, fica ai as minhas indicações:

* [Compiladores: Princípios, Técnicas e Ferramentas](https://www.amazon.com.br/Compiladores-Princ%C3%ADpios-T%C3%A9cnicas-Alfred-Aho/dp/8521610572) (Mais completo de todos. Bom para ver teoria e prática)
* [Playlist de Compiladores do Canal "Aulas de Computação"](https://youtube.com/playlist?list=PL0Z-gyL9saMcajYH26KWKQG0nH2C2fsMQ) (Bom para ver a teoria, além de ter exercícios explicados)
* [Playlist de Compiladores do Professor Judson Santiago](https://www.youtube.com/playlist?list=PLX6Nyaq0ebfhI396WlWN6WlBm-tp7vDtV) (Alem de ter teoria, possui também exemplos de código)
* [Slides de Compiladores da UFMG](https://homepages.dcc.ufmg.br/~bigonha/Cursos/comp-slides-p4.pdf) (Slides da professora Mariza A S. Bigonha, teoria e prática muito bem explicada e com vários exemplos com imagens).

Se você quiser contribuir para esse repositório, dê uma olhada depois no arquivo COMO-CONTRIBUIR.md

Muito obrigado e um ótimo dia para todos! :)

**Sumário**

* [COMO CONTRIBUIR](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/contribuir)
* [Microfundamentos Compiladores](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/readme)
* [FTC](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/ftc)
  * [Autômato finito determinístico](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/ftc/automatos)
  * [Expressões regulares](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/ftc/expressoes-regulares)
  * [Gramáticas](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/ftc/gramaticas)
    * [Gramática LL(1)](https://github.com/Programando-o-Mundo/Microfundamentos-Compiladores/blob/main/FTC/Gramaticas/gramatica-ll1.md)
    * [Expressões regulares juntos as gramáticas](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/ftc/gramaticas/expressoes-regulares-em-gramaticas)
* [Introdução a Compiladores - conceitos principais e primeiros passos](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/introducao)
  * [Visão geral e conceitos principais](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/introducao/visao-geral-e-conceitos-principais)
  * [Definindo a linguagem que queremos criar](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/introducao/definindo-a-linguagem-que-queremos-criar)
  * [Criando a base do Compilador](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/introducao/criando-a-base-do-compilador)
* [Front-End - Fase da Vanguarda e Tabela de Símbolos](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end)
  * [Tabela de Simbolos](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/tabela-de-simbolos)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/tabela-de-simbolos/teoria)
    * [Implementação](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/tabela-de-simbolos/implementacao)
  * [Analisador Léxico](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-lexico)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-lexico/teoria)
    * [Implementação](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-lexico/implementacao)
  * [Analisador Sintático](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-sintatico)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-sintatico/teoria)
    * [Implementação](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-sintatico/implementacao)
  * [Analisador Semântico](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-semantico)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-semantico/teoria)
    * [Implementação](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/front-end/analisador-semantico/implementacao)
* [Middle-End - Geração de Código intermediário e Otimização](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/middle-end)
  * [Geração de Código Intermediário](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/middle-end/geracao-de-codigo-intermediario)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/middle-end/geracao-de-codigo-intermediario/teoria)
    * [Implementação](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/middle-end/geracao-de-codigo-intermediario/implementacao)
  * [Otimização de Código](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/middle-end/otimizacao-de-codigo)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/middle-end/otimizacao-de-codigo/teoria)
    * [Implementação](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/middle-end/otimizacao-de-codigo/implementacao)
* [Back-End - Geração de Código Assembly e Ambientes em Tempo de Execução](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/back-end)
  * [Geração de Código](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/back-end/geracao-de-codigo)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/back-end/geracao-de-codigo/teoria)
    * [Implementação](https://github.com/Programando-o-Mundo/Microfundamentos-Compiladores/blob/main/Back-end/geracao-de-codigo/implementacao.md)
  * [Ambientes em Tempo de Execução](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/back-end/ambientes-em-tempo-de-execucao)
    * [Teoria](https://programando-o-mundo.gitbook.io/micro-fundamentos-compiladores/back-end/ambientes-em-tempo-de-execucao/teoria)
