prof. bruno moreno aula 9...
TRANSCRIPT
![Page 1: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/1.jpg)
Compiladores
Prof. Bruno Moreno
Aula 9 – 06/05/2011
![Page 2: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/2.jpg)
Como transformar uma
expressão regular em um
AFN?
![Page 3: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/3.jpg)
Exp. Regular para AFN
Para E
Para a
Para s | t
![Page 4: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/4.jpg)
Exp. Regular para AFN
Para st
Para s*
![Page 5: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/5.jpg)
Exemplo
R = (a|b)*abb s | t
st
s*
![Page 6: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/6.jpg)
SAÍDA DO ANALISADOR
LÉXICO
![Page 7: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/7.jpg)
Saída do Analisador Léxico
Fornece dois elementos para cada símbolo
Símbolo propriamente dito (posição na memória)
Ou apontando para ele
Um número que identifica a classe do símbolo
![Page 8: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/8.jpg)
Saída do Analisador Léxico
Tabela de Símbolos (exemplo)
SÍMBOLO ID_CLASSE
Indefinido 0
Identificador 1
Inteiro 2
Begin 3
Abs 4
End 5
( 6
) 7
+ 8
- 9
* 10
/ 11
** 12
:= 13
beginab + (x2*y)/35 /* expressão aritmética */
end
CHAMADA SAÍDA SIGNIFICADO
1ª 3, “begin” begin
2ª 1, “ab” ab
3ª 8, “+” +
4ª 6, “(“ (
5ª 1, “x2” x2
6ª 10, “*” *
7ª 1, “y” y
8ª 7, “)” )
9ª 11, “/” /
10 2, “35” 35
11ª 5, “end” end
![Page 9: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/9.jpg)
O ANALISADOR SINTÁTICO
![Page 10: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/10.jpg)
O Analisador Sintático
O analisador sintático obtém uma cadeia de
tokens proveniente do analisador léxico
![Page 11: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/11.jpg)
O Analisador Sintático
Verifica se esta cadeia pode ser gerada pela
gramática da linguagem-fonte
![Page 12: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/12.jpg)
O Analisador Sintático
Relata erros de sintaxe
Recupera-se do erro para que a compilação
continue
Função do analisador sintático
Verificar se as construções usadas no programa
estão gramaticalmente corretas
Em uma linguagem natural é semelhante a
avaliar a construção frasal que obriga ter, por
exemplo, sujeito, verbo e predicado
![Page 13: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/13.jpg)
Analisador Sintático
Já estudamos previamente os principal
artefatos de investigação utilizados pelo
Analisador Sintático
Árvores de decisão e Gramáticas
![Page 14: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/14.jpg)
Analisador Sintático
Existem duas formas de realizar a análise
sintática
Análise descendente (top-down)
Constroem as árvores de cima para baixo (raiz para folhas)
Análise ascendente (bottom-up)
Constroem as árvores de baixo para cima (folhas para raiz)
Em ambos os casos, a entrada é varrida da
esquerda para a direita, um símbolo de cada vez
![Page 15: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/15.jpg)
Analisador Sintático
Normalmente, as estruturas sintáticas válidas
são especificadas através de uma gramática
livre de contexto
Descreve as regras de formação de sentenças da
linguagem
A gramática é formada por regras de produções
Cada produção é uma regra de formação,
mostrando como um símbolo pode gerar (ou
produzir) outros
![Page 16: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/16.jpg)
Gramática Livre de Contexto
Produções na forma
A → a
Por que “Livre de Contexto”?
Não terminal A pode ser substituído por a em
qualquer contexto, sem depender de qualquer
análise dos símbolos que sucedem ou
antecedem A
Diferente das gramáticas sensíveis ao
contexto
a → b, com a ∈ (N U T)+ e b ∈ (N U T)*
![Page 17: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/17.jpg)
Gramática Livre de Contexto
Qualquer gramática G = {N, T, P, S}
N – Conjunto de símbolos não terminais
T – Conjunto de símbolos terminais
P – Conjunto de regras
S – Símbolo inicial
![Page 18: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/18.jpg)
Gramática Livre de Contexto
Exemplo
G = ({E}, {+, -, *, /, ), (, x}, P, E}
P = E → E + E | E – E | E * E | E / E | (E) | x
Sentença: x+x*x
E
E + E
x E * E
x x
![Page 19: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/19.jpg)
Gramática Livre de Contexto
Exemplo
G = ({<num>, <digit>}, {0, 1, ..., 9}, P, <num>)
P = <num> → <num><digit> | <digit>
<digit> → 0, 1, ..., 9
Sentença: 45 <num>
<num> <digit>
<digit> 5
4
![Page 20: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/20.jpg)
Derivação mais à esquerda
É a seqüência de formas sentenciais que se
obtém derivando sempre o símbolo não-
terminal mais à esquerda
Exemplo
G = ({E}, {+, -, *, /, ), (, x}, P, E}
P = E → E + E | E – E | E * E | E / E | (E) | x
Sentença: x+x*x E → E + E → x + E → x + E * E → x + x * E → x + x * x
![Page 21: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/21.jpg)
Derivação mais à direita
É a sequencia de formas sentenciais que se
obtém derivando sempre o símbolo não-
terminal mais à direita
Exemplo
G = ({E}, {+, -, *, /, ), (, x}, P, E}
P = E → E + E | E – E | E * E | E / E | (E) | x
Sentença: x+x*x E → E + E → E + E * E → E + E * x → E + x * x → x + x * x
![Page 22: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/22.jpg)
Gramática Ambígua
É a gramática que permite construir mais de uma árvore
de derivação para uma mesma sentença
Exemplo
G = ({E}, {+, -, *, /, ), (, x}, P, E}
P = E → E + E | E – E | E * E | E / E | (E) | x
E
E + E
x E * E
x x
E
E * E
E + E x
x x
![Page 23: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/23.jpg)
Gramáticas Ambíguas
Qual o problema de uma gramática
ambígua?
Reconhecedores de linguagens exigem
derivações unívocas para obter um bom
desempenho
E também para concluir a derivação sintática
![Page 24: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/24.jpg)
Gramáticas Ambíguas
Qual o problema lógico, de interpretação, nas
duas árvores de derivação a seguir?
E
E + E
x E * E
x x
E
E * E
E + E x
x x
+ é executado em primeiro lugar * é executado em primeiro lugar
![Page 25: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/25.jpg)
Gramáticas Ambíguas
Resolução de ambiguidade
Não existe um procedimento geral para retirar
ambigüidade de uma linguagem
Além disso, existem gramáticas em que é
impossível eliminar produções ambíguas
Linguagens Inerentemente Ambíguas
![Page 26: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/26.jpg)
LINGUAGENS
INERENTEMENTE AMBÍGUAS
![Page 27: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/27.jpg)
Linguagens Inerentemente
Ambíguas
São aquelas que qualquer GLC que a
descreva é ambígua
Exemplo
{ w | w = anbncmdm | anbmcmdn, n ≥ 1, m ≤ 1}
Para n =1, m = 2
w = abc2d2 ou ab2c2d
![Page 28: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/28.jpg)
RECURSIVIDADE
![Page 29: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/29.jpg)
Gramática recursiva à
esquerda
Permite a derivação
A → Aa para algum A ∈ N
Um não terminal (A) deriva ele mesmo, de forma
direta ou indireta, como símbolo mais à
esquerda
Reconhecedores top-down exigem que a
gramática não seja recursiva à esquerda
Quando a recursão é direta, a eliminação é
simples
![Page 30: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/30.jpg)
Gramática recursiva à
esquerda
Quando a recursão é indireta, a eliminação
requer que a gramática seja inicialmente
simplificada
Gramática simplificada
É uma GLC que não apresenta símbolos inúteis
![Page 31: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/31.jpg)
TRANSFORMAÇÃO DE GLCS
![Page 32: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/32.jpg)
Transformação de GLCs
O processo de transformação de uma GLC
se caracteriza por transformar uma gramática
sem que ela perca a qualidade de gerar a
mesma linguagem
Gramáticas que geram mesma linguagem
utilizando regras de produção diferentes são
chamadas de gramáticas equivalentes
![Page 33: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/33.jpg)
ELIMINAÇÃO DE RECURSIVIDADE
À ESQUERDA
![Page 34: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/34.jpg)
Eliminação de Recursividade à
Esquerda
Para recursividade direta
Pode ser eliminada manualmente
Para recursividade indireta
Primeiramente, a gramática deve ser simplificada
![Page 35: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/35.jpg)
Recursividade à Esquerda
Eliminação da recursividade direta
Substituir cada regra da forma
A → Aa1 | Aa2 | ... | Aan| b1 | b2 | ... | bm
onde nenhum bi começa por A, por
A → b1X | b2X | ... | bmX
X → a1X | a2X | ... | anX | E
Se produções vazias não são permitidas, a
substituição deve ser:
A → b1 | b2 | ... | bm | b1X | b2X | ... | bmX
X → a1 | a2 | ... | an | a1X | a2X | ... | anX
![Page 36: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/36.jpg)
Recursividade à Esquerda
(Exemplo 1)
Linguagem: b(a)*
Com recursividade
A → Aa | b
b, ba, baa, baaa, ...
1º Passo: Identificar recursão
![Page 37: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/37.jpg)
Recursividade à Esquerda
(Exemplo 1)
Linguagem: b(a)*
Com recursividade
A → Aa | b
A → bA’
b, ba, baa, baaa, ...
1º Passo: Identificar recursão
2º Passo: Para cada produção com
recursão
A → bA’
2.1: O não terminal que gera a regra de
produção deve receber agora a parte não
recursiva concatenada com um novo não
terminal
![Page 38: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/38.jpg)
Recursividade à Esquerda
(Exemplo 1)
Linguagem: b(a)*
Com recursividade
A → Aa | b
A → bA’
A’ → aA’ | E
b, ba, baa, baaa, ...
1º Passo: Identificar recursão
2º Passo: Para cada produção com
recursão
A → bA’
2.1: O não terminal que gera a regra de
produção deve receber agora a parte não
recursiva concatenada com um novo não
terminal
A’ → aA’ | E
2.2: O novo não terminal deve receber a
direita da produção recursiva
concatenada com o próprio novo não
terminal e também a regra gerando vazio
![Page 39: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/39.jpg)
Recursividade à Esquerda
(Exemplo 2)
E → E + T | T
T → T * F | F
F → (E) | id
1º Passo: Identificar recursão
![Page 40: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/40.jpg)
Recursividade à Esquerda
(Exemplo 2)
E → E + T | T
T → T * F | F
F → (E) | id
E → TE’
E’ → +TE’ | E
1º Passo: Identificar recursão
2º Passo: Para cada produção com
recursão
E → TE’
2.1: O não terminal que gera a regra de
produção deve receber agora a parte não
recursiva concatenada com um novo não
terminal
E’ → +TE’ | E
2.2: O novo não terminal deve receber a
direita da produção recursiva
concatenada com o próprio novo não
terminal e também a regra gerando vazio
![Page 41: Prof. Bruno Moreno Aula 9 06/05/2011brunomoreno.com/.../wp-content/uploads/2012/05/compiladores_Aula9.pdf · Saída do Analisador Léxico Fornece dois elementos para cada símbolo](https://reader031.vdocuments.mx/reader031/viewer/2022022711/5c0016f509d3f20e6b8c505f/html5/thumbnails/41.jpg)
Recursividade à Esquerda
(Exemplo 2)
E → E + T | T
T → T * F | F
F → (E) | id
E → TE’
E’ → +TE’ | E
T → FT’
T’ → *FT’ | E
F → (E) | id
1º Passo: Identificar recursão
2º Passo: Para cada produção com
recursão
T → FT’
2.1: O não terminal que gera a regra de
produção deve receber agora a parte não
recursiva concatenada com um novo não
terminal
T’ → *FT’ | E
2.2: O novo não terminal deve receber a
direita da produção recursiva
concatenada com o próprio novo não
terminal e também a regra gerando vazio