A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

JavaCC.

Apresentações semelhantes


Apresentação em tema: "JavaCC."— Transcrição da apresentação:

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


Carregar ppt "JavaCC."

Apresentações semelhantes


Anúncios Google