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.

Slides:



Advertisements
Apresentações semelhantes
Operações sobre o Texto
Advertisements

Software Básico Silvio Fernandes
gerador de código intermediário
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
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Entrada e Saída Introdução.
Linguagem de Montagem Visão geral.
Análise Sintática Ascendente ­
Software Básico Silvio Fernandes
Prof. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Identificando Linguagens Não Regulares
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Lex e Yacc.
Análise Sintática Ascendente
Relações em uma Gramática
Linguagem de Prog. e Programas
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
*(+num) Expr Expr Op Expr Expr (Expr) Expr - Expr Expr num Op + Op - Op * Pilha Buffer com string de entrada.
Construção de Compiladores
Construção de Compiladores
Vetores, Matrizes e Funções
O Portal do Estudante de Computação
O Portal do Estudante de Computação
Lógica e Técnicas de Programação
Thiago Pinheiro de Araújo Arndt von Staa
Ferramentas para a Construção de Compiladores: Lex & Yacc
Compiladores, Aula Nº 9 João M. P. Cardoso
Gramáticas Livres de Contexto
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Análise Léxica.
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Execução de programas Cap. VIII.
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.
Planilha Eletrônica - Excel
Compiladores.
Análise Sintática Prof. Alexandre Monteiro
Equipe: Osias Carneiro, Anderson Soares, André Araújo
Análise Léxica Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
CES-41 COMPILADORES Aulas Práticas Capítulo II A Ferramenta Yacc.
Faculdade Pernambucana - FAPE Setembro/2007
COMPILADORES 04 Prof. Marcos.
Uma Infraestrutura para a
Fundamentos de linguagens de programação
Saídas do Estoque 1. Objetivo 2 As principais saídas do estoque podem ocorrer através das vendas, mas algumas saídas podem ocorrer do estoque sem que.
Acabias Marques Luiz. III – Variáveis, constantes e executáveis Parte 1 – Introdução a linguagem  Variáveis e Constantes  Atalhos na manipulação de.
Métodos Formais Juan Andrés Mussini.
JavaCC.
Linguagem Natureza e Aquisição.
Sintaxe de uma Linguagem
SISTEMAS DE INFORMAÇÃO
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.
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.
Lógica de Programação Germano Marcos. Tipos de dados Na manipulação de computadores o usuário depara-se com inúmeras funcionalidades como mensagens, equações,
JavaScript Introdução ao JavaScript 1. Objetivos Introdução Sintaxe Básica Arquivo (script) externo Script no HEAD da página Script no BODY da página.
Introdução ao estudo da Morfossintaxe
SOCKET - É um canal de comunicação entre processos que estabelece uma conexão entre eles na forma de cliente-servidor. Por meio de sockets, os computadores.
FFLCH/USP30/03/2016.  INSERÇÃO DE DADOS NO DELPo.
Transcrição da apresentação:

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 gramaticais da linguagem?

E como definir tais regras? Através de produções: Ex: Uma calculadora ET | T + E | T - E TF | F * T | F / T FNúmero | ( E )

E o que mais um analisador sintático pode fazer? Detecção de Erros de Sintaxe Recuperação de Erros

Estratégia para recuperação de erros utilizadas neste analisador: Considere a seguinte gramática: Sa ( b | Sc) | dM | e MfM* 1º) Remoção de um símbolo: O analisador sintático supõe que o usuário digitou um símbolo extra. Por exemplo, considere o seguinte texto de entrada: a a d f g e c c. Esse texto não segue as regras definidas pela gramática acima. Entretando o texto: a a d f e c c segue. Então o analisador remove o caractere ‘g’ do texto original, fazendo com que a string resultante seja reconhecido.

2º) Inserção de um símbolo: Nessa estratégia, o analisador sintático supõe que o usuário esqueceu de digitar um símbolo. Neste caso, o analisador tenta encontrar um símbolo que, quando inserido no texto a string resultante seja reconhecida. Por exemplo, a entrada é: d f b. Como podemos notar, essa entrada não pode ser gerada com as regras definidas pela gramática. Mas o texto d f a b pode. Então o analisador insere o símbolo ‘a’ no texto original. Agora o analisador supõe que o usuário trocou um símbolo por um outro. Por exemplo, o texto: a g f e c não pode ser gerado a partir da gramática. Mas o texto a d f e c pode. Então o analisador substitui o símbolo ‘g’ pelo símbolo ‘d’. 3º) Troca de um símbolo:

4º) Busca de delimitadores: Se o texto ‘a c’ for analisado, nenhuma das estratégias anteriores conseguirão ‘consertar’ a string. Mas note que sempre que reconhecemos um terminal a, teremos duas possibilidades: ou reconhecer um terminal b, ou reconhecer um não-terminal S. Nesse caso, o terminal b não foi encontrado, mas sim o terminal c. Mas a S c pode ser gerado pela gramática. O analisador então ‘supõe’ que o não- terminal S foi reconhecido antes de reconhecer o caractere ‘c’. (delimitador para S) E se nenhuma estratégia funcionar? O simbolo atual é ignorado.

Como definimos as produções? Agora, em um grafo sintático Sa ( b | Sc) | dM | e MfM* Forma original:

E quais são as opções deste plugin? 1º) Gerar a gramática a partir de um grafo sintático. 2º) Fazer a análise sintática de um código fonte. 3º) Gerar o analisador em um arquivo.java

Exemplos: A velha calculadora Primeira Abordagem:

E as rotinas semânticas? Aonde estão? As rotinas semânticas são declaradas em um arquivo especial, (SemanticRoutines.java)

Segunda Abordagem:

Utilizando o método parse, podemos ter as seguintes saidas: 1) Pilha Semântica 2) Pilha Sintática 3) Saida gerada pelas rotinas sintáticas 4) Saida gerada pelas rotinas de recuperação de erros 5) Saida gerada pelo analisador léxico

Código fonte: (-1 + (-5) (2 * (4+6)) / 4), pilha semântica:

Pilha sintática:

Saida das rotinas semânticas: Saida do analisador léxico:

E a saida das rotinas de recuperação de erros?

Documentação completa, incluindo referências bibliográficas e o futuro do plugin, localiza-se em :