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

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

JavaCC e JJTree Geração de compiladores implementados em Java

Apresentações semelhantes


Apresentação em tema: "JavaCC e JJTree Geração de compiladores implementados em Java"— Transcrição da apresentação:

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


Carregar ppt "JavaCC e JJTree Geração de compiladores implementados em Java"

Apresentações semelhantes


Anúncios Google