O Olá pessoal aqui é o professor era algo Marinho é essa é a nossa primeira aula assim come de compiladores e é uma introdução introdução à compiladores e o que nós vamos ver aqui são os primeiros Consegues e esses conceitos vão ficar mais claro para vocês a medida que o curso vai avançando mas uma forma preliminar a gente vai ver esses conceitos não sei se aceitam isso de uma maneira um tanto Vamos dizer decoreba mas também vocês podem associar aqueles conceitos que vocês estudaram em teoria da Computação unicamente esta disciplina é uma cuida não sobra
a implementação do projeto de combinado hoje mas também é de interpretadores esses interpretadores podem aparecer aparecer inclusive em determinados sistemas que vocês estejam trabalhando desenvolvendo fazendo parte de uma equipe e que tem um determinado componente que requer um mecanismo de Reconhecimento de texto e de tradução ou de execução nas de interpretação desse texto em resumo um compilador é um tradutor de um texto escrito para outro texto escrito enquanto uma interpretado Qual é a tradução de um texto escrito para uma máquina para uma execução para uma máquina de execução seja para máquina real ou mesmo virtual
isso que eu estou falando ilustrado nesta figura nessa figura aqui né na figura que descreve o que é essa abstração Primeiramente nós temos um texto escrito numa determinada linguagem que a gente chama de linguagem fonte e esse texto codificado nessa linguagem a gente chama de código-fonte existe um texto de saída codificado numa linguagem b e esse texto a gente chama de linguagem ou essa linguagem que chama de linguagem objeto e esse texto a gente chama de corda objeto Observe que existe uma ideia errônea por trás dos conceitos que eu estou citando aqui primeiramente o Código
forte sim a maioria das vezes código fonte está escrito numa linguagem legível para o ser humano mas o código o texto o código objeto não é necessariamente o código O código binário não é necessariamente o código escrito e corta escrito numericamente não ele pode ser também um código texto do texto as dois você está traduzindo isso aqui de uma linguagem por exemplo a linguagem ser aqui para uma linguagem legível por exemplo a Sempre o macross sempre a esse do Onix e aqui nesta ilustração nós temos uma máquina né uma máquina pela cara que só que
é aquela máquina que a gente viu você merece passado né Você sabe qual é o nome desta máquina e esta máquina aqui na verdade ela está reproduzido uma função chamada a função é de um computável ou simplesmente uma uma função de tradução de estranhos Observe que aqui 7:30 e colocada na entrada estiver correta haverá uma string na Saída ou seja se o texto colocado na entrada estiver correto haverá um texto semanticamente equivalente ao da entrada numa boa chuveiro e eu certamente o que a gente Abstrai como saída pode ser também mensagem de erro a depender
dessa linguagem pode ser erro fatal o erro de advertência o que importa é o seguinte esta máquina está distraído o processo de transcrição de textos em a para textos em P O que é esperado é que esta máquina vá parar Sobre todas as circunstâncias circunstâncias desculpem esteja se código de entrada correto ou não quer dizer que se código de entrada não satisfaz esta linguagem haverá erros mas estava que irá para então irá parar sobre todas as circunstâncias Então você está bem com base na disciplina que nós estudamos mexe bem já sabe que tipo de máquina
é esta e já sabe que tipo de problema é este sabem que essa linguagem é uma linguagem que determinado tipo no Que diz respeito a sua computabilidade o que nos vimos na transparência interior e pode ser extraído um pouco mais nesta chamada anotação t a anotação ti é isso aqui Ou seja é uma rotação que denota o mecanismo de tradução de uma linguagem a para uma linguagem B conhecida entendo implementada a máquina e me então a máquina e me diz como é que se traduz um texto de ar para o texto de B é claro
que essa tradução é feita se de fato o Texto pertence a aí é criado o texto de então indiretamente isso aqui é uma maneira de dizer que o texto tem ar é reconhecido para que seja traduzido é a máquina enfim a gente pode abstrair como sendo uma máquina de execução ou seja um processador e Esse processador aqui está na verdade tornando o compilador uma máquina executável bom então esse P sala tá solteiro está representando um compilador executável tá aqui é o corpo forte que o código Objeto Tem sempre a gente precisa ficar representando o código
forte código na verdade vocês vão ver que já dá muito trabalho para desenhar testei tanto é que vocês vão ver que dá nas futuras transparências eu vou mentir alguma coisa nessa representação te e vou que eu estou usando o drive ou eu vou deixar que é que exista uma linha ou seja eu estou na verdade juntando um retângulo com um quadrado dois retângulos apertar um retângulo maior e um retângulo menor Vamos o que interessa e nós temos essa notação ter claro que é para gente possa fazer alguma coisa para distraído montagens de de compiladores é
claro que é para isso que estou querendo então uma primeira montagem que a mais simples de todas é esta montagem parte lá então na montagem para ir lá e nós temos aqui a linguagem a a máquina que traduz de a para b e que nós temos a linguagem B que é traduzida para ser aqui a máquina está sendo está Representando na verdade o código de máquina especialista em traduzir de a para b e o código de máquina especialista em traduzido para ser isso vai gerar um código resultante Então isso é equivalente até um compilador de
ar para ser exemplo disso é o compilador c que se vocês não sei se você sabe se nós compilamos qual opção - S onde esse é maiúsculo o compilador c ele gera ocorre é um código desculpe-me gera ou se Transforma e que código não código assembly há sempre aquele a sempre makrocentral já sendo de alto nível né queria sempre que dá para ver que dá para você escrever comentários que dá para você trabalhar bem mais do que ficar brincando com essas esse mais tá é o assembléia de linguagem vontade não é uma sempre de arquitetura
de computadores então se você tem o Curupira você na verdade ele compila gerando um texto intermediário um texto Temporário temporário em a cena aí é passado o efeito um pai de Line onde o código a sempre é multado então ele é transformado em código objeto binário relocável que o sistema operacional vai saber como fazer para transformar esse código relocável em código executável seja diretamente executável seja porque ele compõe a biblioteca que será utilizada por um executar então resultante disso é o que muitos de Nós pensamos do combinar você Aí ele pega e gera o código
diretamente executável Não na verdade ele passa por uma cadeia de transformação tá Inclusive essa última que eu falei o montador geram relocável linkeditor transforma esse local por um código de endereçamento absoluto executável ou de biblioteca Então essa ideia aqui que é montagem mais simples de compiladores Observe que o segundo estágio aqui que eu chamei de que eu tô tratando como formalmente como um compilador mais a Verdade ele é um montador tá é a gente for baixar o nível o montador ele traduz um código a febre um texto legível e as dois transforme o código binário
que será considera que é um código relocável que vira um link editor para fazer o encadeamento mas existe uma outra coisa o rabo que é o chamado processador o processador ele recebe um código geralmente esse código vem na forma de bisnaga na forma de hexadecimal Joaquim o binário né é um byte code seja lá como For e ele vai transformar a semântica deste código os pedaços né os as componentes semântica desse corte pode identificar as cobrinhas como linhas de código como corpos de ou como instruções de máquina ele vai interpretar isso como execução na máquina
mesmo processador prometido fazendo toda casa etapas de diferente de instrução Babyline certa do centro Ok para próxima agora ver uma coisa um pouco mais sofisticada que é a composição cruzada de compiladores ou Simplesmente o compilador da solução mais objetiva é o compilador usado o compilador Cruzado o operador em que nós e foi arquitetado que jogou o Tabu preparado desenhado Para uma determinada máquina ou sistema operacional e nós temos uma maneira mais sabemos como transformar os códigos de máquina dessa linguagem de baixo nível dessa linguagem M em código de máquina em linha e para fazer isso
podemos usar um outro processador em duas linhas Então esse ter que estar em baixo é um te de baixíssimo nível se a gente quiser pensar naquilo que é usual ou seja aqui nós temos um compilador de a para B voltado para uma determinada arquitetura ou determinados temos o know-how operacional cujo código está implementado nessa nessa linguagem de baixo nível nessa linguagem processador ele aqui nós temos como traduzir as instruções km para as instruções MM só que nós temos esse implementado numa Arquitetura qualquer o Nacional que é portanto um terceiro sistema operacional que vai ficar invisível
no final das contas por quê Porque esta máquina este palestino Este tradutor DM premia vai todos ele vai traduzir o código O código que faz a tradução de A para B no código em linha que é para rodar uma arquitetura em linha agora então nós temos um compilador cruzado seja um compilador que foi migrado da arquitetura e me para Arquitetura e minha hoje estou falando de arquitetura pode ser também o sistema operacional e me para os te operacional Emília Observe que nós podemos ter dois sistemas operacionais totalmente Invencível totalmente incompatíveis obras sobre o mesmo com
shampoo então com isso nós temos um campeonato resultante que é o chamado compilador cruzado mas esse mecanismo aqui ele é muito útil para outras coisas ele não é só Eu tô aqui nós estamos trabalhando com conceitos de baixo nível mas podemos utilizar isso aqui para uma coisa muito interessante que é aquela série me pergunta que nasceu o primeiro que nasce primeiro é o é o compilador c ou é um código a sendo o que nosso primeiro assim operacional Unix Ou foram compilador c e mais demais se me permitem no seu operacional e eu estou bem
a senha é um pouco seja doido suficiente ele nem equipa implementar o Sistema operacional todo é a sempre e agora nós precisamos de um compilador se como é que agente faz para ter esse comprador bom primeira coisa se eu sei trabalhar fazer mais tempo para Só faltou dessa é porque eu sou boa para cara entrou conheço assim olha só para nós meu concurso foi para compiladores e linguagens não tá gente então durante um bom tempo eu fui docente linguagem de montagem eu adoro linguagem contrário E aí eu falei para vocês que agora já Vou corromper
aqui na natação porque senão dá um trabalho danado ficar pagando essas linhas aqui ainda assim continua sendo um ter só que a trave ficou separada né o o travessão ficou separado do poste seguinte suponhamos mente a linguagem C O que significa tenha conceitualmente a linguagem C eu conheço assim táxi Eu sei como é que eu sei como é que escreve corretamente as sentenças da linguagem e eu sei como é que eu sei também interpretar Corretamente o sejam entenda o significado das construções essa linguagem eu entendo o que é o wi-fi de Nelson entendo que o
olho eu entendo o que eu do eu entendo que é o Switch Case né você já entendo essa linguagem eu entendo que é o sistema que por sinal é muito precário nós temos tipos a linguagem ser tem dessas coisas é só que é o seguinte da mesma forma quando eu era professor de linguagem a gente aprende a a traduzir muitas das Construções e para a sempre saúde que máquina que a gente usava a mão Ou seja é a caneta meu lápis ou a gente vai escrever diretamente no computador e significa fazer a mão é como
se a gente não tivesse combinado você então a gente pega os exercícios eram feliz assim como é que a gente traduz só coisa da linguagem você pegar um pedacinho de código simplificado sim o que produzir não da linguagem não temos que a gente aqui na nossa empresa Desenvolvimento a gente cansou tranquilamente de boa a gente não fazer os vídeo não adiantar aqui o Google a nossa empresa os nossos projetos e vamos seguir essa linguagem que nós colocamos aqui vamos fazer com que seja de fato produzir automaticamente para linguagem vantagem para o nosso computador e do
que cansamos de usar Então agora eu vou estudar assim táxi agora do ponto de vista formal né daquilo que muitos aí tiveram dificuldade que foi a primeira Unidade a segunda unidade de teoria da Computação né que é linguagens regulares e linguagens livres de contexto Eu sei né eu sei agora escrever assim táxi dessa e usando uma gramática e roubar-lhe de emular essa gramática uma coisa que nós sabemos fazer pouco mais adiante daqui umas duas aulas que o analisador sintáctico descendente LL um aí a gente normaliza a gramática do jeito que fica fácil transcrever essa gramática
com Corte de ser fazer o analisador sintático esse clarão só mentindo uma etapa anterior que é Boo analisador léxico mas tudo bem é claro que a linguagem é semântica nada é um corpo sem aula então tá bem eu conheço a semântica dessa linguagem e eu escrevo minhas as minhas regras semânticas na forma de ações que o convento minhas regras semânticas para o conjunto de ações semânticas de forma harmoniosa intercalada pegando carona da syntax ou Seja meu próprio nalisador sintático vai ter componentes em vamos dizer máquinas de tour que vão Bom dia eu vou fazer certas
ações semânticas de verificação o meu caso da verificação de tipos verificação de consistência de parâmetros etc e como também a parte de geração de código e se der também a utilização tudo isso eu vou fazer então como a gente vai fazer um curso nós vamos implementar uma compilador Pascal mas se implementado em Ser só que aqui é um compilador C implementado em ser então nós vamos dizer como é que se traduz um código separa o código a sempre implementando em você mas Observe que eu ainda não tenho um compilador C no único pilador você é
minha mão grande mas por nossa para nossa sorte o nosso sistema operacional possui o montadora é esse é claro que esse montador essa e vai gerar um código relocável que eu vou colocar o LD o código executável só que eu vou Medir essas essas essas e também diária então sem quebrar generalidade eu moro no dia que meu montador Na verdade ele também a gente editor quer dizer que ele transforma um código a febre e o código executável e mais ainda ele já é executado ele já existe e ele no comando e um chamado à é
si mesmo e o Unix Linux e se eu sei que o Pilar na mão eu agora fiz um compilador implementado na própria linguagem linguagem em que o compilador Compila disso eu já tô pronto aqui uma componente que é que vai fazer edição definitiva para o código de máquina executada né no na migração do compilador cruzado que que eu vou fazer eu vou pegar o meu compilador C e implementado em ser Portanto o meu compilador não passa de um monte de páginas de código ou de um monte de página já digitadas por um editorial editor de
texto e como se traduzir na mão eu vou ter o trabalho de pegar o meu Compilador está implementado em ser e vou traduzir para o a sempre à mão quando eu faço isso agora o que eu tenho é um código que traduz separa a sempre Shopping a codifi cação dele está toda em a febre neste caso agora eu uso minha terceira componente que é invocar o montador seguido de link editor para que ele finalmente transformam eu a sempre que é o compilador c para o compilador c que transforma o código ser em código a sempre
só que agora ele é um executável Da arquitetura Observe que eu tô fazendo propaganda gratuita do vai ser eu vou pedir nos meus direitos é isso gente consegue opção mais aqui só o que a gente tem então o que o nosso compilador faz é o mesmo do CC - é se ele transforma um código C no código assembly aliás é desta maneira que nós fazemos engenharia reversa para saber como é que um código se é transformado em a febre para que a gente possa depois transformar isso utilizar isso como Primitivas de regras sem mediações semânticas
né a gente elabora as regras semânticas e depois transformar isso em ações É semânticas continuando aí agora nós temos mais como Pilar Por que gera um código a ser que alguma coisa que tratou já serve para linguagem para linguagem de máquina para ser executável neste caso eu faço um pai dele eu pego o meu compilador que só faz transformar o e o código de ser em corta com a sempre faço um capilar o meu que vai gerar um Código executável arquitetura arquitetura hospedeiro isso equivale então basta eu fazem mesmo esse parte lá em fazer isso
na forma de script ou então fazer isso através daquilo que você deve ter aprendido sistemas operacionais usando o Ezequiel zecp essas coisas e passamos paramos etc para ter finalmente o nosso movimento aqui que traduza o código C para um código executável na máquina Hospedeira né no nosso mais serve Então é isso que nós Temos muitas vezes inclusive neste curso de comprei agora a gente vai bocal se você já querendo obter um código executado a gente não vai ficar prestando atenção nesse detalhe de que o código ser gera um arquivo temporário em assembly tá ok a
próxima transparência que aí que vocês vão entender o que é mesmo que é esse tal de Bootstrap isso aqui se botiweb quer dizer primeiro com os trampo é o processo de você calçar a bota Utilizando um estepe utilizando uma tira né uma calçador por isso se chama Brutus free Bootstrap é um é uma tira uma Correia que você encaixa na bota para poder vestir Só que os botons que o pessoal do Canadá a África usa o pessoal se acabou sei lá pessoal que tem deve que têm florestas uso umas botas que traga e xícaras notas
você precisa ter uma ferramenta que eu é uma tira de couro com encaixe para você puxar né então tudo streep é o processo de você Usar aquela tira de couro para calçar abóbora isso e sistemas operacionais é o processo de você carregar o programa por cima de um programa que está sendo utilizado para carregar o programa já aconteceu alguém que os carregar opinando morresse esmagada pelo peão mas aí interessa interessar ver o que ela é assim que tem um coração não funciona pra gente dá boot ele é um programinha geralmente escrito é a febre antigo
no caso da arquitetura Intel e AMD é um Programinha em 16 bits que carrega o programa definitivo em 32 bits ou de 64 bits para lançar né a lançar finalmente cano do sistema operacional né então é uma outra para uma outra coisa qual é essa outra coisa como é que agente faz para fazer um apetite ou até mesmo um upgrade do no na linguagem do compilador que a gente acabou de desenvolver então suponhamos então na verdade a gente vai fazer o sal Bootstrap da camisa o princípio de dos Frades para fazer o Controle de versão
cê então super o que nós trabalhamos o tempo inteiro com código Concórdia os escritos a linguagem 6.0 você já versão linguagem e repetimos durante o que está aqui está escrito como se ponto zero. Zero acho que vocês vão entender o que é primeiro 10 segundos é 7.0 é a nossa linguagem antiga suponhamos pode ser ativo tanto no sentido de um upgrade assim a nossa linguagem não possuía por exemplo fiquei ou que a nossa linguagem não permitiu Fazer abreviação por exemplo mais igual fez igual dividido igual que a gente não tinha isso mas agora vai ter
Olha o que que a gente fala quer dizer que que a gente tem um compilador antigo Então o que a gente faz escreve um novo computador e para uma nova versão da linguagem C uma atenção cê que possui mais atributos para facilitar a vida do programador que cá para nós é o usuário do nosso combinador usuário aqui é o programador Observe que para você ser programador você não precisa entender de compiladores muito menos de linguagem montagem agora se você trabalha com linguagem C E você tem uma boa noção de arquitetura de computadores linguagem de montagem
e você conhece compiladores teoria da Computação Você tem uma vantagem enorme porque você conhece é coisa da mesma forma que os que o médico essas o corpo humano Então as coisas assintomática se vocês consegue Identificar com mais facilidade do que um leigo que é aquele pessoal que aprendeu linguagem é ser pelo réptil não estou querendo ser antiético mas o hylian shield é um livro para pessoas muito iniciantes né é o meu o cientista computacional pode ser também uma boa leitura Inicial uma primeira leitura que você aprender a linguagem ser pode ser que tem que seja
uma boa mas vocês vão perceber rapidinho que não tanto pecado porque ele não Cuida dos aspectos arquitetônicos da linguagem C né mas vamos ao que importa aí suponhamos que nós operador e vai para moto vai servir para nova linguagem então o antigo não tinha switch-case não tinha essas coisas do novo tempo mas não só desses atributos que a gente tá pensando Pode ser que o compilador antigo a gente fazia ou seja a gente gerava códigos com pouca utilização E aí gente faz uma nova versão do compilador tem que ir os códigos gerados Em aí serve
ou na máquina é hospedeiro não sei o que que eu tô fazendo com esse comercial da Intel tô conseguindo ouvindo ouvindo aquela musiquinha da Intel na minha cabeça mas veja só agora eu tenho uma linguagem por exemplo aqui eu tenho um novo compilador sei que presente pode gerar o código mais eficiente então a gente não está olhando só aspectos formais é que envolvem sintáxi semântica mas também é o código eu coloquei agora um monte Misar dor no meu no meu gerador de código quer dizer que agora eu estou trabalhando como a linguagem não é só
sensível ao contexto agora tô trabalhando com uma linguagem escrita porque a linguagem restrita permite sanfona ou seja permite encolhimento permite sempre ficar são Então é isso que eu tenho mas acontece que eu vou ter que criar o meu computador usando o compilador antigo o YouTube meu novo compilador está Escrito em uma linguagem mais arcaica na linguagem mais antiga então com isso eu vou obter um compilador né que vai ser descer da versão um para a linguagem executável para montar o código executado e o método ou seja esta máquina que eu usei de tradução não é
tão eficiente ela ainda é a máquina original é uma máquina vamos dizer ineficiente com relação a nova então neste caso esse mesmo novo compilador ele ganha uma versão 1.0 continua 0 só Mudou o primeiro um mas o zero controle por quê Porque esta máquina vai gerar códigos talvez mais eficientes mas ela por si só não é tão eficiente por exemplo ela pode ser mais lenta e pode ser mais lenta do que a gente deseja a rir se esta máquina por entregue integralmente fosse compilado com novo compilador hora meu novo compilador ainda está faltando essa essa
parte da utilização do próprio compilador então neste caso eu pego a Minha a minha codifi cação mesmo que seja na linguagem antiga a linguagem antiga gente pode ser que ela fez apenas um em caso particular da linguagem mas mais nova mas isso não quer dizer que ela seja menos eficiente por causa disso não é menos eficiente porque na época eu ou você não sabíamos tanto da técnicas de otimização e a gente pegou os últimos capítulos do ar que eu posso a água o Croft Human de etc e vamos estudar os últimos capítulos do livro que
conta Dessa parte otimização que trabalha com gráficos e utilização aí a gente melhorou é então neste caso a gente vai pegar o nosso compilador o nosso novo compilador codificado na linguagem original ainda na linguagem original mas se quisesse poderia ser na linguagem nova só ia dar trabalho isso aí um trabalho desnecessário só que aqui nessa classificação não ia t-shirt de queijo alguma coisa assim né mas eu repito não É isso que vai te vai dar assistência para ligar compilador aí o que que vai acontecer vai compilar como você zero é dialeto de ser 10 Desculpe
é um caso particular de ser um que que vai acontecer aqui um código um compilador em C um já usando o código que gera o compilador que gera código mais eficiente Apesar dele não será suficiente e por último essa máquina que ele gera recente é o novo compilador agora que Gera não somente corpos eficiente com o público só agora é mais eficiente porque ele foi reclamar máquina de tradução dele foi recuperada com um novo compilador gera corpo mais eficiente e portanto ele mesmo mas é suficiente A ideia é assim que se faz dente e upgrade
no sistema operacional Linux e no caso do meninos quando a gente usa aqueles mecanismos automáticos de atualização então quando a gente atualiza opera crochê na verdade não somente é feita Essa primeira etapa como depois a receita ou seja o próprio compilador o código-fonte do comprador tem que ser recompilado pelo novo compilador intermediário gerando um compilador definitivo mais além de gerar códigos eficiente que o primeiro um ele você só também e eficiente que é o segundo o que Qualquer dúvida vocês me procurem nas aulas 5 horas tá ok o compilador a gente olhar aqui o produto
é só Cavaquinho ali aquele ter que a gente coloca ele Na verdade é muito mais inteligente mais interessar que a gente tem uma engenharia para abordar um pouco o processo de construção de um compilador primeira coisa que Nós pensamos uma linguagem programação pelo menos a convencional É que ela pode ser estratificada conforme A Hierarquia de chomsky que vocês lembro muito bem o que é isso então linguagem a parte da parte léxica de um compilador ou seja que Verifica-se uma coisa é um identificador de alguma coisa É eu sei lá o que for ser um operador
se é não sei o que essa parte e é na verdade corresponde a estrutura léxica da linguagem programação e quem faz as verificações quem verifica se as estruturas lésbicas estão escritas corretamente é o analisador léxico aqui nesse texto que eu escrevi aqui ele está dando como exemplo o conceito de identificador Observe que o Identificador ele é qualquer coisa que começa com uma letra e depois pode vir zero mais letra ou digito em qualquer ordem eles estão cansados Desse exemplo que vocês viram fizeram os exercícios e pedra em teoria da Computação só quem cooperadores isso aqui
para syntax não importa que é Axis um dois três e o que importa que isso aqui foi classificado como um toque chamado Eyed então Eyed é uma coisa só que funciona como um t e como ele muito de um alfabeto mas é um Alfabeto que transcende o alfabeto de rap dois aqui é construído em cima de um alfabeto ast2 Rafa e aqui é uma string mas aqui não ele classificou essa string como poderia ser qualquer outra coisa com mãe de então poderia ser isso poderia ser abacaxi poderia ser x123 poderia ser qualquer coisa que te
começar você como a letra ele classificaria como identificador por quê Porque para ser um táxi não interessa qual seria o conteúdo Lex o que mais Tarde a gente vai chamar que ele é sistema ou em inglês Lezin não importaria Qual é o teu do léxico desse identificador o que importa é que seja um identificador bom então o que o analisador léxico faz é pegar um fluxo contínuo de caracteres e transformar enquanto ele for reconhecendo determinado o padrão que está sendo a pedido por essa sequência de caracteres identificar o final desse padrão Aí ele vai produzir
um fluxo de Trocas na prática é assim o analisador sintático pede o próximo toque aí o analisador léxico inicia o processo primeiro ignora os brancos né os espaços em branco ele ignora entrar em branco quebra de linha a tabulação pela ignora e pega onde começa a primeira coisa que seja não bloqueia ele faz a varredura da esquerda para direita então para fazer um kkk vai para a direita até chegar em alguma coisa que identifique que acabou aquele padrão E aí ele manda para o Analisador sintático Ou aquele Tolkien que ele verificou aqui um exemplo se
viesse eu fiz um dois três e então a gente aquilo espelhado né seria teria que ser escrito aqui da da direita para esquerda né a x 1 2 3 terminado com ele então ele pegaria caráter por caráter e identificaria a x 1 2 3 e depois dele teria que vir uma pop Bíblia então espaço em branco ou então um operador alguma coisa que não faça parte do Padrão de um identificador aí não pararia o processo ali e envia para o analisador sintático luta o quê que foi classificado pelo caso foi aí então ao longo dos
sucessivos pedidos de novo toque essa Isso aqui vai ser peitoral quente visto como uma sequência de toques deixa eu ver o próximo exemplo talvez melhora essa isso aí que estou falando por exemplo essa sequência i x maior igual a ontem Max: = x s-max 2.0 E aí: igual é o operador corresponde Algo a stream do operador de atribuição ou seja em inglês a Sarna acontece que if É um tipo particular de identifica boca a gente vai chamar de palavra-chave vou explicar daqui a pouco porque agora x não é um identificador definido pelo usuário é uma
variável então é mais de maior igual é um toque Correta que corresponde a isso aí que a operadora atribuição a sgm Observe que essa sequência aqui essa sequência de caracteres ações foi transformado numa Sequência de Top cada toca na prática é o número que a gente na verdade identifica no código-fonte com aquelas constantes pré-definidas e ou seja aquelas impedido definir então a gente coloca essas teria definir igual número é o número tal gostaria de falar na Índia o número tal a gente faz isso que vocês vão ver nossa alma e não nos aula síncrona que
me dá umas aulas de laboratório serão as aulas sintomas as aulas teóricas serão há 5 Horas bom então neste momento que vocês estão lados que vocês estão recebendo esse material está havendo aula síncrona que está cuidando dos aspectos melhor apresentação do curso e depois cuidar dos trabalhos dirigidos de compiladores que vão resultar nos trabalhos que vocês farão em grupo para para cultura nota a nota de vocês semelhante ao que eu fiz em teoria da Computação só que aqui vai ser um pouco mais rigoroso No que diz Respeito ao trabalho individual tá a gente aqui vai
ter um pouco mais de trabalhos individuais em e teremos um certo número de trabalhos trabalhos em grupo que foi que está sendo explicado na aula sim então essa sequência aqui na verdade significa uma sequência de números com alguns separador alguma coisa que identificam separador não quer dizer que o analisador léxico vai gerar toda essa sequência de uma só vez Pode até ser É o correto é que o analisador citar peça por um analisador léxico alguma coisa e recebe tô aqui if pede o próximo recebe aí de pede o próximo recebe maior igual seja g-pad o
próximo recebe outro é de pede o próximo recebe vem Observe que tanto x quanto Y quanto Max são transformados em Raid mas if é transformado em se pensa que tem um pouco e reservado unicamente para isso então quer dizer que eu tô quem isso funciona como uma chave única para a Stringhi if a mesma coisa com vem e com s neste caso significa isso tá significando que nós temos um uma palavra chave mas esquece aqui nós temos tô que são reservados e eles funcionam como palavra-chave quer dizer que esses troncos sólidos e para cá daí
fiz isso único toque isso ou seja para cada toque Irresistível muito string with já para agir existem infinitos identificadores com meu caso nós temos que identificador lembrando aí Quem tá com saudade teoria da Computação identificador vai ser um Alpha seguido de Alpha o dígito entre parenteses elevado* né Isso significa que vai ser Alpha ou seja uma letra seguida de zero ou mais letras ou dígitos então Alpha é qualquer uma das 26 letras maiúsculas e 26 letras minúsculas do alfabeto europeu sem acento qualquer um dos 10 dígitos né então isso aqui é só pedir para ficar
com por padrão identificador já o que a gente está tratando como ir antes entra E Efigênia ou seja para cada aí fiz isso só um toque Ah tá e expressa-se eu tenho toc eu tenho faz trem if certo é bom então aqui tá eu estou falando aqui a interação entre o lexa lexa na verdade ou não que a gente vai chamar o analisador léxico para ter um nome curto e o parser Né que é o nalisador sintático eles interagem eles interagem através de uma função chamava atenção cê chamada crédito que que a gente vai Implementar
é verdade será nosso primeiro trabalho de laboratório no laboratório dos exemplos para vocês e se desenvolverem a partir daqueles exemplos o ruim é quando vocês querem me devolver o próprio exemplo e vocês não fazem nada tá é um curso que envolve conhecimento de programação não só lógica de programação como saber trabalhar com a linguagem cê só precisa saber programar e Enfim voltando ao que interessa Então nós vamos desenvolver uma função cujo Nome ou seja cuja convenção que a gente vai usar é que essa função se chama ele é token por analogia a Gates e enquanto
Gates ser ela pega um caráter do buffer Gates toque pega um toque de uma fita de uma fila de caracteres tá então nosso grande touca vai fazer o papel tu quer ser Então é isso que é assim que é feita a interação entre o analisador léxico e um analisador sintático lecter e o parça então pasta pack 1 próximo topo e através da função devolve esse esse Toque na devolve esse toque através de um operador que eu estou mentindo aqui que na prática não nas aulas práticas vocês vão reconhecer rapidamente porque ele vai se chamar de
look a regra quem tá no carreteiro aquela visão ver o que está mais à frente Dele uma visão antecipada E é isso que eu vou explicando aqui com o decorrer das próximas aulas essas coisas que estão isso que eu estou falando aí não ficar bem mais claro sabe e é sempre boas e Revisitar essa primeira aula quando você for pegou quando vocês forem pegar as próximas duas três transparente aulas multimídia né aulas gravadas a cake Boll e o analisador sintático se a gente for pensar sob o analisador sintático que fizeram as bebidas correspondências agora enquanto
o analisador léxico recebe uma fila uma sequência na string de caracteres ou analisador sintático recebe né agora a gente está omitindo Quem é que quem é que precede o analisador sintático quer dizer que o analisador sintático enxerga Abstrai o mundo que o antecede como uma fita de tokens uma fita abstrata de toques e o buffer o operador que transporta esse estou que existia se chama Lucas pede como eu comentei na transparência anterior então Lucas reta vai ser uma variável global que é o que o analisador sintático utiliza para verificar se bate com o que se
encontra no topo da pilha e A gente foi lembrada canalizador sendo simpático aquele aquele autômato de pilha nós estamos vocês devem lembrar disso é lembro que quando topo da pilha é um toque em esse tom que tem que bater contou que que vem da fita é exatamente isso aí o token que vem da fita é o Lucas é bem que agora está enxergando esse universo aqui como o alfabeto de toques Observe que cada ator que pode ser uma linguagem regular infinita tá Bom simpatia ele produz essa Flash branca quer dizer que é algo que não
precisa ser pode ser meramente virtual virtual quer dizer em espírito desculpa corre comparação mas quer dizer que a descida que ele vai ou seja o processo de análise sintática vai invocar impulsivamente uma gramática livre de contexto e essa sequência corresponde a uma árvore uma árvore de derivação que ainda pode ser transformada numa árvore a testar uma árvore E vai ser uma árvore em princípio vai ser uma árvore estritamente binária para entre si próprio mas não não é bem a forma normal de tons que não tá eu estou pensando em operadores binários E aí nesse caso
não escorrega isso Isso corresponde a uma árvore abstrata é sintática tá é claro que se eu tiver alguma coisa aqui que passa a ter três componentes isso aqui já passa ser na verdade um nó de onde derivam para as coisas onde as três coisas significa 13 Operamos Tá mas não se atenham a isso detalhes no procure entender agora o que significa mas apenas procure perceber que isso tem muito a ver com aquilo que vocês verem teoria da Computação na segunda unidade Tem sim a ver com água derivação por quem quiser ser curto e grosso não
precisa estar utilizada insulta insertar na forma de estrada pode ser bom então é isso que está significado isso quer dizer que ele Abstrai uma Sequência de toucas para uma coisa que a gente chega para uma topologia que é a de uma árvore de animação que significa estar sintaticamente correto o ok esses bolso que a gente que a gente viu apesar de estar produzindo uma árvore dele bastante não precisa assistir ela apenas Abstrai a sequência de chamada de procedimentos que regulam a descida numa árvore que simulam a gramática a utilização das regras de produção de uma
gramática livre de Contexto Observe que o Buzz ser ele não é tão inteligente para ele o que interessa é só estética para ele interessa saber se as árvores estão lotadas corretamente ou seja ele só quer saber se onde há de vir um identificador venho de fato um identificador onde a div vem tem que vir de fa vem onde há de vir um operador de atribuição Então tem que vir mesmo operadora de atribuição então onde há de vir é o o filho e o que vem é o que bate Conquistar o topo da pilha a gente
fala que uma coisa bate com outro em inglês a gente chama isso de net.na pch então quanto duas coisas net quer dizer que batem quer dizer que uma bate com a outra né quer dizer que elas têm assim caixa é isso tá significando tá o segundo objetivo da realmente a verificação sintática interessa abre aí sua parceria para dizer que está sem quatro sintaticamente como será quando foi construída a corretamente a última Que a gente conseguiu ser construída ela foi finalizada ou seja ela vai ter uma copa formada de terminais é porque chegou até o fim
tudo foi conseguiu ele conseguiu chegar e significa que aquilo que foi colocado na entrada é sequência de toucas ela conseguiu ser derivada a partir daquela gramática né ou daquelas gramáticas que estão aquele coquetel de gramáticas que vão analisadores neste caso do citado está funcionando muito comum desse zhou vocês lembram disso Teoria da Computação cosméticos ela foi um desses um ela simplesmente dizendo que tá ferro ou se está errado mas está continuidade existe as contas construções e numa linguagem programação que não podem ser totalmente explicadas através de uma gramática livre de contexto algumas coisas que podem
mas outras não outras requerem regras e ações temáticas que vocês vão entender o que são regras e ações temáticas que algumas Lembrando Que nosso laboratório vai ser aqui em casa e na casa de vocês é um outro computador que eu vou usar que fica no escritório e é isso computador que eu vou usar da forma da mesma forma que eu fazia isso em laboratório usando usado um data show aqui eu vou fazer uma transmissão e usando o Google Maps onde eu vou abrir o Haiti Miguel vai ser o que vai ser o cada evelope e
a gente vai usar o cabelão e vai também abrir um console Para fazer então a gente vai usar console cabelo elop vai fazer as compilações atravessa daí eu vou ensinar vocês a usar bem que faz a desenvolver o McFly Observe pedra o meu Consolo é que metade de vocês não tem o que eu o que eu ensino aprendem e vão irmão se desenvolver muito bem na vida profissional a metade tem mais que fazer um esforço para procurar entender o que o que eu faço né antes de ficar achando que eu Sou uma espécie de voz
de um jogo de computador de um RPG e que vocês estão aí para me destruir e não é isso você tem que entender que que eu sou um professor que entende bastante daquilo que eu estou lecionando tá eu sei construir compiladores eu sei projetar copiar top lado então ao que interessa é nós precisamos então de uma de uma próxima de uma terceira camada que vai ser o analisador semântico né esse diagrama que está ilustrando todo Processo de compilador então analisador semântico pode ser apenas a verificação que tem um determinado identificador ele foi devidamente cadastrados na
tabela de símbolos através do seu ex e deve ser feito sim ou seja uma vez que uma coisa foi identificada como e por exemplo fui abacaxi abacaxi foi classificado como aí de identificar o melhor não salvar o abacaxi na tabela de símbolos se eu tiver invocado abacaxi duas vezes nos copo de declaração da Linguagem então ele vai dizer que abacaxi já foi declarar abertamente declarado isso vai abortar o processo de compilação tá então é por isso que existe essa Conexão direta com gesso não esse fluxo de dados saindo do analisador léxico para a tabela de
simples a tabela de símbolos é uma componente semântico então só faz sentido dentro da garota se você tiver essa segunda etapa que é do analisador sem o analisador semântico ele pega via de regra ele pega carona do Analisador sintático Então não é como está aqui nesse desenho esse desenho é só uma distração na prática na prática a gente teria que ver o passa como se fosse uma porta e o analisador semântico como se fosse é uma top fazer uma torta de passas o analisador semântico seriam as passas distribuídos dentro dessa torta não sei se vocês
me entenderam mas o analisador semântico é um conjunto de máquinas de turing que estão ficando porque vou Pegar carona nas cidades quer dizer que em determinados trechos da gramática dentro do berço eu vou inserir uma ação sistemática responsável por uma determinada ação por exemplo cadastrar um símbolo na tabela de cima o verificar se o símbolo já existe é o que está fazendo Por exemplo por exemplo é o que ele pode estar fazendo aqui verificar verificar se os parâmetros passados para uma função estão seguindo a ordem de declaração de atributos de tipos dos Parâmetros onde foi
declarado está função também seria que acontece aqui a semântica não é só verificação de tipo e verificação de parâmetros verificação de declaração Bom dia de variáveis e funções e procedimentos não tem mais outra coisa em todo o meu forma que o analisador semântico ele pega carona das sintaxes o o código gerador de código pega carona do analisador semântico tá então quer dizer que todas essas coisas aqui desde O analisador semântico até o gerador de código eles vão na verdade é um por tabela vai pegar carona do analisador sintático Então na verdade é como se a
gente tivesse aqui um alguém surfando em cima de si e outro alguém surfando em cima do que está surfando O que é mais ou menos isso ou seja o parto está carregando isso aqui ao longo das descidas na derivação ou da subida se for analisador sintático ascendente e quanto esse daqui está gerando o código A medida em que o analisador semântico permite que seja gerado sks código graças a consistência Então se é consistente se por exemplo os tipos estão correspondendo a uma a uma expressão correta positivo então ele providencia ou seja se deu ok aqui
ele providencia e escolhe né seleciona a tradução correta para aquele trecho de código e assim por diante tá bom objeto de o código de entrada eu estou distraída aqui como uma fita Enquanto Aqui eu tenho um código objeto que é um objeto qualquer que eu não sei o que é objeto no sentido de organização objeto Ele simplesmente vai ser um objeto externo vai ser uma coisa produzido o que é eu não sei pode ser um texto parecer um executáveis pode ser Seja lá o que for né pode ser um objeto de uma impressora 3D e
pode ser o que o que for não necessariamente um texto ou um código binário bar se algo muito mais complexo Do que a Gente Tá imaginando Ok observe a complexidade na verdade que o desenho retrata uma complexidade muito menor do que acontece na vida real por causa dessa incrustação é do analisador semântico no parça e do gerador de código no analisador semântico o que é interessante é que na geração de código você pode explorar uma coisa que é a simplificação bom então se é a simplificação se nós pensarmos nisso ao pé da letra do que
Nós vimos e teoria da Computação que nós pensaram no princípio de correspondência de post coisa desse tipo está significando que nós estamos enxugando nós estamos entrando como código e saindo com o código mais enxuto quer dizer que ao longo do caminho pode ser até que tem inchado mas o que interessa é que no final ele saia mais curto então que se formou utilização temporal quer dizer porque ele está conseguindo considerado como algo está ser encurtado É o templo se é uma se a utilização espacial O que está sendo encurtado é o espaço hoje em dia
não se preocupa muito com esse negócio de utilização espacial não mas ainda existe viu ainda existe Você pode você tem ferramentas de utilização espacial de copos tá essas ferramentas de otimização horas nem precisam fazer parte necessariamente do campeão Oi gente olhar tudo isso aqui a gente vai ver que correspondem as quatro Camadas da hierarquia de chomsky que vocês deverão identificar não um exercício não questionário que aparece toda minha aula assim como é finalizada como questionário que vocês têm que responder e postar como atividade né sempre vai aparecer uma atividade correspondente aquele dia de aula né
aquele dia de aula sim Chrome vai ter uma atividade assíncrona que vocês terão de postar com uma semana de prazo e geralmente o questionário é bobo e fácil De colar de copiar e eu serei Implacável simplesmente e aqui não tem nota é duas horas ou no o zero ou seja não interessa se a função uma questão tem gente que gosta de chorar eu já vou logo avisando que não é para ficar chorando chorando não tem nada disso e querendo chorar e não é não se é para entregar se é para entregar uma coisa escrita por
vocês mesmo faço um para vocês mesmo sem colar do colega tá olha a minha apresentação Ou se quiser você olhar na internet olha Baixo você puser na internet coisa que eu não tô dando aqui eu vou achar estranho que vocês têm encontrado isso mas não posso fazer nada agora se houver plágio eu vou simplesmente da falta então essa apresentação que estou fazendo este momento do ar em duas horas e valer duas horas é porque a apresentação mais atividade que vocês tem que fazer de responder a questionar então a minha aula não precisa ter necessariamente duas
horas ela pode ter Até uma hora mas vocês tem ainda um tempo a perder para responder o que chorar tá ok bom aí eu vim aqui umas coisas que eu estou comentando né sobre Na verdade eu coloco esse texto aqui para que vocês possam usar a fundação problema mesmo tá aqui eu estou falando sobre o diagrama vai se diagrama anterior que apesar de ser intuitivo mas está em tudo já falei que apesar de ser intuitivo ele na verdade Na verdade ele deu uma topologia um Pouco mais complexa Na verdade ele é ele o analisador semântico
e ele é ele é encostado no analisador sintático e por sua vez o gerador de código é incrustado no analisador semana reduzir fica difícil até para separar isso para modularizar a partir a ficar distinguir isso que vocês vão ver que a gente vai ter um módulo que é componente é o leque... E o passo é bom ser é só que quando a gente faz os demais take não sei o que eles a verdade vão Precisar de uma interface com Barça e essa interface é o que a gente faz chamar de ação semântica tá que se
baseia aqui é oriunda de um estudo onde a gente estabelece as regras semânticas que são as regras de tradução ou seja dado o código-fonte como é que fica o código objeto e isso a gente faz através e a gente tem por alisa isso daí através de ações temáticas que eu espero que vocês venham a entender aqui eu estou falando Dando um exemplo sobre a tabela De símbolos se por exemplo entre como a função em C int fwx, em ti y podem, quer dizer que o passo é recebe uma sequência de trocas entre a gente (do
blu-ray de 1,20 m de fecha parêntese Observe que estão colocando entre parques na entre meticais Barras verticais a pessoa plantas é uma fita né então isso aqui é que eu fosse uma fita de uma máquina de Julho das células são Estou quente correspondente ao que está escrito aqui Na string de entrada né mas a tabela de cima mas é necessário para fazer as amarras semânticas Entre esses símbolos que estão aqui porque aqui vai ser útil para citar' mas essas amarras semântica na tabela de cima serão úteis para dizer por exemplo primeiro se essa foi declarado
Esse foi o que que ele é uma função que retorna O que enterro então por exemplo esse argumento... 14159 é um argumento válido Porque de fato X é Dobra o segundo argumento que é 423 é Válido porque o segundo argumento é inteiro tá É isso aí era só essa história do Campo Bom OK agora acabou a nossa nossa primeira aula eu deixo sempre no final de cada aula assim como uma lista de questões são questões fáceis de serem respondidas vocês tem que responder e tem que responder de forma autêntica Quer dizer então que vocês vão
ficar inventando alguma inventando a roda oh oh defendendo teses de doutorado não Quer dizer que são questões simples e que vocês conseguem inferir Com base no seu conhecimento mesmo que tenha sido um conhecimento superficial de teoria da Computação mas Vocês conseguem fazer inferência em cima dessas questões e dar uma resposta satisfatória Observe o seguinte que aqui não é cobrado não está sendo cobrado o que vocês respondam isso com perfeição não é vocês responda com a impressão que o System o que vocês não podem ser a Irreverentes você já dar uma resposta descabido uma resposta que
não tem nada a ver com o que está sendo pedido outra coisa também é que não faz sentido é vocês deixaram de responder você já não é para deixar nenhuma questão em branco vocês respondam e na verdade isso aqui vai ser toda a aula toda aula Assim como nós vocês vão ter um prazo de uma semana para devolver um questionário e pinto um questionário simples e que está dentro do contexto do que foi dado não precisa Ficar buscando na internet nada disso Vocês conseguem responder pelos Que Vocês entenderam da aula se vocês não tiver entendido
alguma coisa você se repitam é uma gravação é um vídeo então vocês podem repetir o quanto que vocês quiserem claro né É claro também que vocês vão ficar uma semana inteira assistindo e assistindo e por favor né eu sou eu acredito e todos vocês têm uma tem um grande potencial grande capacidade até hoje eu Não vi um aluno que se esforçasse que fosse reprovada em alguma disciplina minha eu tenho que a grande maioria de vocês Passou de boa em teoria da Computação Então seria interessante que vocês respondessem por que vocês entregando essas cinco questões respondidas
significa que vocês estão ganhando duas horas ou seja estão deixando de perder uma forma duas horas de falta né você quando lanço vocês gravem as presenças ou as faltas né que A gente não lança presença Nossa falta na verdade das duas primeiras colunas correspondem a minha aula síncrona e as duas colunas seguintes correspondem a aula assim corra portanto eu só posso lançar nesses grade uma semana depois da aula síncrona que é o tempo que você tem para devolver esse questionário ao longo de um certo número de aulas que pode chegar até 15 bom então é
isso então aqui eu já coloco no cabeçalho explico o que que é para Fazer não deixa em branco uma questão senão você vai contar como falta então não importa se vocês responderão quatro questões e deixou uma e deixou uma quinta isso vai contar como falta porque eu não quero que vocês deixam questão em branco se tiver dificuldade conversa comigo me procura antes da vocês tem meu Whatsapp vocês têm meu e-mail vocês tem o próprio Google cresce Lon tem vários vários mecânico vários veículos de comunicação entre a gente tá ok É outra Coisa é plágio e
eu sempre falo que eu não quero saber de plágio eu não quero mesmo porque um dia um dia eu vou usar isso como como como um motivo de punição mesmo por isso é um a zero tá como isso aqui não é nota a punição para plágio é realmente da falta então se for constatado o plágio eu não falta você pode reclamar pode fazer que vocês quiserem desde que o seu se eu conseguir provar que é plágio é plágio mesmo acabou Então procure fazer O que é o correto eu sei que vocês vão tentar fazer o
correto mesmo tá E e é isso é E o restante vou falar sobre as atividades das aulas 5 nas duas primeiras aulas sintomas a gente conversa sobre sobre as atividades Porque além dessas atividades que são apenas para registrar a presença existem as atividades que serão consideradas receberam o substituto das provas presenciais que que são Aquelas mesmas Coisas que vocês fizeram comigo e teoria da Computação ou seja são isso exercícios que poderão olha essas listas de exercícios todas elas serão individuais só os as atividades laboratório que o desenvolvimento de um interpretador na forma de uma calculadora
de equações semânticas baseadas em dirigidas por sentados e finalmente o compilador que é o Pascal simplificado e modificado aí a gente nas aulas de laboratório que serão todas as Aulas sem Clans você Já teremos duas aulas de laboratório o laboratório computador então eu vou fazer eu vou utilizar o Google Maps para pro mediar para apresentar para vocês o que eu tiver que fazer os a minha programação que prefiro eu até prefiro que vocês me ajudem que vocês nem palpite né boca é muito bom quando vocês são cúmplices daquilo está sendo desenvolvido aquelas coisas que a
gente faz é laboratório assistido por mim é na Verdade elas são na verdade tem Place para o compilador tá então nas aulas pertinentes a gente conversa melhor sobre isso então pessoal paro por aqui e sucesso aí para vocês espero que todos trabalhem todos estudem todos se esforcem por que é isso que vale que vale a pena então um abraço para todos e se cuidem até mais