![Page 1: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/1.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Construção de Compiladores
Análise Sintática
![Page 2: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/2.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Tem a função de combinar a lista de tokens Criação de uma estrutura chamada Árvore Sintática
• A analise sintática também deve rejeitar tokens inválidos Reportar erros sintáticos
atribuição
identificador
identificador
expressão
expressãoexpressão
número
:=
35SOMA SOMA
+
![Page 3: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/3.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• A análise sintática é mais complexa em natureza do que a análise léxicaPrecisamos de uma linguagem mais avançada
• Hierarquia de Chomsky
![Page 4: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/4.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Tente representar as seguintes linguagens com uma gramática regularL1 = {anbn | n 0 }
L2 = {anbman | n 0, m 1}
Relembrando as regras da gramática regularA wB
A w
A
![Page 5: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/5.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Exemplo mais concretoExpressões aritméticas
Num[[+|-|x|/]num]*
Como representar casamento de parênteses? Não é possível contar o número de parênteses “não
casados” ou abertos
Como estabelecer precedências? O string é tratado como uma expressão plana, não tendo
estrutura
Modifique de forma a suportar “(“ e “)”
![Page 6: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/6.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Linguagens Livre de Contexto “Constituem um conjunto de linguagens que podem
ser geradas por gramáticas livre de contextos (GLC), reconhecidas por autômatos de pilha”
![Page 7: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/7.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Autômato de PilhaÉ uma 7-tupla < , Q, , , q0, I, F>, onde:
, alfabeto de símbolos de entrada Q, conjunto finito de estados possíveis do autômato , alfabeto da pilha , função de transição : Q x ( {}) x Q x * q0, estado inicial tal que q0 Q
I, símbolo inicial da pilha F, conjunto de estados finais, tais que F Q
![Page 8: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/8.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Autômato de Pilha (exemplo)Seja A = < , Q, , , q0, I, F>
Σ = {a, b} Q = {0, 1, 2}Γ = {X, A} q0 = 0I=X F = {2}
A função δ:{0,1,2}×{a,b,ε}×{X,A} → P({0,1,2}×{X,A}*) é dada porδ(0, a, X) → {(0, AX)}δ(1, b, A) → {(1, ε)}δ(0, a, A) → {(0, AA)}δ(1, ε, X) → {(2, X)}δ(0, b, A) → {(1, ε)}
Desempilhou A
Não fez nada
Empilhou ADesempilhou A
Empilhou A
![Page 9: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/9.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Autômato de Pilha (exemplo)Detalhes da notação:
Símbolo ε no resultado da função indica um pop– δ(1, b, A) = {(1, ε)}
Nas operações de push, sempre é representado o antigo topo da pilha no resultado
– δ(0, a, X) = {(0, AX)}
Operações de push podem empilhar mais do que um elemento
– δ(0, a, X) = {(0, XXAX)}
XA
X
A
XA
X
Antigo topo da pilha
X XA
X
X
![Page 10: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/10.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Gramáticas livre de contexto Quádrupla G = (N, T, P, S), onde:
N, conjunto finito de símbolos não-terminais T, conjunto finito de símbolos terminais P, conjunto finito de regras gramaticais na forma S, símbolo inicial da gramática pertencente a N
Regras gramaticais (P) na forma: N (N T)*
![Page 11: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/11.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Gramáticas livre de contexto (exemplos)A linguagem L1 = {anbn | n 0 } é gerada por qual
gramática?
A linguagem L2 = {anbman | n 0, m 1} é gerada por qual gramática?
![Page 12: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/12.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• E o balanceamento de parênteses e a precedência de operadores?
Exp Exp + Exp
Exp Exp - Exp
Exp Exp * Exp
Exp Exp / Exp
Exp numero
Exp (Exp)
Gramática para expressões aritméticas simples
![Page 13: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/13.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Análise Sintática
• Outro exemplo em programação
Stat Id := Exp
Stat Stat;Stat
Stat if Exp then Stat else Stat
Stat if Exp then Stat
Gramática para statements
![Page 14: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/14.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• A maioria dos construtores das LP´s são expressos em GLCLinguagens são projetadas a partir de GLC
• É comum dividir os construtores em categorias sintáticas que englobam algum conceito particularExpressões: usada no cálculo de valoresStatements: ações que ocorrem em um fluxoDeclarações: propriedades dos nomes usados em
outras partes do programa
![Page 15: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/15.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Cada categoria sintática é denotada por um não terminal principalExpSifSwhSat ...
• Categorias sintáticas podem se referir a não terminais de outras categorias Podem também ser recursivas
![Page 16: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/16.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• DerivaçõesMétodo de reescrever as regras gramaticais através de
substituição dos seus símbolos não-terminaisAs substituições devem ser feitas até que apenas
restes símbolos terminaisA seqüência de terminais restante deve ser definida
pela linguagem
![Page 17: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/17.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Definição formal para derivaçãoA relação de derivação “” é definida via três regras
N , se existe uma regra N , se existe um tal que e
Note que , e (T N)*
![Page 18: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/18.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Definição baseada em derivação para uma linguagem gerada por uma GLCDado uma GLC G com símbolo inicial S, símbolos
terminais T e produções P, a linguagem L(G) que G gera é definida para ser o conjunto de todas as strings de símbolos terminais que podem ser obtidas por derivação a partir de S usando as produções P, ou seja, o conjunto {w T* | S w}
![Page 19: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/19.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• ExemploDado a gramática G, verifique se o string aabbbcc
pertence a L(G) T R T aTc R R RbR
Reposta?
T
![Page 20: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/20.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Diferentes derivações para a mesma questão
Qual a diferença?Derivação mais a esquerda X Derivação mais a direita
![Page 21: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/21.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Árvore SintáticaPode ser representada como uma árvore
A raiz é o símbolo inicial Resultados da produção dos símbolos não terminais são
filhos As folhas devem conter apenas símbolos terminais Lendo as folhas da esquerda para a direita temos a palavra
derivada Produções que levam ao vazio também devem ser
representadas, apesar de serem ignoradas na formação da palavra
![Page 22: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/22.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
-Árvores sintática para a palavra aabbbcc
• Dada uma gramática G, a escolha da produção a ser derivada influencia na forma da árvore sintática T R T aTc R R RbR
![Page 23: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/23.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Quando uma gramática permite diferentes árvores sintáticas ela é dita ambígua
• Quando usamos gramáticas para impor estrutura sobre um conjunto de tokens, tal estrutura tem que ser sempre a mesma
![Page 24: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/24.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Exemplo de problemaProduções
E E + E | E * E | Numero
Como gerar a sentença 3 + 4 * 5
E E + E Numero + E 3 + E 3 + E * E 3 + Numero * E 3 + 4 * E 3 + 4 * Numero 3 + 4 * 5
E E * E E + E * E Numero + E * E 3 + E * E 3 + Numero * E 3 + 4 * E 3 + 4 * Numero 3 + 4 * 5
![Page 25: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/25.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Exemplo de problema
E E + E Numero + E 3 + E 3 + E * E 3 + Numero * E 3 + 4 * E 3 + 4 * Numero 3 + 4 * 5
E E * E E + E * E Numero + E * E 3 + E * E 3 + Numero * E 3 + 4 * E 3 + 4 * Numero 3 + 4 * 5
3523
![Page 26: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/26.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Em muitos (mas não todos) os casos, uma gramática ambígua pode ser reescrita em uma gramática não-ambíguaOutra opção é o uso de semântica externa para
decidir pela árvore correta
![Page 27: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/27.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Precedência de operadoresExplicitar precedência nas gramáticas
2 + 3 * 5
Como tirar essa ambigüidade?
![Page 28: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/28.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Alguns conceitos iniciais Operador pode ser associativo a esquerda Operador pode ser associativo a direita Operador pode ser não associativo
• Convenção - e / são obrigatoriamente associativos a esquerda + e * são opcionalmente associativos a esquerda Exemplo de operador associado a direita
a=b=c {atribuição em C} a=(b=c)
Exemplo de operador não associativo 2 < 3 < 4 {comparação em Pascal} Não permitido
![Page 29: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/29.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Reescrevendo expressões gramaticais ambíguasConsidere a seguinte gramática ambígua:
Como torná-la não ambigua? Se é associativo a esquerda, devemos forçar a gramática a
ser recursiva a esquerda
E E E E num
E E E’
E E’
E’ numÚnica árvore que pode se gerada
![Page 30: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/30.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Reescrevendo expressões gramaticais ambíguasE se for associativa a direita?
Forçar a gramática a ser recursiva a direita
E se for não associativa? Sem regras recursivas
E E’ E
E E’
E’ num
E E’ E’
E E’
E’ num
![Page 31: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/31.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Reescrevendo expressões gramaticais ambíguasExpandindo a idéia...
Operadores com a mesma precedência
E E + E’
E E - E’
E E’
E’ num
![Page 32: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/32.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Reescrevendo expressões gramaticais ambíguasExpandindo a idéia...
Operadores com diferentes precedências
Exp Exp + Exp2
Exp Exp - Exp2
Exp Exp2
Exp2 Exp2 * Exp3
Exp2 Exp2 / Exp3
Exp2 Exp3
Exp3 num
Exp3 (Exp)
![Page 33: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/33.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Outras fontes de ambigüidadeExemplo clássico do “else” em comandos de decisão
A convenção é casar o “else” com o “if” mais perto que ainda não tenha sido casado
Como representar isso na gramática?
If p then if q then s1 else s2
![Page 34: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/34.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• If-the-else podem ser tratados como operadores associativos a direita
• Quando um “if” e um “else” casam, todas as ocorrências entre eles devem estar casadas
• Precisamos de dois símbolos não-terminais Matched: condicionais com o “else” Unmatched: condicionais sem o “else”
![Page 35: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise Sintática](https://reader036.vdocuments.pub/reader036/viewer/2022062404/552fc10d497959413d8c44b9/html5/thumbnails/35.jpg)
Universidade Federal da ParaíbaDepartamento de Informática
Analise Sintática
• Gramática não ambígua para comandos
Stat Stat2 ; Stat
Stat Stat2
Stat2 Matched
Stat2 Unmatched
Matched if Exp then Matched else Matched
Matched id := Exp
Unmatched if Exp then Matched else Unmatched
Unmatched if Exp then Stat2