aula 12 1 análise sintáctica compiladores, aula nº 12 joão m. p. cardoso

27
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso

Upload: internet

Post on 22-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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