Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.

Slides:



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

Tópicos em Compiladores
Compiladores Claudio Benossi
III – Análise sintáctica
IV – Análise semântica DEI Associação de regras semânticas a produções
III – Análise sintáctica Geradores de parsers Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.9 LFA 1999/ Jorge Morais.
I - Noções dum compilador
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.
Prof. Heloise Manica Paris Teixeira
Linguagens Livres de Contexto
Linguagens Livre de Contexto
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Análise Sintática Ascendente
Relações em uma Gramática
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
Construção de Compiladores
5.6 – Complementos de Yacc – Usando Yacc com gramáticas ambíguas
Prof. Msc. Raul Paradeda Aula 3 Fundamentos
Prof. Bruno Moreno Aula 4 – 11/03/2011
Análise léxica e sintática
Lex Linguagem (e compilador) para especificar analisadores léxicos.
Compiladores, Aula Nº 5 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 – IF688
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Análises léxica e sintática
Análise Léxica Primeira fase de um compilador
Modelos de Paradigmas de programação
Expressões Regulares e Gramáticas
Análise Léxica.
Linguagem Pascal Prof. Sérgio Rodrigues.
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Análises léxica e sintática
Analise Semântica aula-10-analise-semântica.pdf.
Projeto de Linguagens de Programação
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
Métodos Formais.
Revisão Compiladores – AP2
Programação Lógica com Prolog
Linguagens Livres de Contexto
Compiladores Análise Sintática
Revisão Compiladores – AP1
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Um Tradutor Dirigido por Sintaxe Simples
Semântica de Linguagens de Programação
Engenharia/Ciência da Computação
Sintaxe de uma Linguagem
PLP – JavaCC Java Compiler Compiler
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
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.
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.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
COMPILADORES 03 Prof. Marcos.
Transcrição da apresentação:

Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

Conceitos Uma linguagem de programação pode ser definida pela descrição da aparência de seus programas (sintaxe) e do que os mesmos significam (semântica). Para especificar a sintaxe da linguagem usamos gramáticas livres de contexto (gramática). Ela também é usada para guiar a tradução de programas. – –A compilação orientada por gramática é conhecida como tradução dirigida pela sintaxe.

Conceitos Analisador Léxico Tradutor Dirigido pela Sintaxe Fluxo de Caracteres de entrada Fluxo de Tokens Representação Intermediária Estrutura da Vanguarda de nosso Compilador

Conceitos Definição da Sintaxe Uma gramática descreve naturalmente a estrutura hierárquica de muitas construções das linguagens de programação. Exemplo de if- else em C: comando em C: if (expressão) comando else comando Regra de produção: cmd -> if (expr) cmd else cmd ( -> significa poder ter a forma ou produz)

Conceitos Definição da Sintaxe If-else ( ) – são tokens Expr e cmd – Representam sequências de tokens e são chamados não terminais. Uma gramática livre de contexto possui quatro componentes: – –Um conjunto de tokens, conhecidos como símbolos terminais. – –Um conjunto de não-terminais. – –Um conjunto de produções – –Uma designação a um dos não-terminais como o símbolo de partida.

Conceitos Definição da Sintaxe Produções consistem em um não-terminal, chamado de lado esquerdo da produção, uma seta e uma sequência de tokens e/ou não terminais, chamados de lado direito da produção. As gramáticas são especificadas pela listagem de suas produções onde a primeira contém o símbolo de partida. Assumimos que dígitos, sinas ( =, +, -, etc), palavras reservadas sejam terminais.

Conceitos Definição da Sintaxe As produções com o mesmo não terminal a esquerda podem ser agrupadas. Exemplo: digito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Exemplo 1: Gramática para descrever uma lista de dígitos separados por sinais de mais ou de menos.

Conceitos Definição da Sintaxe Produções: lista -> lista + dígito | lista – dígito | dígito digito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Tokens: Terminais: Não Terminais: lista e dígito Uma cadeia de tokens é uma sequência de 0 ou mais tokens.

Conceitos Definição da Sintaxe Uma gramática deriva cadeias começando pelo símbolo de partida. As cadeias de tokens geradas formam a linguagem definida pela gramática. Exemplo de cadeia: 9 – Pela gramática anterior temos: a) 9 é uma lista. b) 9 – 5 é uma lista. c) 9 – é uma lista.

Conceitos Exemplo 2: Sequencia de comandos, separados por ponto e vírgula, encontrada nos blocos bengin-end de Pascal. Blocl -> begin cmds_opcs end cmds_opcs -> lista_cmds | E lista_cmds -> lista_cmds; cmd | cmd

Conceitos Árvores Gramaticais Uma árvore gramatical mostra como o símbolo de partida de uma gramática deriva uma cadeia de uma linguagem. Se um não terminal A possui uma produção A -> XYZ, então uma árvore pode ter um nó A com três filhos. A / | \ X Y Z

Conceitos Árvores Gramaticais Formalmente, dada uma gramática livre de contexto, uma árvore gramatical possui as seguintes propriedades: – –A raiz é rotulada pelo símbolo de partida. – –Cada folha é rotulada por um token ou por E. – –Cada nó interior é rotulado por um não-terminal. – –Se A é um não-terminal rotulando algum nó interior e X1, x2,..., Xn são os rótulos dos seus filhos, então A - >X1X2,..,Xn é uma produção.

Conceitos Árvores Gramaticais lista lista dígito dígito Árvore gramatical para 9 – 5 + 2

Conceitos Árvores Gramaticais Na árvore anterior temos: lista – Raiz é rotulada lista (símbolo de partida). lista + dígito – Filhos da raíz. lista -> lista + dígito é uma produção na gramática. As folhas da árvore gramatical, lidas da esquerda para a direita formam o produto da árvore, que é a cadeia gerada ou derivada a partir do não-terminal à raiz da árvore gramatical.

Conceitos Árvores Gramaticais Outra definição da linguagem gerada por uma gramática é a de um conjunto de cadeias que podem ser representadas por alguma árvore gramatical. O processo de encontrar uma árvore gramatical para uma dada cadeia de tokens é chamado de análise gramatical ou análise sintática daquela cadeia.

Conceitos Ambigüidade É importante observar que uma gramática pode ter mais de uma árvore gramatical gerando uma dada cadeia de tokens. Tal gramática é dita ambígua. Exemplo: basta encontrar uma cadeia de tokens que tenha mais de uma árvore gramatical.

Conceitos Ambigüidade Gramática ambígua: Cadeia -> cadeia + cadeia | cadeia – cadeia | cadeia Cadeia -> 0 | 1 |... | 9 Ver exemplos: Precisamos resolver a ambigüidade das gramáticas!

Conceitos Ambigüidade cadeia cadeia cadeia + cadeia cadeia - cadeia cadeia - cadeia cadeia + cadeia Duas Árvores Gramaticais para 9-5+2

Conceitos Associatividade dos Operadores   Convencionalmente, é equivalente a (9+5)+2 e a (9-5)-2.   Na maioria das linguagens os operadores +, -, * e / são associados à esquerda.   Exponenciação tem associação à direita. Em C o operador de atribuição tem associação à direita também direita -> letra = direita | letra letra -> a | b |... | z

Conceitos Associatividade dos Operadores   Exemplo: a=b=c e 9 – 5 – 2 direita lista letra = direita lista - digito a letra = direita lista - digito letra digito b c9 5 2 Árvore gramatical para operadores associativos à esquerda e à direita

Precedência de Operadores Para a expressão 9+5*2 existem duas possíveis interpretações para a mesma (9+5)*2 ou 9+(5*2) * e / tem precedência mais alta que + e – Sintaxe das expressões Expr -> expr + termo | expr – termo | termo Termo -> termo * fator | termo/fator | fator Fator -> digito | (expr)

Precedência de Operadores Sintaxe dos comandos cmd -> id := expr | if expr then cmd | if expr then cmd else cmd | while expr do cmd | begin cmds_opcs end