e contextualizando compilador nada mais é que um programa um software que transformar arquivos de código fonte de uma linguagem de programação em programas executáveis em máquinas reais ou virtuais pronto contextualizamos tão bem aqui agora não sobrou mais nada para falar de compiladores pode ir para outro vídeo brincadeira viu gente fica aqui que isso não é nada ainda do que temos para conversar seriamente com vocês sobre compiladores Pode ser que a definição ao pé da letra não seja só essa se você quer entender de uma vez por todas o que que é um compilador esse é
o vídeo para você ver [Música] É sim se preparem que esse vai ser um Vaqueiros vídeos que fazem a sua mente ó fiz e explodi entender Os compradores pode não ser tão trivial quanto se olha rapidamente que eu não código fonte de uma linguagem que cumpri-la acaba se tornando algo corriqueiro mas você já parou para pensar o que que esses programinhas mágicos fazem por trás das Cortinas para o seu código sair do outro lado prontinha para ser executado para entenderam que um compilador faz temos que imaginar uma situação Imagine você tendo que programar usando linguagem
de máquina Sim estou falando de linguagem de montagem também conhecido como assembly quando eu sou o que seria uma versão bem simplificada de um Hello Word usando assembly essa meus amigos é a última etapa para conversar diretamente com Ryder ainda existem muitos deves atendem por aí ainda bem mas nosso. Aqui não dá para desenvolver um sistema de alto nível pode ficando dessa forma é necessário utilizar linguagens de alto é necessário codificar linguagens que sejam mais próximas de como a gente se comunica por isso surgiram as mais diversas linguagens de programação em especial precisamos tirar o
chapéu para linguagem ser Ela acabou sendo um divisor de águas muito importante para computação e em como os programas são desenvolvidos temos um vídeo super especial do dicionário do programador exclusivamente sobre ela com muitos detalhes uma vez que temos uma linguagem de nível mais alto logicamente precisamos de alguma coisinha que faça o caminho até chegar a linguagem de máquina efetivamente esses meus amigos se chama compilador resumidamente o compilador analisa o código fonte escrito em uma linguagem de nível mais alto como ser mais mais vibrante por exemplo e compila ou seja transforma aquele código em um
código como a linguagem de baixo nível também chamado de código binário como o código de máquina ou código a sempre fez código é criado especificamente para ser executado e um tipo de arquitetura de processamento como risc e cisc e hoje o código compilado em um programa ele não pode ser modificado Teoricamente ou seja todas as mudanças devem ser feitas no código fonte original e depois recompilar aliás desse processo de compiladores mais modernos é bem mais rápido pois eles conseguem detectar Quais mudanças foram feitas no código e assim o processo de compilação em alguns casos pode
ficar até 90 porcento mais rápido na arquitetura dos compiladores Existem duas grandes fases no processo de compilação que chamamos de fase de análise e fase de síntese parece simples mas não é a fase de análise também conhecida como front-end do compilador é a fase em que é feita a leitura do código fonte ele é dividido em parte e aí entrar análise léxica sintática e semântica justamente para encontrar e essa fase é gerado uma representação intermediária do código-fonte para ir sim ser enviada Clube é quente no compilador na fase de síntese onde o código sofre uma
série de utilizações e cuspido um código de máquina parece tudo tão fundo mas existem muitas complexidades em cada uma dessas etapas está preparado para conhecer mais delas a gente precisa entender que um compilador é um programa um software que em cada estágio recebe uma entrada analisa o processo que faz uma saída para ser usada como entrada no próximo estágio forense mesmo que esses estágios são divididos em fases e aprovações um aprovação se refere a passagem do compilador por todo o programa já fazem um estágio distinguível exatamente como explicamos anteriormente sobre as entradas e saídas só
lembrando que cada aprovação pode conter mais de uma fase para ficar mais claro de sua uma olhada nesse diagrama vamos entender melhor cada fase de compilação de um código começando exatamente pelo código fonte Esse é o ponto de partida para compilação ela que estão todas as instruções do nosso programa e exatamente por isso que o nosso canal se chama código fonte TV nessa primeira fase temos a na o que você provavelmente já ouviu falar ela Verifica o código-fonte e como um fluxo de caracteres e converte em lexemas Júlia que temos nada mais são do que
uma unidade mínima distintiva do sistema semântico de uma língua Ou seja para ficar mais claro Esse é o processo de separado o fluxo de caracteres em palavras diferentes que chamamos de tokens aliás esse processo de utiliza muito de expressões regulares para fazer essa identificação o analisador léxico dividir essa e senta-se em uma série de todos removendo o espaços em branco sou comentários no código-fonte não ganhou não tem problema que está um código essa declaração de uma variável inteira em uma atribuição em ser mostra bem que são os tokens o Inter é classificado como uma palavra-chave
o nome da variável como um identificador o igual como um operador o sem como uma constante integralmente o ponto e, como um símbolo na segunda etapa tem lugar análise sintática do código se o analisador léxico encontrar um token inválido e levar um erro esse processo é feito em colaboração com analisador de síntese Ele leu os fluxos de caracteres do código fonte verificam os toques legais e passa os dados por analisador de cintas e quando necessário o que acontece é que as expressões regulares do analisador léxico não consegue verificar Tocantins e balanceamento como parênteses por exemplo
então é preciso usar uma coisa chamada de com tax-free Gamer ou gramática livre de contexto ou simplesmente CFG CFG reconhecida por autômatos por sinal quem é um tipo de autômato que entrega pilhas aí Já começamos a entrar em teoria da Computação o que importa para nós nessa fase é que o CFG possui quatro elementos ver Sigma p e s representam os símbolos não terminais ou conjunto de variáveis Sigma que representam os símbolos terminais que é um conjunto de símbolos da linguagem p é um conjunto de regras ou conjunto de produções que especificam como na Live
não terminais podem ser combinados para formar Strings e finalmente o s que é os símbolos de partida onde um dos não terminais é designado para começar a produção O produto é de saída da análise sintática é uma estrutura de árvore que representa o programa ela prepara o campo para ser analisada semanticamente pois apesar de todo o trabalho o analisador sintático não conseguem determinar se o toque é válido se ele for eu não declarado ou inicializado antes de ser usado e se alguma Operação realizada no token é válido ou não esse é um trabalho próximo analisador
um semântico mas a terceira fase acordado ainda o analisador semântico entra em cena para colocar ordem na casa é ele que faz análise de contexto e verifica erros que o analisador sintático acreditou estarem certo é nesse momento que o compilador te ajuda a resolver problemas que você mesmo pode ter causado dependendo do sistema de tipagem da linguagem e também do compilador ele pode implementar resolução de tipos e de atributos variáveis e métodos e comparação de tiros depois de se trabalham análise anotada na árvore do analisador gramatical e bola para frente em estamos na quarta fase
onde entra em cena um gerador de código intermediário seu próprio possível gerar um código com instruções para uma máquina abstrata lembro que mostramos que o front-end do compilador traduz o programa de origem de um código intermediário e aí o back-end do compilador umas esse código para gerar o código final que será entendida pela máquina Pois é estamos justamente nessa etapa mas compiladores utilizam essa estratégia justamente por ser bem mais prático ter um código intermediário que seja Independente de qualquer tipo de máquina para ir sim gerar o código mais específico sobre falando aqui de vários tipos
de compiladores como GC que compila os e mas também compiladores para máquinas virtuais como o jvm e também o.net esse é possível ter copo em que roda na jvm fechar para o bebê mede que rodam no dot net o seu like que roda no erlandia virtual mas por isso é interessante conhecer os benefícios desse gerar o código intermediário Independente de Max primeiro é meu ódio é que a portabilidade é aprimorada a ressegmentação é facilitada e é muito mais fácil aplicar mudanças no código fonte e otimizando o desempenho a partir de um código intermediário se fosse
algo direto como o seu código-fonte gerado diretamente para o código de máquina e o seria muito mais complexo de ser feito pelo compilador quem é só isso hein hello world in setup bem simples né não quer ver como é a versão dele em uma linguagem intermediária do.net É isso aí tem muito mais código mas com instruções de relevantes para virar uma linguagem de máquina ali na frente voltamos então a quinta fase da compilação Calma que nosso código está quase pronto estamos falando do otimizador de código Independente de máquina nessa utilização do computador trabalha com código-fonte
intermediário que trabalha parte do código que não tem relação com registradores de CPU ou alocações O que é um código de exemplo de como isso é feito então toma esse código faz repetidamente a atribuição do identificador item Mas se for utilizado dessa forma ele não só acaba economizando os ciclos da CPU mas também pode ser utilizado por qualquer processador agora Chegamos na fase de geração de código que é considerada a fase final da competição nesta etapa já estamos falando de código de baixo nível que deve carregar o significado exato do código-fonte e ser eficiente em
termos de uso de CPU e gerenciamento de memória o gerador de código precisa ter nessa fase um conhecimento completo do ambiente de tempo de execução da máquina destino incluindo a identificar linguagem de destino para quitetura Risque ou seja a representação intermediária ou auxiliar podem ser apresentada de várias formas por um lado esfregue 60 que se tu ir a SP greyverse polish notation ou treasures coaching e só essas formas dariam vídeos próprios para conseguirmos explicar tudo isso melhor e ainda temos a seleção de instrução que matei o conjunto de instruções da máquina alvo além da locação
de registros e decide quais valores manter nos registros e quais registros serão utilizados para esses valores e por fim ele faz a ordenação das instruções decidindo exatamente a ordem que as instruções serão executadas Olha só esse trecho de código em assembly nesse caso levou L1 pode ser removido depois ele passa o controle para o L2 então ao invés de pular para L1 e depois para ele dois para o controle pode ir diretamente para ele do pronto Bem melhor não é verdade o nosso processador agradece Olha se você achou que as outras fazem são complexas Essa
é uma das mais complicadas pois lida muito próximo do Hardware tem muito mais coisa que o gerador de código faz para finalmente termos um código compilado baixo nível total e agora estamos prontinha para usarmos o otimizador de código dependente de máquina ele sabe tudo Oi gente que o código irá ser executado já tem um código de máquina praticamente pronto mas ainda assim é necessário uma utilização antes de cuspir o código de máquina essa etapa envolve registros de CPU e pode ter referências de memórias absolutas ao invés de referências relativas os utilizadores dependente de máquina se
esforçam para tirar o máximo de proveito da hierarquia de memória viu pode não parecer mas dá para utilizar muita coisa ainda como escolher boas estruturas de dados tentar reduzir o número de operações tentar evitar muitas chamadas a funções menores usar Flag otimização do compilador E por aí vai aí tem a comunicação é direta com o hard e todos os seus componentes eu Espero realmente que você ainda esteja e que a gente tenha conseguido ao menos dar uma luz no fim do túnel para você sobre o tema compiladores a gente tenta fazer um resumão Com certeza
se você tem interesse em saber mais é preciso cair fundo na teoria da Computação tem muita matemática envolvida o tempo e é tudo muito fascinante foi um pouco que se aventuram atualmente nesse Campo por isso é tão importante incentivarmos mais pessoas nessa área tão legal e você curtiu esse vídeo tentam deixar aquele like e o seu comentário Aproveita e deixa também uma sugestão de um novo Tela que por acaso a gente deixou algo importante de fora pode deixar aqui nos comentários também que a gente destaca combinado com um grande beijo no coração de vocês e
em especial aos programadores maravilhosos que criam os compiladores que usamos diariamente beijo pra vocês beijo tchau uau viu olha compiladores é tão pesado quanto falar sobre crédito é mesmo Inclusive a gente já tem vídeo sobre crédito e foi bem legal a computação não é feita só de npm install xyz quem é curioso como a gente e gosta de saber como as coisas funcionam deveriam ir mais a fundo nessa ciência maravilhosa então aqui tal começar com esse vídeo aqui do lado vai lá ver o vídeo deixa E aí