Análise léxica e sintática

Slides:



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

Tópicos em Compiladores
Compiladores Claudio Benossi
III – Análise sintáctica
Compiladores I Cristiano Damiani Vasconcellos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes
Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
JavaCC e JJTree Geração de compiladores implementados em Java
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Análise Sintática Ascendente
Relações em uma Gramática
Linguagem de Prog. e Programas
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Prof. Bruno Moreno Aula 4 – 11/03/2011
Lex Linguagem (e compilador) para especificar analisadores léxicos.
Aula prática – geração de código (.NET)
Análise léxica e sintática
Aula prática - análise contextual
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
Gramáticas Livres de Contexto
Compiladores, Aula Nº 10 João M. P. Cardoso
Teoria e Implementação de Linguagens Computacionais
Teoria e Implementação de Linguagens Computacionais – IF688
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Análises léxica e sintática
SableCC José Francisco Pereira Equipe de Monitores
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Análise léxica e sintática
Análise Léxica Primeira fase de um compilador
Análise Léxica e Sintática
Expressões Regulares e Gramáticas
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.
Análises léxica e sintática
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Compiladores.
Análise Sintática Prof. Alexandre Monteiro
Equipe: Osias Carneiro, Anderson Soares, André Araújo
Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.
Tradução Dirigida por Sintaxe
Revisão Compiladores – AP2
AST no ANTLR Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza
Linguagens Livres de Contexto
Compiladores Análise Sintática
Revisão Compiladores – AP1
Faculdade Pernambucana - FAPE Setembro/2007
Aula de SableCC Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – Artur Ribeiro de Aquino – ara Allan Jefferson – ajss.
COMPILADORES 04 Prof. Marcos.
Um Tradutor Dirigido por Sintaxe Simples
Semântica de Linguagens de Programação
JavaCC.
Sintaxe de uma Linguagem
PLP – JavaCC Java Compiler Compiler
Teoria e Implementação de Linguagens Computacionais Revisão 1º EE André Ricardo Schäffer Lopes – Rodrigo Diego Melo Amorim–
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.
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.
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
Transcrição da apresentação:

Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza {ajss}@cin.ufpe.br

Roteiro Processo de compilação Análise léxica Análise sintática Reconhecimento de tokens Análise sintática Gramáticas Representações de um programa

Processo de compilação Compilador begin if x = 5 then ... Código Fonte 1100111 0011100011 Programa input output

Árvore sintática abstrata Fases da compilação Código fonte Análise Léxica tokens e lexemas implementação abstração Árvore sintática abstrata Análise Sintática Análise Semântica AST decorada Código Máquina Geração de Código

Análise Léxica

Análise Léxica Responsável por traduzir o arquivo fonte em lexemas e tokens. if (n == 0) { return 1; } else { ... } if LPAR "n" id equals "0" intLit RPAR LCUR return "1" intLit comm RCUR else ...

Reconhecendo tokens Expressões regulares if IF [a-z][a-z0-9]* ID [0-9]+ NUM 1 2 a-z 0-9 ID 2 1 3 i f IF

Análise sintática

Análise Sintática “the way in wich words are put together to form phrases, clauses or sentences.” Webster´s Dictionary A seguinte construção é válida? int y = 0,k = 0; int x = y+++k; Responsável por verificar quando uma sentença faz parte da gramática da linguagem.

Gramáticas

Descrevendo linguagens Gramáticas livres de contexto são utilizadas para descrever linguagens de programação Símbolo inicial Produções Símbolos terminais Símbolos não-terminais

Exemplo E → E + E | T T → T * T | F F → ( E ) | a Simbolo inicial: E → é utilizado na notação de produção Terminais: + * ( ) a Não terminais: E T F A cadeia a + (a + a * a) pertence à gramática?

Derivações Determinar se uma cadeia pertence à gramática E E + E T + E F + E a + E a + T a + F a + ( E ) a + ( E + E ) a + ( T + E ) a + ( F + E ) a + ( a + E ) a + ( a + T ) a + ( a + T * T ) a + ( a + F * T ) a + ( a + a * T ) a + ( a + a * F ) a + ( a + a * a )

Parse tree E A Parse Tree é construída conectando cada derivação a sua origem. Na prática não é implementada pelos compiladores. E E T T F E F E E T T T F F a + ( a + a * a )

Gramáticas ambíguas a + a + a E E E E E E T T E E E E T T T T F F F F

Refatoração E → E + E | F F → ( E ) | a E → E + A | F A → E F → ( E ) | a E a + A F

Gramáticas LL(1) a cadeia de entrada é examinada da esquerda para a direita o analisador procura construir uma derivação esquerda exatamente 1 símbolo do resto da entrada é examinado LL(1) Left-to-right Leftmost-derivation 1-symbol lookahead

Recursão à esquerda Gramáticas LL(1) são vulneráveis às entradas duplicadas. Por exemplo, o fragmento a seguir: E → E + T E → T O fato de E aparecer no início do lado direito da produção é a causa do problema. Isso é conhecido como Recursão à Esquerda. Para corrigir isso, vamos refatorar a gramática, com Recursão à Direita: E → T E´ E´ → +T E´ E´ →

Fatoração E → F + F | F F → ( E ) | a E → F + F E → F E → F A A → + F | F F → ( E ) | a não é possível decidir, olhando apenas o primeiro símbolo

Representações

Representação do programa Apenas reconhecer se uma sentença pertence ou não a linguagem especificada por uma gramática não é o suficiente É necessário produzir uma estrutura que sirva de base para a próxima fase do processo de compilação

Abstract Syntax Tree (AST) IfThenElse ::= 'if' expr 'then' comm1 'else' comm2 return new IfThenElse(expr, comm1, comm2);

Abstract Syntax Tree (AST)

Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza {ajss}@cin.ufpe.br