III – Análise sintáctica

Slides:



Advertisements
Apresentações semelhantes
FAPE - Curso de Ciência da Computação
Advertisements

Software Básico Silvio Fernandes
5.5 – Análise Bottom-Up Tentativa de construir uma árvore sintática para a sentença analisada, começando das folhas, indo em direção à raiz (pós-ordem.
II – Análise léxica DEI Papel do analisador léxico.
II – Análise léxica DEI Conversão de expressões regulares em autómatos finitos determinísticos mínimos Bibliografia aconselhada: Aho, Sethi e Ullman –
III – Análise sintáctica
III – Análise sintáctica
II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:
III – Análise sintáctica
I - Noções dum compilador
III – Análise sintáctica Parsers ascendentes Instruções shift-reduce Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.5 LFA 1999/ Jorge.
I - Noções dum compilador
III – Análise sintáctica
IV – Análise semântica DEI Associação de regras semânticas a produções
I - Noções dum compilador Partes dum compilador Ferramentas de construção de compiladores Bibliografia aconselhada: –Aho, Sethi e Ullman – Cap. 1 LFA 1999/2000.
III – Análise sintáctica
III – Análise sintáctica
V – Geração de código Chamada de funções Organização de memória Passagem de parâmetros Representação de código intermédio Bibliografia aconselhada: –Aho,
III – Análise sintáctica Geradores de parsers Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.9 LFA 1999/ Jorge Morais.
IV – Análise semântica DEI Implementação da tabela de símbolos
I - Noções dum compilador
Linguagens Formais e Autômatos
Teoria da Computação FIC– Ciência da Computação
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Análise Sintática Ascendente ­
Profa. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Análise Sintática - Continuação
Estatística Básica Utilizando o Excel
Linguagens Livres de Contexto
esquerda p/ direita,read only
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Análise Sintática Ascendente
Relações em uma Gramática
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira
Ferramentas para a Construção de Compiladores: Lex & Yacc
Determinar o tipo de gramática
Compiladores, Aula Nº 19 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Gramáticas Livres de Contexto
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Capítulo 11 Programação Lógica
1.
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Capítulo II Gramáticas e Linguagens
Aula 14 1 Análise Sintáctica Compiladores, Aula Nº 14 João M. P. Cardoso.
Analise sintática aula-07-analise-sintática.pdf.
Esquemas L-atribuídos
Análise Sintática LR Prof. Alexandre Monteiro
Nome alunos 1 Título UC. Título – slide 2 Conteúdo Conteúdo 2.
Análises léxica e sintática
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Análise Sintática Prof. Alexandre Monteiro
Aula 18 1 Análise Sintáctica Compiladores, Aula Nº 18 João M. P. Cardoso.
Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras.
Revisão Compiladores – AP2
Análise Sintática de Descida Recursiva
Linguagens Livres de Contexto
Compiladores Análise Sintática
COMPILADORES 04 Prof. Marcos.
Sintaxe de uma Linguagem
Analisador sintático: Tipos de análises sintáticas
Reverso de uma Linguagem Regular
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.
Transcrição da apresentação:

III – Análise sintáctica DEI Parsers predictivos não recursivos FIRST e FOLLOW Bibliografia aconselhada: Aho, Sethi e Ullman – secção 4.4 Crespo – secção 4.3 Jorge Morais LFA 1999/2000 - 1

Parser descendente não recursivo DEI Jorge Morais LFA 1999/2000 - 2

Função FIRST DEI Se x é um símbolo terminal FIRST(x) = {x} Se X  , adicionar  a FIRST(X) Se X  Y1 Y2 ... Yi-1 Yi ... Yk , onde  está em FIRST(Y1), FIRST(Y2), ..., FIRST(Yi-1), adicionar o conteúdo de FIRST(Yi) a FIRST(X); se todos os FIRST(Yj ), com j=1,2, ..., k, contiverem  então adicionar  a FIRST(X) Jorge Morais LFA 1999/2000 - 3

Função FIRST DEI FIRST(X1 X2 ... Xk) contém: FIRST(X1)\{}; se  está em FIRST(X1) também contém FIRST(X2)\{}; ... se  está em FIRST(Xk-1) também contém FIRST(Xk)\{}; se  está em FIRST(Xk) também contém ; Jorge Morais LFA 1999/2000 - 4

Função FOLLOW DEI $ pertence a FOLLOW(S), onde $ é o fim de sequência e S o símbolo inicial Se A  B, então FIRST()\{} é adicionado a FOLLOW(B) Se A  B ou A  B (onde FIRST() contém ), adicionar FOLLOW(A) a FOLLOW(B) Jorge Morais LFA 1999/2000 - 5

Exemplo DEI E  T E’ E’  + T E’ | - T E’ |  T  F T’ T’  * F T’ | / F T’ |  F  ( E ) | id Jorge Morais LFA 1999/2000 - 6

Exemplo - FIRST DEI FIRST(E) = {(, id} FIRST(E’) = {+, -, } FIRST(T) = {(, id} FIRST(T’) = {*, /, } Jorge Morais LFA 1999/2000 - 7

Exemplo - FOLLOW DEI FOLLOW(E) = {), $} FOLLOW(E’) = {), $} FOLLOW(T) = {+, -, ), $} FOLLOW(T’) = {+, -, ), $} FOLLOW(F) = {*, /, +, -, ), $} Jorge Morais LFA 1999/2000 - 8

Tabela de derivação DEI Para cada produção A   Para cada terminal a em FIRST() Adicionar A   a M(A,a) Se  está em FIRST() Adicionar A   a M(A,b), para todos os b em FOLLOW(A) Se  está em FIRST() e $ em FOLLOW(A) Adicionar A   a M(A,$) Jorge Morais LFA 1999/2000 - 9

Exemplo - Tabela de derivação DEI  id + - * / ( ) $ E E  TE’ E’ E’  +TE’ E’  -TE’ E’   T T  FT’ T’ T’   T’  *FT’ T’  /FT’ F F  id F  ( E ) Jorge Morais LFA 1999/2000 - 10

Parser descendente não recursivo DEI A pilha é iniciada com o símbolo inicial S sobre o símbolo $ Sendo X o símbolo no topo da pilha e a o símbolo de entrada actual: Se X = a = $, terminar com sucesso Se X = a  $, retirar X da pilha e prosseguir com o símbolo de entrada seguinte Se X é uma variável (não terminal) consultar a tabela. Se existir uma produção colocar o lado direito na pilha (por ordem, o primeiro no topo). Senão entrada de erro. Jorge Morais LFA 1999/2000 - 11

Exemplo - Parser DEI Pilha Entrada Saída $E id+id*id$ - $E’T E TE’ $E’T’F T FT’ $E’T’id F id $E’T’ +id*id$ $E’ T’   $E’T+ E’ +TE’ Jorge Morais LFA 1999/2000 - 12

Exemplo - Parser (cont.) DEI Pilha Entrada Saída $E’T id*id$ - $E’T’F T FT’ $E’T’id F id $E’T’ *id$ $E’T’F * T’ *FT’ id$ Id$ Jorge Morais LFA 1999/2000 - 13

Exemplo - Parser (cont.) DEI Pilha Entrada Saída $E’T $ - $E’ T’   E’   A sequência é reconhecida A uso da tabela evita a recursividade Jorge Morais LFA 1999/2000 - 14

Recuperação de erros DEI Na variável A, adicionar tokens de sincronização em FOLLOW(A) Adicionar tokens de sincronização de variáveis hierarquicamente anteriores Adicionar tokens de FIRST(A) Se a produção gerar a palavra vazia, usar essa por defeito Retirar um símbolo terminal do topo da pilha Jorge Morais LFA 1999/2000 - 15

Gramáticas LL(1) DEI Gramáticas não ambíguas, sem recursividade à esquerda Uma gramática diz-se LL(1) se, e só se, para 2 produções distintas A  | : para qualquer terminal a,  e  não derivam, simultaneamente, palavras começadas por a apenas um (de  ou ) pode derivar  se  * , então  não deriva nenhuma palavra começando por um terminal em FOLLOW(A) Jorge Morais LFA 1999/2000 - 16