25
Instituto de C Compiladores An´ alise Sint´ atica Bruno Lopes Bruno Lopes Compiladores 1 / 12

Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

  • Upload
    vutuyen

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

CompiladoresAnalise Sintatica

Bruno Lopes

Bruno Lopes Compiladores 1 / 12

Page 2: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Front-end

Lida com a linguagem de entrada

Teste de pertinencia: codigo fonte ∈ linguagem fonte?

Programa esta bem formado?

Sintaticamente?Semanticamente?

Cria um codigo intermediario

Bruno Lopes Compiladores 2 / 12

Page 3: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Front-end

AnalisadorLexico

AnalisadorSintatico

Gerador de CodigoIntermediario

Tabela de Sımbolos

Codigo Fonte TokenArvore deSintaxe

Codigode tresenderecos

Bruno Lopes Compiladores 3 / 12

Page 4: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Parser

Construcao

Converter uma especificacao de linguagem em codigo.

1 Gramatica Livre de Contexto

2 Automato de Pilha

3 Transformar em codigo

Bruno Lopes Compiladores 4 / 12

Page 5: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Analise Sintatica

Determina a estrutura sintatica

Verifica se a entrada esta bem formada

Entrada

Sequencia de tokens

Arvore sintatica

Representacao intermediaria

Bruno Lopes Compiladores 5 / 12

Page 6: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Analise Sintatica

Determina a estrutura sintatica

Verifica se a entrada esta bem formada

Entrada

Sequencia de tokens

Arvore sintatica

Representacao intermediaria

Bruno Lopes Compiladores 5 / 12

Page 7: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Analise Sintatica

Determina a estrutura sintatica

Verifica se a entrada esta bem formada

Entrada

Sequencia de tokens

Arvore sintatica

Representacao intermediaria

Bruno Lopes Compiladores 5 / 12

Page 8: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Tentativa de inferencia do programa correto

Determinar a ocorrencia de um erro asap

Apos a ocorrencia, escolher um ponto para encerrar o processo

Evitar cascata de erros

Evitar lacos infinitos de erros

Bruno Lopes Compiladores 6 / 12

Page 9: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Tentativa de inferencia do programa correto

Determinar a ocorrencia de um erro asap

Apos a ocorrencia, escolher um ponto para encerrar o processo

Evitar cascata de erros

Evitar lacos infinitos de erros

Bruno Lopes Compiladores 6 / 12

Page 10: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Tentativa de inferencia do programa correto

Determinar a ocorrencia de um erro asap

Apos a ocorrencia, escolher um ponto para encerrar o processo

Evitar cascata de erros

Evitar lacos infinitos de erros

Bruno Lopes Compiladores 6 / 12

Page 11: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Tentativa de inferencia do programa correto

Determinar a ocorrencia de um erro asap

Apos a ocorrencia, escolher um ponto para encerrar o processo

Evitar cascata de erros

Evitar lacos infinitos de erros

Bruno Lopes Compiladores 6 / 12

Page 12: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Tentativa de inferencia do programa correto

Determinar a ocorrencia de um erro asap

Apos a ocorrencia, escolher um ponto para encerrar o processo

Evitar cascata de erros

Evitar lacos infinitos de erros

Bruno Lopes Compiladores 6 / 12

Page 13: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Reportar o problema e parar

nao perde tempo tentando traduzir um programa incorreto

garantia de encontrar pelo menos um erro de sintaxe

Encontrar o maximo possıvel de erros

Apos encontrar um erro, deve mover para um estado em que possacontinuar

descarta sımbolos de entrada ate encontrar uma palavra desincronizacao (e.g. ponto e vırgula)

producoes de erro

Bruno Lopes Compiladores 7 / 12

Page 14: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Reportar o problema e parar

nao perde tempo tentando traduzir um programa incorreto

garantia de encontrar pelo menos um erro de sintaxe

Encontrar o maximo possıvel de erros

Apos encontrar um erro, deve mover para um estado em que possacontinuar

descarta sımbolos de entrada ate encontrar uma palavra desincronizacao (e.g. ponto e vırgula)

producoes de erro

Bruno Lopes Compiladores 7 / 12

Page 15: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Recuperacao de erros

Reportar o problema e parar

nao perde tempo tentando traduzir um programa incorreto

garantia de encontrar pelo menos um erro de sintaxe

Encontrar o maximo possıvel de erros

Apos encontrar um erro, deve mover para um estado em que possacontinuar

descarta sımbolos de entrada ate encontrar uma palavra desincronizacao (e.g. ponto e vırgula)

producoes de erro

Bruno Lopes Compiladores 7 / 12

Page 16: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Preenchendo o resto da tabela

Celulas nao preenchidas de uma linha A: desempilha o nao terminal:se a entrada e $ ou se a entrada esta em Follow(A).

Avanca na entrada: desempilha tokens da entrada ate encontraralgum que permita o reinıcio do parser (token diferente de $ e naoesta em First(A) ∪ Follow(A).

Bruno Lopes Compiladores 8 / 12

Page 17: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

1 <stmt> ::= <if-stmt>

2 <stmt> ::= other

3 <if-stmt> ::= if (<exp>) <stmt> <else-stmt>

4 <else-stmt> ::= else <stmt>

5 <else-stmt> ::= ε

6 <exp> ::= 0

7 <exp> ::= 1

if other else 0 1 $

Bruno Lopes Compiladores 9 / 12

Page 18: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

1 <stmt> ::= <if-stmt>

2 <stmt> ::= other

3 <if-stmt> ::= if (<exp>) <stmt> <else-stmt>

4 <else-stmt> ::= else <stmt>

5 <else-stmt> ::= ε

6 <exp> ::= 0

7 <exp> ::= 1

if other else 0 1 $

<stmt> 1 2

Bruno Lopes Compiladores 9 / 12

Page 19: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

1 <stmt> ::= <if-stmt>

2 <stmt> ::= other

3 <if-stmt> ::= if (<exp>) <stmt> <else-stmt>

4 <else-stmt> ::= else <stmt>

5 <else-stmt> ::= ε

6 <exp> ::= 0

7 <exp> ::= 1

if other else 0 1 $

<stmt> 1 2<if-stmt> 3

Bruno Lopes Compiladores 9 / 12

Page 20: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

1 <stmt> ::= <if-stmt>

2 <stmt> ::= other

3 <if-stmt> ::= if (<exp>) <stmt> <else-stmt>

4 <else-stmt> ::= else <stmt>

5 <else-stmt> ::= ε

6 <exp> ::= 0

7 <exp> ::= 1

if other else 0 1 $

<stmt> 1 2<if-stmt> 3<else-stmt> 4, 5 5

Bruno Lopes Compiladores 9 / 12

Page 21: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

1 <stmt> ::= <if-stmt>

2 <stmt> ::= other

3 <if-stmt> ::= if (<exp>) <stmt> <else-stmt>

4 <else-stmt> ::= else <stmt>

5 <else-stmt> ::= ε

6 <exp> ::= 0

7 <exp> ::= 1

if other else 0 1 $

<stmt> 1 2<if-stmt> 3<else-stmt> 4, 5 5<exp> 6 7

Bruno Lopes Compiladores 9 / 12

Page 22: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

1 <stmt> ::= <if-stmt>

2 <stmt> ::= other

3 <if-stmt> ::= if (<exp>) <stmt> <else-stmt>

4 <else-stmt> ::= else <stmt>

5 <else-stmt> ::= ε

6 <exp> ::= 0

7 <exp> ::= 1

if other else 0 1 $

<stmt> 1 2<if-stmt> 3<else-stmt> 4, 5 5<exp> 6 7

if (0) if (1) other other

Bruno Lopes Compiladores 9 / 12

Page 23: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

<declaration> ::= <type> <var-list>

<type> ::= int | float

<var-list> ::= <id>, <var-list> | <id>

int x,y,z

int x, float y, z

Bruno Lopes Compiladores 10 / 12

Page 24: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Parser top-down (descendente)

Comecam da raiz da arvore sintatica e crescem em direcao as folhas

Escolhem uma producao e tentam corresponde-la com a entrada

Uma escolha ruim fara com que aconteca um retrocesso (emboraalgumas gramaticas sejam livres de backtracking)

Bruno Lopes Compiladores 11 / 12

Page 25: Compiladores - Análise Sintáticabruno/uploads/Lectures/CompAula6.pdf · Instituto de C Front-end Analisador L exico Analisador Sint atico Gerador de C odigo Intermedi ario Tabela

Instituto de

C

Parser bottom-up (ascendente)

Partem das folhas e fazem a arvore crescer em direcao a raiz

Conforme uma entrada e consumida, codifica as possibilidades em umestado interno

Reduzem uma string para o sımbolo inicial, por inversao de producoes

Manipulam uma classe maior de gramaticas

Bruno Lopes Compiladores 12 / 12