compilador software que traduz o texto (linguagem fonte) que representa um programa para código...
TRANSCRIPT
![Page 1: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/1.jpg)
Compilador Software que traduz o texto (linguagem
fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador
![Page 2: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/2.jpg)
Compilador Nesse processo de tradução, há duas
tarefas básicas a serem executadas por um compilador: análise, em que o texto de entrada (na
linguagem fonte) é examinado, verificado e compreendido
síntese, ou geração de código, em que o texto de saída (na linguagem objeto) é gerado, de forma a corresponder ao texto de entrada.
![Page 3: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/3.jpg)
Compilador A fase de análise normalmente se subdivide em:
análise léxica, análise sintática e análise semântica.
É possível representar completamente a sintaxe de uma Linguagem de Programação através de uma gramática livre de contexto.
Deixa-se para a análise semântica a verificação de todos os aspectos da linguagens que não se consegue exprimir de forma simples usando gramáticas livres de contexto.
![Page 4: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/4.jpg)
Pré-processador
Analisador Léxico
Analisador Sintático
Analisador Semântico
Gerador de Código(intermediário)
Otimizador
Gerador de Código
front-end
back-end
![Page 5: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/5.jpg)
final = (nota1 + nota2) / 2;
Analisador Léxico
Id1 = (Id2 + Id3) / 2
Analisador Sintático
=
Id1 /
+
Id2 Id3
2
Id1 final double ...Id2 nota1 double ...Id3 nota2 double ......
Tabela de Símbolos
![Page 6: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/6.jpg)
=
Id1 /
+
Id2 Id3
intToDouble(2)
Analisador Semântico
temp1 = intToDouble(2)
temp2 = Id3 * temp1
temp3 = Id2 / temp2
Id1 = temp3
Gerador de Código(intermediário)
Id1 final double ...Id2 nota1 double ...Id3 nota2 double ......
Tabela de Símbolos
![Page 7: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/7.jpg)
Otimizador de Código
MOVF ID3, R2
MULF #2.0, R2
MOVF ID2, R1
DIVF R2, R1
MOVF R1, ID1
Gerador de Código
Id1 final double ...Id2 nota1 double ...Id3 nota2 double ......
Tabela de Símbolos
Temp1 = id3 *2.0Id1 = id2 / temp1
![Page 8: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/8.jpg)
![Page 9: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/9.jpg)
Fases de um Compilador Gerenciamento da tabela de símbolos:
uma estrutura de dados contendo um registro para cada identificador, com os campos contendo os atributos do identificador.
Quando o analisador léxico detecta um identificador, instala-o na tabela de símbolos.
A estrutura de dados permite encontrar rapidamente cada registro e armazenar ou recuperar dados do mesmo.
![Page 10: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/10.jpg)
Fases de um Compilador Um compilador não deve parar quando encontrar
algum erro e sim continuar para detectar todos. A análise léxica substituir a estrutura por tokens e
acrescenta na tabela de símbolos A análise sintática transforma um texto na entrada
em uma estrutura de dados, em geral uma árvore, o que é conveniente para processamento posterior e captura a hierarquia implícita desta entrada
A análise semântica verifica os erros semânticos, (por exemplo, uma multiplicação entre tipos de dados diferentes) no código fonte e coleta as informações necessárias para a próxima fase da compilação que é a geração de código objeto
![Page 11: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/11.jpg)
Compilador simples de uma passagem Uma linguagem de programação pode ser
definida pela descrição da aparência de seus programas (a sintaxe da linguagem) e do que os mesmos significam (a semântica da linguagem)
Para especificar a sintaxe de uma linguagem, apresentamos uma notação amplamente aceita, chamada gramática livre de contexto ou BFN (Forma Backus-Naur)
Para especificar a semântica de uma linguagem usaremos descrições informais e exemplos sugestivos.
![Page 12: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/12.jpg)
Gramáticas Uma linguagem consiste essencialmente de uma
seqüência de strings ou símbolos com regras para definir quais seqüências de símbolos são válidas na linguagem, ou seja, qual a sintaxe da linguagem.
A interpretação do significado de uma seqüência válida de símbolos corresponde à semântica da linguagem.
Existem meios formais para definir a sintaxe de uma linguagem - a definição semântica é um problema bem mais complexo.
A sintaxe de linguagens é expressa na forma de uma gramática, que será introduzida na seqüência.
![Page 13: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/13.jpg)
Estrutura da vanguarda de um compilador
Analisador léxico
Tradutor dirigido
pela sintaxe
Fluxo de
tokensRepresentação intermediária
Fluxo de caracteres de entrada
![Page 14: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/14.jpg)
Definição da Sintaxe Uma gramática descreve a estrutura
hierárquica de muitas construções das linguagens de programação.
O comando if tem a estrutura em C If (expressão) comando else comando
O comando é if, um parêntese à esquerda, uma expressão, um parêntese à direita, um comando, a palavra else e outro comando cmd -> if (expr) cmd else cmd
![Page 15: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/15.jpg)
Gramáticas Um conjunto de regras de produção, é um
símbolo de partida. Uma regra de produção tem o formato , onde representa o nome da construção sintática e representa uma forma possível dessa construção:
<expressão> <expressão> + <expressão>
![Page 16: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/16.jpg)
Definição da Sintaxe A regra é chamada de produção If e parênteses são tokens As variáveis expr e cmd são sequências de
tokens e não terminais
![Page 17: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/17.jpg)
Elementos de uma gramática livre de contexto Conjunto de tokens (símbolos terminais) Conjunto não-terminais Conjunto de produções, onde a produção
consiste em um não-terminal, chamado de lado esquerdo da produção, uma seta e uma sequência de tokens e/ou não-terminais, chamado de lado direito da produção
Uma designação a um dos não terminais como símbolo de partida
![Page 18: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/18.jpg)
Gramáticas<expr> <expr> + <expr>
| <expr> – <expr>| (<expr>)| <const>
<const> <const><const>| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9
![Page 19: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/19.jpg)
Derivação A verificar se uma frase faz parte da
linguagem gerada pela gramática, envolve sucessivas substituições da cadeia de símbolos que ocorre do lado esquerdo da produção pela sua construção sintática correspondente, partindo do símbolo inicial.
Essa substituição é chamada derivação sendo normalmente denotada pelo símbolo .
![Page 20: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/20.jpg)
Derivação
(10 - 2) + 3
<expressão>
<expr> + <expr> (<expr>) + <expr> (<expr> - <expr>) + <expr> (<const> - <expr>) + <expr> (<const><const> - <expr>) + <expr> (1<const> - <expr>) + <expr> (10 - <expr>) + <expr> (10 - <const>) + <expr>...
![Page 21: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/21.jpg)
Árvore Gramatical
<expr>
<expr> + <expr>
(<expr>) <const>
<expr> - <expr>
<const> <const>
10 2 3
(10 – 2) + 3
![Page 22: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/22.jpg)
Gramática Ambíguas10 – 2 + 3
<expr> - <expr>
<expr>
<expr> + <expr>
10 2 3
<expr>
<expr> + <expr>
<expr> - <expr>
10 2 3
![Page 23: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/23.jpg)
Precedência de Operadores Como saber quem precede entre * e +. Para tal criamos mais dois não terminais
![Page 24: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/24.jpg)
Precedência de Operadores<expr> <expr> + <termo> | <expr> - <termo>
| <termo><termo> (<expr>)
| <const><expr> <expr> + <termo> <expr> - <termo> + <termo> <termo> - <termo> + <termo> 10 – 2 + 3
<expr>
<expr> + <termo>
<expr> - <termo>
10 2 3
![Page 25: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/25.jpg)
Precedência de Operadores<expr> <expr> +
<termo> | <expr> - <termo>
| <termo><termo> <termo> *
<fator>| <termo> / <fator>| <fator>
<fator> (<expr>)| <const>
<expr> + <termo>
<termo> * <fator>
3 2 3
<expr>1 + 2 * 3
![Page 26: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/26.jpg)
Gramática<expr> <expr> +
<termo> | <expr> - <termo>
| <termo><termo> <termo> *
<fator>| <termo> / <fator>| <fator>
<fator> (<expr>)| <const>
<termo>
<termo> * <fator>
<expr>1 + 2 * 3
![Page 27: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/27.jpg)
Tradução Dirigida pela Sintaxe
Analisador Sintático
Analisador Léxico
Analisador Semântico
Tabela de Símbolos
...
Programa Fonte
Código Intermediário
Solicita tokentoken
![Page 28: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/28.jpg)
Notação Posfixa (9-5)+2 => 95-2+ 9-(5+2) => 952+- Os parênteses são desnecessários na
notação posfixa porque a posição e a aridade (número de argumentos) dos operadores permitem somente um decodificação de uma expressão posfixa
![Page 29: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/29.jpg)
Definição dirigida pela Sintaxe A definição dirigida pela sintaxe usa
gramática livre de contexto para especificar a estrutura sintática de entrada.
Cada símbolo da gramática associa um conjunto de atributos e cada produção associa um conjunto de regras semânticas para computar os valores dos atributos associados aos símbolos que figuram naquela produção.
![Page 30: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/30.jpg)
Atributos Sintetizados O valor em um nó da árvore gramatical é
determinado a partir dos valores dos atributos dos filhos daquele nó.
Os atributos sintetizados possuem a desejável propriedade de que podem ser avaliados durante um único caminhamento bottom-up (final para início) da árvore gramatical
![Page 31: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/31.jpg)
![Page 32: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/32.jpg)
![Page 33: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/33.jpg)
Análise Léxica O Analisador Léxico (scanner) examina o
programa fonte caractere por caractere agrupando-os em conjuntos com um significado coletivo (tokens): palavras chave (if, else, while, int, etc), operadores (+, -, *, /, ^, &&, etc), constantes (1, 1.0, ‘a’, 1.0f, etc), literais (“Projeto Mono”), símbolos de pontuação (; , {, }), labels.
![Page 34: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/34.jpg)
Token Tokens, ou lexemas, é uma sequência de
caracteres que podem ser tratados como uma unidade na gramática de uma linguagem de programação
![Page 35: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/35.jpg)
Análise Léxica Entrada: arquivo texto Saída: sequência de tokens Conta número de linhas Remove espaços em branco e comentários Apresenta símbolos ilegais Produz a tabela de símbolos
![Page 36: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/36.jpg)
Por que análise léxica? Simplifica a análise sintática Simplifica a definição da linguagem Modularidade Reusabilidade Eficiência
![Page 37: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/37.jpg)
Análise LéxicaconstanteInt digito digito*constanteDouble digito digito*. digito*
digito {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
X* Representa uma seqüência de zero ou mais X.
![Page 38: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/38.jpg)
Autômatos Finitos Autômatos finitos, ou máquina de estados
finitos autômatos finitos determinísticos autômatos finitos não-determinísticos
![Page 39: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/39.jpg)
Compiladores A implementação de reconhecedores de
linguagens regulares (autômatos finitos) é mais simples e mais eficiente do que a implementação de reconhecedores de linguagens livres de contexto (autômatos de pilha).
Nesse caso, é possível usar expressões regulares para descrever a estrutura de componentes básicos das Linguagens de Programação, tais como identificadores, palavras reservadas, literais numéricos, operadores e delimitadores, etc.
Essa parte da tarefa de análise (análise léxica) é implementada separadamente, pela simulação de autômatos finitos.
![Page 40: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/40.jpg)
Autômato Finito Determinístico Definição. Um autômato finito
determinístico é uma quíntupla M = (K, Σ, *, s, F), onde K é um conjunto finito de estados Σ é um alfabeto s € K é o estado inicial F está contido K é o conjunto de estados finais é a função de transição, K x Σ para K
![Page 41: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/41.jpg)
Exemplo de um AFD Exemplo. Seja M o
autômato finito determinístico (K, Σ, *,
s, F), onde K = {q0, q1} Σ = {a,b} s = q0 F = K {q0}
q (q, )q0 a q0q0 b q1q1 a q1q1 a q0
![Page 42: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/42.jpg)
Valido no AFD (q0, aabba) (q0, abba)
(q0, bba) (q1, ba) (q0, a) (q0 ,€)
TT
TT
T q (q, )q0 a q0q0 b q1q1 a q1q1 a q0
Portanto, (q0, aabba)é aceita por M
![Page 43: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/43.jpg)
Autômato Finito Não-Determinístico Definição. Um autômato finito não-
determinístico é uma quíntupla M = (K, Σ, ), s, F), onde K é um conjunto finito de estados Σ é um alfabeto s € K é o estado inicial F está contido K é o conjunto de estados finais é a função de transição, K x (Σ c {,}) para K
![Page 44: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/44.jpg)
Exemplo de um AFND Exemplo. Seja M o
autômato finito não-determinístico (K, Σ, ), s, F), onde
K = {q0, q1, q2, q3, q4}Σ = {a,b}s = q0 F = K {q4}
q (q, )q0 a q0q0 b q0q0 b q1q1 b q2q1 a q3q2 € q4q3 b q4q4 a q4q4 b q4
![Page 45: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/45.jpg)
Entrada para um AFND (q0, bababab) (q1, ababab)
(q3 babab) (q4, abab) (q4, bab) (q4 ab) (q4, b) (q4, €)
TT
TT
TT
T
Portanto, (q0, bababab) é aceita por M
![Page 46: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/46.jpg)
![Page 47: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/47.jpg)
![Page 48: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/48.jpg)
![Page 49: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/49.jpg)
![Page 50: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/50.jpg)
![Page 51: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/51.jpg)
Análise SintáticaVerifica se as frases obedecem as regras
sintáticas da linguagem:
Por exemplo, uma expressão pode ser definida como:
expressão + expressãoexpressão – expressão(expressão)constante
![Page 52: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/52.jpg)
GramáticasUm conjunto de regras de produção, é um
símbolo de partida. Uma regra de produção tem o formato , onde representa o nome da construção sintática e representa uma forma possível dessa construção:
<expressão> <expressão> + <expressão>
![Page 53: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/53.jpg)
Gramáticas<expr> <expr> + <expr>
| <expr> – <expr>| (<expr>)| <const>
<const> <const><const>| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9
![Page 54: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/54.jpg)
Derivação A verificar se uma frase faz parte da
linguagem gerada pela gramática, envolve sucessivas substituições da cadeia de símbolos que ocorre do lado esquerdo da produção pela sua construção sintática correspondente, partindo do símbolo inicial.
Essa substituição é chamada derivação sendo normalmente denotada pelo símbolo .
![Page 55: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/55.jpg)
Derivação
<expressão>
<expr> + <expr> (<expr>) + <expr> (<expr> - <expr>) + <expr> (<const> - <expr>) + <expr> (<const><const> - <expr>) + <expr> (1<const> - <expr>) + <expr> (10 - <expr>) + <expr> (10 - <const>) + <expr>... (10 - 2) + 3
![Page 56: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/56.jpg)
Árvore Sintática
<expr>
<expr> + <expr>
(<expr>) <const>
<expr> - <expr>
<const> <const>
10 2 3
(10 – 2) + 3
![Page 57: Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo computador](https://reader036.vdocuments.site/reader036/viewer/2022062502/570638641a28abb823901637/html5/thumbnails/57.jpg)
Linguagens Regulares Gerada a partir de uma gramática regular. Pode ser representada através de uma expressão
regular. Pode ser reconhecida por um Autômato Finito. Considerando linguagens compostas por símbolos
0 e 1 podemos afirmar:a linguagem L01 ={0n1n| n 1} não é regular; a linguagem L01 ={0n1m | n 1, m 1} é regular;