Carregar apresentação
A apresentação está carregando. Por favor, espere
1
JavaCC
2
JavaCC Gerador de parser 100% Java Desenvolvido inicialmente pela Sun
O mais utilizado pela comunidade Java Desenvolvido inicialmente pela Sun Hoje é mantido pela java.net É um parser top-down Mais fácil de depurar Utiliza uma sintaxe muito próxima de Java
3
JavaCC Desvantagens Mistura código Java com a gramática
Não checa a corretude do código Java inserido Pode gerar classes que não compilam
4
JavaCC Inclui um pré-processador para geração de árvores sintáticas (jjTree) Possui um repositório de gramáticas bastante extenso disponível – inclui linguagens como Java, C, C++, Perl, etc Possui uma interface gráfica fácil de usar Definições léxicas e sintáticas em um único arquivo Não aceita ambigüidades. Ex: A gramática não pode possuir recursão à esquerda.(ex: expr:= expr ‘+’ expr)
5
JavaCC Instalação Via Eclipse MarketPlace OU
Update site:
6
Gramáticas em JavaCC Opções do Parser (Não obrigatório)
Uma gramática JavaCC possui a seguinte estrutura: Opções do Parser (Não obrigatório) Definição da classe do Parser Definição dos Tokens (Componente Léxico) Terminais Definição das Produções (Componente Sintático) Ações semânticas associadas Não-Terminais
7
Opções do parser STATIC – diz se os métodos do parser serão estáticos (default: true) LOOKAHEAD – informa o nível de profundidade do lookahead (default: 1) IGNORE_CASE– instrui o parser a ser ou não case sensitive (default: false) DEBUG_PARSER – instrui o parser a registrar todas as informações durante o parsing do arquivo (default: false) Mais opções :
8
Definição do Parser Este trecho define a classe do Parser. Nesta classe, podem ser definidos métodos e variáveis auxiliares. O formato é o seguinte: PARSER_BEGIN(parser_name) ... class parser_name ...{ } PARSER_END(parser_name)
9
Definição dos tokens Serve para especificar os tipos de tokens e as expressões regulares associadas Nesta seção são descritas as palavras reservadas TOKEN: { < NUMBER: (<DIGIT>)+ ( "." (<DIGIT>)+ )? > | < DIGIT: ["0"-"9"] > | < EOL: "\n" > }
10
Definição das produções
Obedecem o seguinte formato: tipoRetorno nomeProducao(listaParametros): { código Java } subProducao1() { ação semântica correspondente } [lista de subProducoes] Declaração de variáveis, invocação de métodos, etc Código Java. Em geral, corresponde a montagem da árvore
11
Exemplo: BNF SOMA Calculadora ::= Soma | Subtracao
Soma ::= Numero “+” Numero Subtracao ::= Numero “-” Numero Numero::= [0-9]+
12
Exemplo: EBNF Programa ::= Expressao
Expressao ::= Valor | ExpUnaria | ExpBinaria Valor ::= ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao
13
Exemplo: EBNF Programa ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria Valor ::= ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao Lembre-se de que o JavaCC não permite recursão à esquerda, por isso, é necessário modificar a gramática antes de traduzí-la.
14
Exemplo: EBNF Programa ::= Expressao Expressao ::= ExpressaoPar
ExpressaoPar ::= ExpCondicionalOr ExpCondicionalOr ::= ExpCondicionalAnd ("or" ExpCondicionalAnd)* ExpCondicionalAnd ::= ExpIgualdade ("and" ExpIgualdade)* ExpIgualdade ::= ExpAritmetica ("==" ExpAritmetica)? ExpAritmetica ::= ExpConcatenacao (("+" | "-") ExpConcatenacao)* ExpConcatenacao ::= ExpUnaria ("++" ExpUnaria)* ExpUnaria ::= "-" Expressao | "not" Expressao | ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ExpPar ExpPar ::= “(“Expressao“)”
15
Exercício Altere o exemplos dados para que estes possam reconhecer as seguintes expressões: exponenciação -> expr ::= expr ^ expr Valor concreto String e a expressão “length” Acrescente o que for necessário para fazer o parser de Expressões2
16
Exemplo: EBNF Programa ::= Expressao Expressao ::= ExpressaoPar
ExpressaoPar ::= ExpCondicionalOr ExpCondicionalOr ::= ExpCondicionalAnd ("or" ExpCondicionalAnd)* ExpCondicionalAnd ::= ExpIgualdade ("and" ExpIgualdade)* ExpIgualdade ::= ExpAritmetica ("==" ExpAritmetica)? ExpAritmetica ::= ExpConcatenacao (("+" | "-") ExpConcatenacao)* ExpConcatenacao ::= ExpUnaria ("++" ExpUnaria)* ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao | ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ExpPar ExpPar ::= “(“Expressao“)”
17
Referências https://javacc.dev.java.net/
18
PLP – JavaCC Java Compiler Compiler
Joabe Jesus - Prof. Augusto Sampaio
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.