aula 12 1 análise sintáctica compiladores, aula nº 12 joão m. p. cardoso
TRANSCRIPT
![Page 1: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/1.jpg)
Aula 121
Análise Sintáctica
Compiladores, Aula Nº 12
João M. P. Cardoso
![Page 2: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/2.jpg)
Aula 122
Vocabulário gramatical
Derivação à esquerda (Leftmost) Expandir sempre o símbolo não terminal
mais à esquerda que resta
Derivação à direita (Rightmost) Expandir sempre o símbolo não terminal
mais à direita que resta
Aplicar primeiro a produção aqui
NT1 T1 T2 T3 NT2 NT3
E só depois aos outros símbolos não-terminais
![Page 3: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/3.jpg)
Aula 123
Ponto Inicial
Assumir que a análise lexical produziu uma sequência de tokens (símbolos terminais) Cada token tem um tipo e um valor Tipos correspondem a símbolos terminais Valores correspondem ao conteúdo do token
lido Exemplo
INT(549) – token que identifica um inteiro de valor lido 549
IF – palavra chave “if” sem necessidade de valor
OP(+) – operador com valor +
![Page 4: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/4.jpg)
Aula 124
Abordagem Básica
Começar pelo símbolo Start ou pela primeira produção
Construir uma derivação leftmost Se o símbolo leftmost é não-terminal,
seleccionar uma produção e aplicá-la Se o símbolo leftmost é terminal, fazer
corresponder com a entrada Se todos os terminais foram correspondidos,
foi encontrada uma derivação que aceita a String!
Chave: encontrar as produções correctas para os símbolos não-terminais
![Page 5: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/5.jpg)
Aula 125
Gramática do Exemplo
INT = [0-9]+
Start Expr
Expr Expr “+” Term
Expr Expr “-” Term
Expr Term
Term Term “*” INT
Term Term “/” INT
Term INT
Conjunto de tokens (símbolos terminais):
{ +, -, *, /, INT }
![Page 6: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/6.jpg)
Aula 126
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Posição corrente na árvore sintáctica
Forma sentencial
Entrada que falta2-2*2
Start
![Page 7: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/7.jpg)
Aula 127
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2-2*2
Expr
Posição corrente na árvore sintáctica
Expr
Produção AplicadaStart Expr
![Page 8: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/8.jpg)
Aula 128
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada a faltar2-2*2
Expr - TermExpr
Produção AplicadaExpr Expr - Term
TermExpr -
![Page 9: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/9.jpg)
Aula 129
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2-2*2
Term - TermExpr
Produção AplicadaExpr Term
TermExpr -
Term
![Page 10: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/10.jpg)
Aula 1210
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2-2*2
INT - TermExpr
Produção AplicadaTerm INT
TermExpr -
INT
Term
![Page 11: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/11.jpg)
Aula 1211
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2-2*2
2 - TermExpr
TermExpr -
INT 2
Term
Token corresponde!
![Page 12: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/12.jpg)
Aula 1212
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta-2*2
2 - TermExpr
TermExpr -
INT 2
Term
Token corresponde!
![Page 13: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/13.jpg)
Aula 1213
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2*2
2 - TermExpr
TermExpr -
INT 2
Term
![Page 14: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/14.jpg)
Aula 1214
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2*2
2 – Term*INTExpr
TermExpr -
INT 2
Term Term INT*
Produção AplicadaTerm Term * INT
![Page 15: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/15.jpg)
Aula 1215
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2*2
2 – INT*INTExpr
TermExpr -
INT 2
Term Term INT*
Produção AplicadaTerm INT
INT
![Page 16: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/16.jpg)
Aula 1216
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2*2
2 – 2*INTExpr
TermExpr -
INT 2
Term Term INT*
INT 2
Token corresponde!
![Page 17: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/17.jpg)
Aula 1217
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta*2
2 – 2*INTExpr
TermExpr -
INT 2
Term Term INT*
INT 2
Token corresponde!
![Page 18: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/18.jpg)
Aula 1218
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2
2 – 2*INTExpr
TermExpr -
INT 2
Term Term INT*
INT 2
![Page 19: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/19.jpg)
Aula 1219
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta2
2 – 2*2Expr
TermExpr -
INT 2
Term Term INT 2*
INT 2
Token corresponde!
![Page 20: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/20.jpg)
Aula 1220
Analisador Sintáctico para a gramática exemplo
StartÁrvore Sintáctica
Forma sentencial
Entrada que falta
2 – 2*2Expr
TermExpr -
INT 2
Term Term INT 2*
INT 2
Análise sintáctica terminou
![Page 21: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/21.jpg)
Aula 1221
Sumário
Três acções (mecanismos) Aplicar produção para expandir o símbolo
não-terminal corrente na árvore sintáctica Casar o símbolo terminal corrente Aceitar a análise sintáctica como correcta
Qual a produção a utilizar por cada símbolo não-terminal?
Uma abordagem: Backtracking Tenta uma alternativa Quando for claro que a alternativa falhou
tentar outra alternativa
![Page 22: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/22.jpg)
Aula 1222
Analisador Sintáctico Preditivo
Alternativa ao backtracking Muito útil para linguagens de programação,
que podem ser desenhadas para facilitar a análise
Ideia básica Ver à frente na sequência de tokens Decisão de qual a produção a aplicar
baseada nos tokens seguintes Utilizaremos a profundidade de um token no
mecanismo de ver à frente
![Page 23: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/23.jpg)
Aula 1223
Gramática Exemplo
Start Expr
Expr Term Expr’
Expr’ “+” Term Expr’
Expr’ “-” Term Expr’
Expr’ Term INT Term’
Term’ “*” INT Term’
Term’ “/” INT Term’
Term’
INT = [0-9]+
Conjunto de tokens (símbolos terminais):
{ +, -, *, /, INT }
![Page 24: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/24.jpg)
Aula 1224
Pontos de Escolha
Assumir que Term’ é a posição corrente na árvore sintáctica
3 produções diferentes a aplicar
Term’ “*” INT Term’
Term’ “/” INT Term’
Term’ Utilizar o próximo token para decidir
Se o próximo token for *, aplicar Term’ * Int Term’ Se o próximo token for /, aplicar Term’ / Int Term’ De outro modo, aplicar Term’
![Page 25: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/25.jpg)
Aula 1225
Múltiplas Produções com o mesmo prefixo no RHS
Gramática Exemplo
Nt IF THEN
Nt IF THEN ELSE Assumir que Nt é a posição corrente
na árvore sintáctica e IF é o próximo token
Qual a produção a aplicar?
![Page 26: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/26.jpg)
Aula 1226
Solução: factorizar a gramática à esquerda
Nova gramática factoriza o prefixo comum numa única produçãoNt IF THEN Nt’Nt’ ELSENt’
Nenhuma escolha quando o próximo token é um IF
Todas as alternativas foram unificadas numa única produção
![Page 27: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc178497959413d8effa0/html5/thumbnails/27.jpg)
Aula 1227
Símbolos não-terminais
E as produções com símbolos não-terminais?
Nt Nt1 1
Nt Nt2 2
Tem de se escolher com base nos primeiros terminais possíveis que Nt1 e Nt2
podem gerar E se Nt1 ou Nt2 podem gerar ?
Tem de se escolher com base em 1 e 2