Analise sintática aula-07-analise-sintática.pdf.

Slides:



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

Software Básico Silvio Fernandes
Tópicos em Compiladores
Compiladores Claudio Benossi
II – Análise léxica DEI Papel do analisador léxico.
III – Análise sintáctica
I - Noções dum compilador
III – Análise sintáctica
I - Noções dum compilador
Compiladores I Cristiano Damiani Vasconcellos
Prof. Yandre Maldonado e Gomes da Costa
TEORIA DA COMPUTAÇÃO Parte II  Linguagens Livres de Contexto
Teoria da Computação FIC– Ciência da Computação
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Análise Sintática Ascendente ­
Análise Léxica (Parte 2)
Software Básico Silvio Fernandes
Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1.
Profa. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Linguagens Livres de Contexto
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
Autômatos Finitos Determinísticos
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Prof. Bruno Moreno Aula 4 – 11/03/2011
Análise léxica e sintática
Ferramentas para a Construção de Compiladores: Lex & Yacc
Compiladores, Aula Nº 5 João M. P. Cardoso
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
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
Análise Léxica e Sintática
Expressões Regulares e Gramáticas
Análise Léxica.
Capítulo II Gramáticas e Linguagens
Esquemas L-atribuídos
Análises léxica e sintática
Analise Semântica aula-10-analise-semântica.pdf.
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
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.
Linguagens Livres de Contexto
Compiladores Análise Sintática
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Uma Infraestrutura para a
Fundamentos de linguagens de programação
Geradores de analisadores léxicos
Sintaxe de uma Linguagem
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
Aula 6 1 Análise Lexical Compiladores, Aula Nº 6 João M. P. Cardoso.
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.
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.
COMPILADORES 03 Prof. Marcos.
Transcrição da apresentação:

Analise sintática aula-07-analise-sintática.pdf

Termos utilizados em linguagem de programação Símbolo: são os elementos mínimos que compõe uma linguagem. Na linguagem humana são as letras. Sentença: É um conjunto ordenado de símbolos que forma uma cadeia ou string. Na linguagem humana são as frases. Alfabeto: É um conjunto de símbolos. Na linguagem humana é o conjunto de letras {a, b, c, d, ...} Linguagem: É o conjunto de sentenças, Na linguagem humana são os conjuntos de palavras {compiladores, linguagem, ...} Gramática: É uma forma de representar as regras para formação de uma linguagem.

Analise sintática O que é sintaxe? Parte da gramática que estuda a disposição das palavras na frase e das frases no discurso, bem como a relação lógica das frases entre si. (AURELIO, 2004). É a segunda fazer do processo de compilação e sua função é verificar se as construções utilizadas no programa estão gramaticalmente corretas. As estruturas sintáticas ou gramaticais podem ser especificadas através das Gramaticas Livres de Contexto -GLC.

Analise sintática Dada uma GLC “G” e uma sentença “s” o objetivo do analisador sintático é verificar se a sentença “s” pertence a linguagem “G”. O analisador sintático também é conhecido como parser e recebe do analisador léxico a sequência de tokens que constitui a sentença “s” A analise sintática produz uma árvore de derivação se a sentença é válida ou emite um erro sintático. O analisador sintático deve ser projetado para que a análise seja feita até o fim do programa mesmo que encontre erros no texto do programa fonte.

Analise sintática Duas estratégias para implementar a analise sintática. Top-down ou descendente: constrói a árvore de derivação a partir do símbolo inicial da gramatica fazendo a árvore crescer até as suas folhas. Bottom-up ou ascendente: Faz a análise no sentido inverso, ou seja, constrói a árvore de derivação das folhas até o símbolo inicial da gramatica.

Analise sintática - processo O analisador léxico é desenvolvido para reconhecer os tokens fazendo uma leitura dos caracteres e obtendo sequencia de tokens. O analisador léxico vê o texto como uma sequência de palavras de uma linguagem regular e reconhece ele através de um autômato finito ou expressão regular. Já o analisador sintático vê o mesmo texto como uma sequência de sentenças que deve satisfazer as regras gramaticais. É através da gramatica que podemos validar expressões criadas na linguagem de programação. O analisador sintático agrupa os tokens em frases gramaticais usadas pelo compilador com o objetivo de criar uma saída que é uma estrutura de dados que possui a hierarquia da entrada a árvore de derivação.

Analise sintática - processo Exemplo de uma árvore de derivação.

Analise sintática - processo Estrutura sintática de um código fonte

Analise sintática - processo Entende-se por regras gramaticas as formas como podemos descrever a estrutura sintática do programa. No modelo de compilador que está sendo estudado o analisador sintático recebe do analisador léxico uma cadeia de tokens representado o programa fonte. O analisador sintático verifica se essas cadeias pertencem a linguagem definhada pela gramatica. Veja um exemplo no diagrama abaixo demostrando esse processo.

Analise sintática - processo

Analise sintática - processo

Analise sintática - processo Descubra os erros sintáticos da seguinte expressão 01 private static Integer maior(Integer numero01 Integer numero02) { 02 if (numero01 > numero02) { 03 return numero01 04 } else { 05 return numero02; 06   07 }

Gramatica livre de contexto A Gramatica Livre de Contexto ajuda a especificar a sintaxe de uma linguagem. A GLC é a base para a análise sintática das linguagens de programação e permitem descrever a maioria das linguagens de programação usadas atualmente. Uma gramatica descreve naturalmente como é possível fazer construções em linguagem de programação. Veja o exemplo de um comando if-else em Pascal que deve ter a seguinte forma if (expressão) then declaração else declaracao ;

Gramatica livre de contexto Essa mesma forma em uma Gramatica Livre de Contexto pode ser expressada da seguinte maneira: declaracao → if ( expressao ) then declaracao else declaracao; expressao → id > id declaracao → ... ...

Gramatica livre de contexto As linguagens regulares podem ser reconhecidas através de expressões regulares criando um analisador léxico (exemplo JFlex). Uma linguagem livre de contexto pode ser reconhecida autômatos de pilha que a descrevem a forma como podemos criar analisadores sintáticos (exemplo JCUP).

Gramatica livre de contexto A definição de uma gramatica livre de contexto pode ser representada da seguinte forma: G = (N, T, P, S) Onde: N – Conjunto finito de símbolos não terminais. T – Conjunto finito de símbolos terminais. P – Conjunto de regras de produções. S – Símbolo inicial da gramatica

Gramatica livre de contexto Terminologias: Símbolos terminais: símbolos básicos que formas as cadeias, são os tokens da linguagem de programação. Símbolos não terminais: variáveis sintáticas utilizadas para auxiliar a definição da linguagem, são compostas de símbolos terminas e pelos próprios símbolos não terminais. Regras de produções: regras sintáticas que indicam como símbolos terminais e não terminais podem ser combinados. Símbolo inicial: Inicio da validação da produção representado por um símbolo não terminal.

Gramatica livre de contexto Derivações: É a substituição das setnteças iniciando pelo símbolo inicial substituindo os símbolos não terminais pelos símbolos terminais. Tipos de derivação: Mais à esquerda: trocamos os símbolos não terminais mais à esquerda. Mais à direita: trocamos os símbolos não terminais mais a direita

Derivações: É a substituição das setnteças iniciando pelo símbolo inicial substituindo os símbolos não terminais pelos símbolos terminais. Tipos de derivação: Mais à esquerda: trocamos os símbolos não terminais mais à esquerda. Mais à direita: trocamos os símbolos não terminais mais a direita Exemplos

Linguagem de programação ab Definindo a gramatica da linguagem G = ( {LITERAL}, {a, b}, PALAVRA, LITERAL ) Definindo a regra de produção PALAVRA { LITERAL → aLITERALb | Ø } Identificando as terminologias Linguagem de programação ab Símbolos terminais a e b Símbolos não terminais: LITERAL Símbolo inicial: Regra de produção: PALAVRA Derivação a direita para saber se aabb fazer parte da linguagem LITERAL → aLITERALb LITERAL → aaLITERALbb LITERAL → aaØbb Com a gramática acima é possível dizer que palavra aab da linguagem?

Expressões matemáticas soma e multiplicação Definindo a gramatica da linguagem G = ( {EXP }, { +, *, (, ), x }, OPR, EXP) Definindo a regra de produção OPR { EXP → EXP + EXP | EXP * EXP | (EXP) | x } Expressões matemáticas soma e multiplicação Identificando as terminologias Símbolos terminais + , *, (, ), x Símbolos não terminais: EXP Símbolo inicial: Regra de produção: OPR

Expressões matemáticas soma e multiplicação Derivação a direita para saber se a expressão (x + x) * x fazer parte da linguagem EXP → EXP * EXP EXP → (EXP) * EXP EXP → (EXP + EXP) * EXP EXP → (x + EXP) * EXP EXP → (x + x) * EXP EXP → (x + x) * x Expressões matemáticas soma e multiplicação OPR { EXP → EXP + EXP | EXP * EXP | (EXP) | x } Com a gramática acima é possível dizer que x - x é uma expressão valida?

Expressões matemáticas soma e multiplicação completo Definindo a gramatica da linguagem G = ({EXP, OP}, {+, *, +, -, (, ), id, numero}, OPR, EXP) Definindo a regra de produção OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / } Expressões matemáticas soma e multiplicação completo Identificando as terminologias Símbolos terminais + , *, (, ), x, +, -, id, numero Símbolos não terminais: EXP, OP Símbolo inicial: EXP Regra de produção: OPR

Expressões matemáticas soma e multiplicação completo Derivação a direita para saber se a expressão a + b fazer parte da linguagem EXP → EXP OP EXP EXP → EXP OP id EXP → EXP + id EXP → id OP id EXP → id + id Expressões matemáticas soma e multiplicação completo OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / } Com a gramática acima é possível dizer que qualquer expressão matemática é uma expressão valida?

Expressões matemáticas soma e multiplicação completo Derivação a direita para saber se a expressão -1 fazer parte da linguagem EXP → OP EXP EXP → OP numero EXP → - numero Expressões matemáticas soma e multiplicação completo OPR { EXP → EXP OP EXP | (EXP) | -EXP | id | numero OP → + | - | * | / } Com a gramática acima é possível dizer que qualquer expressão matemática é uma expressão valida?

Dicas para criar uma gramatica livre de contexto Conhecer todos os tokens. Criar a regra de produção. Especificar a gramatica. Ex: G = ( {A, B, C}, {int, id, numero, +, -}, P, A ) Fazer a derivação.

Exercícios seção 5