Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouBenício Mata Alterado mais de 10 anos atrás
1
JavaCC e JJTree Geração de compiladores implementados em Java
fonte (texto) ações árvore sintática Parser
2
JavaCC e JJTree JJTree é um pré-processador para o JavaCC
Auxilia a definição da árvore sintática JJTree JavaCC Java Esquema de tradução
3
Estrutura do arquivo JavaCC
options { STATIC = false; //Não criar métodos estáticos OUTPUT_DIRECTORY = "c:/temp"; //Diretório de saída dos arquivos gerados } PARSER_BEGIN(ParserExemplo) ... public class ParserExemplo { . . . PARSER_END(ParserExemplo) //PRODUÇÕES BNF QUE FORMAM A GRAMÁTICA DO PARSER
4
Produções Parser reconhece: 1 + 1, 2 + 1, 15 + 14, . . .
TOKEN : /* OPERAÇÕES */ { < SOMA: "+" > } TOKEN : /* OPERADORES */ < NUMERO: ( <DIGITO> )+ > | < #DIGITO: ["0" - "9"] > void termo() : { } { <NUMERO> } void soma() : termo() <SOMA> termo() Parser reconhece: 1 + 1, 2 + 1, , . . .
5
Produções Símbolos não-terminais da gramática são escritos exatamente como métodos em Java tipo_retorno_java identificador_java "(" lista_parametros_java ")" ":" bloco_java "{" escolhas_expansão "}” Símbolos não terminais são traduzidos como chamadas de métodos
6
Produções Parser reconhece: 7, 1 + 1, 2 + 2 + 3, . . . void soma() :
{ } { termo() <SOMA> expressao() } void expressao() : { } { soma() | termo() } Parser reconhece: 7, 1 + 1, , . . .
7
Produções + Ações Parser retorna o resultado da operação. {
a = termo() <SOMA> b = expressao() {return a + b;} } int expressao() : {int result;} ( result = soma() | result = termo() ) {return result;} int termo() : { Token t; } { t = <NUMERO> return (new Integer(t.image) ).intValue(); } int soma() : {int a, b;} Parser retorna o resultado da operação.
8
Tokens TOKEN : { < NUMERO: ( <DIGITO> )+ >
| < PALAV1: “a” (“b” | “c”)* > } . TOKEN Tokens da gramática SPECIAL_TOKEN Tokens que não têm significado durante o parsing, entretanto ainda é acessível SKIP Tokens simplesmente descartados MORE Armazena em um buffer até: encontrar um TOKEN/SPECIAL_TOKEN Concatena em um só TOKEN/ SPECIAL_TOKEN encontrar um SKIP Descarta
9
JJTree void Soma() : void Termo() : {} {} {
termo() <SOMA> expressao() } void Expressao() : soma() | termo() void Termo() : {} { t = <NUMERO> }
10
JJTree void Soma() : void Termo() : {} { Token t; } {
termo() <SOMA> expressao() } Expressao Expressao() : ( soma() | termo() ) {return jjtThis;} void Termo() : { Token t; } { t = <NUMERO> jjtThis.setValor ( (new Integer(t.image) ).intValue() ); }
11
Referências http://www.di.ufpe.br/~java
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.