III – Análise sintáctica

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

Tópicos em Compiladores
Compiladores Claudio Benossi
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
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
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
VI – Optimização de código Blocos básicos Optimização de ciclos Bibliografia aconselhada: –Apontamentos LFA 1999/ Jorge Morais.
Linguagens Formais e Autómatos
Compiladores I Cristiano Damiani Vasconcellos
Estruturas de Dados Árvores Binárias
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes
Análise Sintática - Continuação
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Análise Sintática Ascendente
Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Verificação de Tipos.
Construção de Compiladores
André Luis Meneses Silva
Fundamentos sobre Árvores
Prof. Bruno Moreno Aula 4 – 11/03/2011
Análise Semântica e Representação Intermédia
Análise léxica e sintática
Ferramentas para a Construção de Compiladores: Lex & Yacc
Compiladores, Aula Nº 11 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Heap Sort TPA – Prof. Mateus Costa
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Compiladores, Aula Nº 10 João M. P. Cardoso
Análises léxica e sintática
1.
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Esquemas de Tradução Prof. Alexandre Monteiro
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.
Análise Sintática LR Prof. Alexandre Monteiro
Análises léxica e sintática
Projeto de Tradutor Preditivo. Introdução Introdução Esquemas L-atribuidos são reconhecidos por analisadores Top-Down. Entre estes analisadores, se encontra.
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Compiladores.
Análise Sintática Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
CES-41 COMPILADORES Aulas Práticas Capítulo II A Ferramenta Yacc.
Revisão Compiladores – AP2
Análise Sintática de Descida Recursiva
Compiladores Análise Sintática
COMPILADORES 04 Prof. Marcos.
Um Tradutor Dirigido por Sintaxe Simples
Sintaxe de uma Linguagem
PLP – JavaCC Java Compiler Compiler
Analisador sintático: Tipos de análises sintáticas
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Transcrição da apresentação:

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

Parser descendente recursivo DEI Um parser descendente recursivo pode ser construído da seguinte forma: Cada variável (símbolo não terminal) do lado esquerdo duma produção corresponderá à definição duma função. Cada token (símbolo terminal) no lado direito corresponde à sua verificação e pedido de novo token ao analisador léxico Cada variável do lado direito corresponde à chamada da função correspondente Jorge Morais LFA 1999/2000 - 2

Parser predictivo DEI Um parser descendente diz-se predictivo se para cada par (variável, token) só existe uma única alternativa a considerar A eliminação da recursividade à esquerda e a factorização à esquerda permitem a definição duma gramática que permite a construção de parsers predictivos Estas gramáticas são do tipo LL(1) Jorge Morais LFA 1999/2000 - 3

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 - 4

Exemplo – função e( ) DEI /* E  T E’ */ e( ) { t( ); e2( ); } Jorge Morais LFA 1999/2000 - 5

Exemplo – função e2( ) DEI /* E’  + T E’ | - T E’ |  */ e2( ) { if(token = = MAIS || token = = MENOS){ token = next_token( ); t( ); e2( ); } Jorge Morais LFA 1999/2000 - 6

Exemplo – função t( ) DEI /* T  F T’ */ t( ) { f( ); t2( ); } Jorge Morais LFA 1999/2000 - 7

Exemplo – função t2( ) DEI /* T’  * F T’ | / F T’ |  */ t2( ) { if(token = = VEZES || token = = DIV){ token = next_token( ); f( ); t2( ); } Jorge Morais LFA 1999/2000 - 8

Exemplo – função f( ) DEI /* F  ( E ) | id */ f( ) { if(token= =PAR_ESQ){ token = next_token( ); e( ); if(token= =PAR_DIR) token=next_token( ); else erro(F_PAR_DIR);} else if(token = = ID) else erro(PROD_F); } Jorge Morais LFA 1999/2000 - 9

Exemplo – outras funções DEI next_token() – retorna próximo token erro(int n) { switch(n){ .............. case F_PAR_DIR: puts(“Falta parentesis direito”); break; ............... } Jorge Morais LFA 1999/2000 - 10

Exemplo 2 DEI Definição da chamada duma função ChamaFunc  ID ( ListaExpr ) ListaExpr  ListaExpr , Expr | Expr Eliminando a recursividade à esquerda ListaExpr  Expr ListaExpr’ ListaExpr’  , Expr ListaExpr’ |  Jorge Morais LFA 1999/2000 - 11

Exemplo – função chamafunc( ) DEI /* ChamaFunc  ID ( ListaExpr )*/ chamafunc ( ) { if(token != ID) erro(ERR_ID); else token = next_token( ); if(token != PAR_ESQ) erro(F_PAR_ESQ); else token=next_token( ); listaexpr(); if(token != PAR_DIR) erro(F_PAR_DIR); } Jorge Morais LFA 1999/2000 - 12

Exemplo – função listaexpr( ) DEI /* ListaExpr  Expr ListaExpr’ */ listaexpr( ) { expr(); listaexpr2(); } Jorge Morais LFA 1999/2000 - 13

Exemplo – função listaexpr2( ) DEI /* ListaExpr’  , Expr ListaExpr’ |  */ listaexpr2() { if(token = = VIRG){ token = next_token(); expr( ); listaexpr2( ); } Jorge Morais LFA 1999/2000 - 14