Parser LexML João Lima. Tópicos Parser  Aplicações  Tipos Ferramentas ANTLR Implementação Próximos passos.

Slides:



Advertisements
Apresentações semelhantes
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:
Advertisements

Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
YACC.
Linguagem de Prog. e Programas
O que é XML XML, eXtensible Markup Language ou Linguagem de Marcação Extensível é o método padrão de identificação e descrição de dados na Web. É largamente.
O Portal do Estudante de Computação
Análise léxica e sintática
Análise léxica e sintática
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Computação e Estatística Servidor de Documentos XML Usando.
Tópicos avançados em internet A
Análises léxica e sintática
Análise léxica e sintática
Análise Léxica Primeira fase de um compilador
Análise Léxica e Sintática
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Analise sintática aula-07-analise-sintática.pdf.
Análises léxica e sintática
Análise Léxica Prof. Alexandre Monteiro
AST no ANTLR Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza
Nº Pedro José de Oliveira Sessão Controlo Tese 2º Semestre 2007/2008 Orientador – João Rocha.
Geradores de analisadores léxicos
Compiladores – IF688 Professor: André Santos
ANTLR ANother Tool for Language Recognition Jobson Ronan (jrjs) Renato Viana (rvf)
JavaCC.
Sintaxe de uma Linguagem
Karine Alessandra Córdova
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–
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Database Systems: Design, Implementation, and Management Eighth Edition Capítulo 4 Projeto Banco de Dados.
William Ivanski Curso de Programação C#. Sumário  Exceções  Conceito de Arquivo  Arquivos de Texto  Codificações de Caracteres  Arquivos CSV  Arquivos.
Programação para Internet Aula 10 Introdução (Características do BD Relacional e Implementação)
MCEF 2012/2013. Introdução ao “Mathematica” Utilização do Mathematica Funcionamento do programa Regras da Linguagem Exemplos Exercícios!!
Apresentação do LexML João Lima
Administração de Banco de Dados José Antônio da Cunha CEFET-RN.
Aula 01 Conhecendo o Computador Prof. Filipe Mutz.
SECRETARIA DE ESTADO DA EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DIRETORIA DE DESENVOLVIMENTO HUMANO GERÊNCIA DE TECNOLOGIA DE INFORMAÇÕES EDUCACIONAIS E ADMINISTRATIVAS.
Modelagem de Dados Aula 1.
Trabalho de Literatura AC – Livro Paradidático Lira dos Vinte Anos – Álvares de Azevedo.
Redação de Texto Científico Acadêmico
INDEXAÇÃO E REPRESENTAÇÃO DE DOCUMENTOS VISUAIS E AUDIOVISUAIS Félix del Valle Gastaminza.
INE5408 Estruturas de Dados Passagem por Referência.
Guia de Referência para Fornecedores Visão Fornecedor.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais Prof.: Gustavo Wagner
Conhecendo o Tutorial support.ebsco.com. EBSCOhost é uma poderosa ferramenta de referência online que oferece uma variedade de bases de dados de texto.
EA869 Algoritmos: estruturas de dados e linguagens de programação Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas.
Princípios, Normas e Política de indexação
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais IESP - FATEC-PB Prof: Gustavo Wagner
Tecnologias e Linguagens para Banco de Dados I Prof. João Ricardo Andrêo 1/6/ :17 1 Atividades: 1 – Descreva os tipos de dados existentes no Microsoft.
Tecnologias e Linguagens para Banco de Dados I Prof. João Ricardo Andrêo 1/6/ :19 1 Respostas: 1. O que é um Sistema Gerenciador de Banco de Dados.
IFRN Técnico em Informática para Internet Desenvolvimento de Algoritmos Prof. Gilbert Azevedo.
CURSO BÁSICO DE INFORMÁTICA INSTRUTORA: JOSILENE BRAGA
INE5408 Estruturas de Dados Introdução a Árvores - Conceitos - Árvores Binárias - Métodos e algoritmos de percurso - Métodos e algoritmos de balanceamento.
SISTEMAS OPERACIONAIS MEMÓRIA VIRTUAL. INTRODUÇÃO Memória Virtual é um técnica sofisticada e poderosa de gerenciamento de memória, onde a MP e a MS são.
Estruturas Lineares de Dados Revisão Wolley W. Silva.
Introdução ao Eclipse 3.2 Prof. Gustavo Wagner (modificações) Slides originais: Prof. Tiago Massoni Java Básico  Centro de Informática, UFPE.
Normalização (4FN) Na literatura aparecem outras formas normais, como a forma normal de Boyce/Codd, a 4FN e a 5FN. Destas a única que tem importância na.
SISTEMAS DE INFORMAÇÃO GEOGRÁFICA APLICADOS Deteção remota GeoprocessamentoautomáticoWebSIG Modelos digitais de terreno de terreno Análise de imagem Análise.
Banco de Dados para Redes– Aula 03 Prof. Me. Ronnison Reges Vidal.
Support.ebsco.com DynaMed Tutorial. Bem-vindo ao tutorial de busca básica na DynaMed, onde você vai aprender sobre os principais recursos DynaMed, tais.
Indexação automática de documentos utilizando técnicas de mineração de textos Proposta para trabalho de conclusão de curso Fabio Montefuscolo Rafael Câmara.
Parser de Normas do LexML João Lima. Novidades da atual versão Formatos de Entrada TXT e RTF Alteração de Norma Conversão para XHTML Formato intermediário.
SOFTWARE Software Aplicativo – Executa Tarefas de Processamento de informações para usuários finais. Software de Sistemas – Gerencia e Apóia operações.
EA869 Montadores Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato.
Calculo de Hoare Daniel Soares, Gabriel Alabarse Hernandez(150756) e Vanius Zapalowski(150843)
1 CIn / UFPE Introdução a Parsing Gustavo Carvalho Abril 2015.
Leitura documentária Profa. Giovana Deliberali Maimone.
CT Fundamentos de Automata e Linguagens Formais
Compiladores – AnáLise léxica
Transcrição da apresentação:

Parser LexML João Lima

Tópicos Parser  Aplicações  Tipos Ferramentas ANTLR Implementação Próximos passos

Parser - Aplicações Filtros  Traduz uma entrada em uma saída sem considerar uma gramática Validadores  Verifica se uma entrada obedece a uma gramática Processadores  Valida e Processa (sem re-escrita) Ações: cálculos, atualizar banco de dados, etc. Tradutores  Valida e Traduz a entrada em outro formato

Parser - Tipos LL(k)  Top-down parser  Left-to-right  Derivação à esquerda (da entrada) Impossibilita regras com recursividade à esquerda Mais fácil para entender e depurar LR(k)  Bottom-up parser  Left-to-right  Derivação à direita (da entrada)

Ferramentas Qual ferramenta utilizar?  Perl, awk? Tradução léxica (não gramatical)  Lexer/Parser YACC/Bison, Lex, GOLD, Grammatica, Spirit ANTLR  ANother Tool for Language Recognition

Etapas básicas Lexer Parser caracteres tokens Árvore sintática Tabela de Símbolos

ANTLR v Código aberto - Licença BSD LL(*)  extensão LL(k) Predicados semânticos e sintáticos Memoized Backtracking  Otimiza a performance do lookahead Unicode Lexer Hierárquico  Regras hierarquizadas Target Languages  Java, C, C++, C#, Objective-C, Ruby, Python EBNF  Sintaxe mais concisa que BNF AST  Abstract Syntax Tree Tipos adicionais de Gramática  Tree Grammar  Lexer Grammar (filtro=true) ANTLRWorks  IDE para criação de gramáticas Syntax Diagram Error Detection

ANTLR Website:

Etapas (ANTLR) Lexer Parser caracteres tokens Tabela de Símbolos P(Tree) AST Saída (XML)

ANTLR – como codificar e executar Codifica gramática utilizando a IDE (ANTLRWorks) Gera código na linguagem destino (Java)  Normaliza.g  LexML.g  GeraXML.g  Linguistico.g Cria programa para efetuar as chamadas aos parser  PipeLexML.java Funções estáticas auxiliares  UtilLexml Executa “PipeLexML lei8112.txt”

Passos java -ms64m -mx1G org.antlr.Tool Normaliza.g java -ms64m -mx1G org.antlr.Tool LexML.g java -ms64m -mx1G org.antlr.Tool GeraXML.g java -ms64m -mx1G org.antlr.Tool Linguistico.g javac *.java java PipeLexML %1

Parser LexML (atual) Normaliza.gLexer Parser GeraXML.g Lingüístico.g LexML.g Arq.txt Arq_ Normal.txt Arq_ LexML.xml Arq_ LexML Lang.xml

Arquivo de Entrada

Após Normalização

Após Parser

Normaliza Trata espaços, tabs, quebras de linhas repetidos Trata caracteres especiais  Ordinal / Grau / “o” sobre-escrito

Normaliza.g lexer grammar Normaliza; options { filter=true; } WSinterno : (' '|'\t')(' '|'\t')+ {setText(" ");}; Normaliza : ( WS* '\r'? '\n' )+ WS* // normaliza final(is) de linha(s) {setText("\r\n");} | ('\t') // troca tab por branco {setText(" ");} | ('\u0096') // troca travessao pequeno por hifen {setText("-");} | ('0'..'9') ('o'|'°') (' '|','|';'|'.') // acerta ordinal 9o {String termo = getText(); setText(termo.substring(0, 1)+"º"+termo.substring(2));} ; Resto :.; fragment WS : (' '|'\t')+;

Programa “PipeLexML arq.txt” //FASE NORMALIZACAO //arquivo de entrada FileInputStream fstream = new FileInputStream(args[0]); // Filtro de Normalização ANTLRInputStream input = new ANTLRInputStream(fstream); NormalizaLexer lexFiltro = new NormalizaLexer(input); TokenStream tokensFiltro = new CommonTokenStream(lexFiltro); System.err.println("Fase Normalização - OK"); System.setOut(new PrintStream(new FileOutputStream(args[0]+"_Normal.txt"))); System.out.println(tokensFiltro.toString());

LexMLLexer - exemplo TITULOROT: {getCharPositionInLine()==0}? ('Título'|'TÍTULO') | ('Título'|'TÍTULO') {$type = PALAVRA;} ; CAPITULOROT: {getCharPositionInLine()==0}? ('Capítulo'|'CAPÍTULO') | ('Capítulo'|'CAPÍTULO') {$type = PALAVRA;} ; SECAOROT: {getCharPositionInLine()==0}? ('Seção'|'SEÇÃO') | ('Seção'|'SEÇÃO') {$type = PALAVRA;} ; SUBSECAOROT: {getCharPositionInLine()==0}? ('Subseção'|'SUBSEÇÃO') | ('Subseção'|'SUBSEÇÃO') {$type = PALAVRA;} ; PARTEROT: {getCharPositionInLine()==0}? ('Parte'|'PARTE') | ('Parte'|'PARTE') {$type = PALAVRA;} ; PALAVRA: ('a'..'z'|'A'..'Z'|'Ç'|'ç'|'Ã'|'ã'|'Â'|'À'|'à'|'â'|'á'|'é'|'í'|'ó'|'ô'|'ú'|'Ü' |'ü'|'Á'|'É'|'Í'|'Ó'|'Ô'|'Ú'|'ê'|'Ê'|'õ'|'Õ'|'\'')+;

LexML Parser - exemplo

LexMLLexer e Parser // Parser do Texto Normalizado e criação de Árvore em Memória LexMLLexer lexer = new LexMLLexer(new ANTLRStringStream(tokensFiltro.toString())); TokenRewriteStream tokens = new TokenRewriteStream(lexer); LexMLParser parser = new LexMLParser(tokens); LexMLParser.lexml_return r = parser.lexml(); System.err.println("Fase Parser - OK"); // arquivo de saída (básico) System.setOut(new PrintStream(new FileOutputStream(args[0]+"_LexML.xml"), true, "UTF-8")); // Passeio na árvore, externalizando o XML CommonTree t = (CommonTree)r.getTree(); CommonTreeNodeStream nodes = new CommonTreeNodeStream(t); nodes.setTokenStream(tokens); GeraXML walker = new GeraXML(nodes); // cria a árvore Walker GeraXML.lexml_return r2 = walker.lexml(); System.err.println("Fase Geração do LexXML - OK");

Linguistico.g lexer grammar Linguistico; options { filter=true; } //{System.err.println(" Achei "+getText() );} LinguaLa : // latin (' '|','|';'|'.'|'(') 'caput' (' '|','|';'|'.'|')') {setText(getText().substring(0, 1)+" "+getText().substring(1, getText().length() -1)+" "+getText().substring(getText().length()-1));} ; LinguaEn : // ingles (' '|','|';'|'.'|'(') 'leasing' (' '|','|';'|'.'|')') {setText(getText().substring(0, 1)+" "+getText().substring(1, getText().length() -1)+" "+getText().substring(getText().length()-1));} ; Resto :. ;

Parser LexML (final) Normaliza.g Lexer Parser GeraXML.g Lingüístico.g LexML.g Ok? Sim Lexer Parser LexMLFlex.g Não GeraXMLF.g Lexer Parser Links.g

Próximos passos Considerar Alteração de Norma Reconhecer entrada html Analisador de Remissões LexML Flexível Parser  Decisão Monocrática, Acórdãos Parser Semântico