diff --git a/.classpath b/.classpath old mode 100644 new mode 100755 index 6e5baae..3e9bcf9 --- a/.classpath +++ b/.classpath @@ -1,7 +1,8 @@ - - - - - - - + + + + + + + + diff --git a/.project b/.project old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/bin/br/ufpb/iged/interpretador/Decodificador.class b/bin/br/ufpb/iged/interpretador/Decodificador.class deleted file mode 100644 index 2650bc7..0000000 Binary files a/bin/br/ufpb/iged/interpretador/Decodificador.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/GeraTabela.class b/bin/br/ufpb/iged/interpretador/GeraTabela.class deleted file mode 100644 index 67684d0..0000000 Binary files a/bin/br/ufpb/iged/interpretador/GeraTabela.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/Instrucao.class b/bin/br/ufpb/iged/interpretador/Instrucao.class deleted file mode 100644 index 1139230..0000000 Binary files a/bin/br/ufpb/iged/interpretador/Instrucao.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/OpCode.class b/bin/br/ufpb/iged/interpretador/OpCode.class deleted file mode 100644 index 7672922..0000000 Binary files a/bin/br/ufpb/iged/interpretador/OpCode.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/OpInfo.class b/bin/br/ufpb/iged/interpretador/OpInfo.class deleted file mode 100644 index 0095a12..0000000 Binary files a/bin/br/ufpb/iged/interpretador/OpInfo.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/OpTipo.class b/bin/br/ufpb/iged/interpretador/OpTipo.class deleted file mode 100644 index 86897ca..0000000 Binary files a/bin/br/ufpb/iged/interpretador/OpTipo.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.class b/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.class index e9cf531..55e2ddb 100644 Binary files a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.class and b/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.class differ diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao$Instrucao.class b/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao$Instrucao.class index 4e6a316..4bf6825 100644 Binary files a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao$Instrucao.class and b/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao$Instrucao.class differ diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.class b/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.class index 74d5efa..3a71653 100644 Binary files a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.class and b/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.class differ diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/LabelSymbol.class b/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/LabelSymbol.class deleted file mode 100644 index 80fb33f..0000000 Binary files a/bin/br/ufpb/iged/interpretador/bytecodeassembler/asm/LabelSymbol.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/grammars/Assembler.g b/bin/br/ufpb/iged/interpretador/bytecodeassembler/grammars/Assembler.g deleted file mode 100644 index 1d69b2a..0000000 --- a/bin/br/ufpb/iged/interpretador/bytecodeassembler/grammars/Assembler.g +++ /dev/null @@ -1,86 +0,0 @@ -grammar Assembler; - -@members { - - protected void escreverOpcode(Token opc); - protected void escreverOpcode(Token opc, Token op) throws LabelException; - protected void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException; - protected void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException; - protected void definirLabel(Token id) throws LabelException; - -} - -programa : comando* - ; - -comando : (label instrucao | instrucao); - -label : a = ID ':' {definirLabel($a);}; - -instrucao: (aritmetica | load | store | desvio | logica | 'nop' - | a = 'pop' {escreverOpcode($a);} - | a = 'pop2'{escreverOpcode($a);} - )? NOVA_LINHA; - -aritmetica : a = 'iadd' {escreverOpcode($a);} - | a = 'isub' {escreverOpcode($a);} - | a = 'imul' {escreverOpcode($a);} - | a = 'idiv' {escreverOpcode($a);} - | a = 'irem' {escreverOpcode($a);} - | a = 'iinc' {escreverOpcode($a);} - | a = 'ineg' {escreverOpcode($a);} - ; - -load : a = 'iconst_m1'{escreverOpcode($a);} - | a = 'iconst_0' {escreverOpcode($a);} - | a = 'iconst_1' {escreverOpcode($a);} - | a = 'iconst_2' {escreverOpcode($a);} - | a = 'iconst_3'{escreverOpcode($a);} - | a = 'iconst_4'{escreverOpcode($a);} - | a = 'iconst_5'{escreverOpcode($a);} - | a = 'iload_0' {escreverOpcode($a);} - | a = 'iload_1' {escreverOpcode($a);} - | a = 'iload_2' {escreverOpcode($a);} - | a = 'iload_3' {escreverOpcode($a);} - | a = 'iload' INT {escreverOpcode($a, $INT);} - | a = 'ldc' INT {escreverOpcode($a, $INT);} - ; - -store : a = 'istore_0' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore_1' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore_2' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore_3' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore' INT {verificarAumentoMemoriaGlobal($a, $INT);} - ; - -logica : a = 'iand' {escreverOpcode($a);} - | a = 'ior' {escreverOpcode($a);} - | a = 'ixor' {escreverOpcode($a);} - ; - -desvio : a = 'ifeq' b = ID {escreverOpcode($a, $b);} - | a = 'ifne' b = ID {escreverOpcode($a, $b);} - | a = 'iflt' b = ID {escreverOpcode($a, $b);} - | a = 'ifge' b = ID {escreverOpcode($a, $b);} - | a = 'ifgt' b = ID {escreverOpcode($a, $b);} - | a = 'ifle' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpeq' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpne' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmplt' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpge' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpgt' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmple' b = ID {escreverOpcode($a, $b);} - | a = 'goto' b = ID {escreverOpcode($a, $b);} - ; - -NULL: ('null' | 'NULL'); - -INT : '-'? '0'..'9'+ ; - -ID: ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '.')* ; - -//LETRA: ('a'..'z' | 'A'..'Z'); - -NOVA_LINHA : ';'; - -WS : (' ' | '\t' | '\r' | '\n') {skip();} ; \ No newline at end of file diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/Assembler.tokens b/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/Assembler.tokens deleted file mode 100644 index 0e0aa1f..0000000 --- a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/Assembler.tokens +++ /dev/null @@ -1,95 +0,0 @@ -T__9=9 -T__10=10 -T__11=11 -T__12=12 -T__13=13 -T__14=14 -T__15=15 -T__16=16 -T__17=17 -T__18=18 -T__19=19 -T__20=20 -T__21=21 -T__22=22 -T__23=23 -T__24=24 -T__25=25 -T__26=26 -T__27=27 -T__28=28 -T__29=29 -T__30=30 -T__31=31 -T__32=32 -T__33=33 -T__34=34 -T__35=35 -T__36=36 -T__37=37 -T__38=38 -T__39=39 -T__40=40 -T__41=41 -T__42=42 -T__43=43 -T__44=44 -T__45=45 -T__46=46 -T__47=47 -T__48=48 -T__49=49 -T__50=50 -T__51=51 -T__52=52 -T__53=53 -ID=4 -INT=5 -NOVA_LINHA=6 -NULL=7 -WS=8 -':'=9 -'goto'=10 -'iadd'=11 -'iand'=12 -'iconst_0'=13 -'iconst_1'=14 -'iconst_2'=15 -'iconst_3'=16 -'iconst_4'=17 -'iconst_5'=18 -'iconst_m1'=19 -'idiv'=20 -'if_icmpeq'=21 -'if_icmpge'=22 -'if_icmpgt'=23 -'if_icmple'=24 -'if_icmplt'=25 -'if_icmpne'=26 -'ifeq'=27 -'ifge'=28 -'ifgt'=29 -'ifle'=30 -'iflt'=31 -'ifne'=32 -'iinc'=33 -'iload'=34 -'iload_0'=35 -'iload_1'=36 -'iload_2'=37 -'iload_3'=38 -'imul'=39 -'ineg'=40 -'ior'=41 -'irem'=42 -'istore'=43 -'istore_0'=44 -'istore_1'=45 -'istore_2'=46 -'istore_3'=47 -'isub'=48 -'ixor'=49 -'ldc'=50 -'nop'=51 -'pop'=52 -'pop2'=53 diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer$DFA5.class b/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer$DFA5.class deleted file mode 100644 index e2e0268..0000000 Binary files a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer$DFA5.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer.class b/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer.class deleted file mode 100644 index c4ee283..0000000 Binary files a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerParser.class b/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerParser.class deleted file mode 100644 index f1f8ef0..0000000 Binary files a/bin/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerParser.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.class b/bin/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.class index d995c39..eae665f 100644 Binary files a/bin/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.class and b/bin/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.class differ diff --git a/bin/br/ufpb/iged/interpretador/excecoes/ClassNotFoundException.class b/bin/br/ufpb/iged/interpretador/excecoes/ClassNotFoundException.class new file mode 100644 index 0000000..73ee31d Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/excecoes/ClassNotFoundException.class differ diff --git a/bin/br/ufpb/iged/interpretador/excecoes/LabelException.class b/bin/br/ufpb/iged/interpretador/excecoes/LabelException.class index 85eff41..201b79c 100644 Binary files a/bin/br/ufpb/iged/interpretador/excecoes/LabelException.class and b/bin/br/ufpb/iged/interpretador/excecoes/LabelException.class differ diff --git a/bin/br/ufpb/iged/interpretador/gramaticas/Assembler.g b/bin/br/ufpb/iged/interpretador/gramaticas/Assembler.g new file mode 100644 index 0000000..cca44ae --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/gramaticas/Assembler.g @@ -0,0 +1,232 @@ +grammar Assembler; + +options { + output = AST; + ASTLabelType = BytecodesAST; +} + +tokens { + MEMBRO_CLASSE; + FIELD_DECL; + EXTENDS; + RETURN; + NEW; + ARITMETICA; + LOAD; + STORE; + LOGICA; + DESVIO; + LABEL; + PILHA; + BODY; + METHOD_DECL; + CONSTR_DECL; + PARAMS; + LIMIT; + METHOD_CALL; + ARGS; +} + +@header{ + package br.ufpb.iged.interpretador.parser; + + import br.ufpb.iged.interpretador.excecoes.AcessoIndevidoMemoriaException; + import br.ufpb.iged.interpretador.excecoes.LabelException; + import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; +} + +@lexer::header{ + package br.ufpb.iged.interpretador.parser; +} + +@members { + + public abstract void escreverOpcode(String nomeInstrucao); + public abstract void escreverOpcode(Token opc, Token op) throws LabelException; + public abstract void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException; + public abstract void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException; + +} + +programa : instrucao* + ; + +instrucao : operacao + | definicaoClasse ('.end class')? + ; + +operacao : (label comando | comando); + +label : a = ID ':' -> ^(LABEL $a); + +comando: ( manipulacaoObjetos + | aritmetica + | load + | loadint + | store + | storeint + | desvio + | logica + | pilha + | retorno + | 'nop' + )? NEWLINE; + +definicaoClasse + : '.class' ID NEWLINE (superClasse NEWLINE)? (membroClasse NEWLINE) + + -> ^('.class' ID superClasse? ^(MEMBRO_CLASSE membroClasse+)) + ; + +superClasse : '.super' (b = ID | b = REF)-> ^(EXTENDS $b) ; + +membroClasse + : '.field' st = 'static'? ID tipo -> ^(FIELD_DECL $st? ID tipo) + | '.method' INIT (parametros | '(' parametros ')') ret = tipo NEWLINE (limite NEWLINE)? operacao* '.end method' + -> ^(CONSTR_DECL INIT $ret parametros limite? ^(BODY operacao*)) + | '.method' 'static'? ID (parametros | '(' parametros ')') ret = tipo NEWLINE (limite NEWLINE)? operacao* '.end method' + -> ^(METHOD_DECL ID $ret parametros limite? ^(BODY operacao*)) + ; + +limite : '.limit locals' INTEIRO -> ^(LIMIT INTEIRO); + +parametros + : '()' -> ^(PARAMS VOID) + | ( a = INT | a = TIPO_REF) + -> ^(PARAMS $a) + ; + +retorno : + ( a = 'areturn' + | a = 'ireturn' + | a = 'return' + ) + -> ^(RETURN $a) + ; + +manipulacaoObjetos : a = 'getfield' REF tipo -> ^('getfield' REF tipo) + | a = 'getstatic' REF tipo -> ^('getstatic' REF tipo) + | a = 'putfield' REF tipo -> ^('putfield' REF tipo) + | a = 'putstatic' REF tipo -> ^('putstatic' REF tipo) + | a = 'invokespecial' REF d = parametrosRetorno + -> ^('invokespecial' REF $d) + | a = 'invokestatic' REF d = parametrosRetorno + -> ^('invokestatic' REF $d) + | a = 'invokevirtual' REF d = parametrosRetorno + -> ^('invokevirtual' REF $d) + | a = 'new' (b = ID | b = REF) -> ^(NEW $b) + ; + + +tipo : INT | VOID | TIPO_REF; + +aritmetica : ( a = 'iadd' + | a = 'isub' + | a = 'imul' + | a = 'idiv' + | a = 'irem' + | a = 'iinc' + | a = 'ineg' + ) + -> ^(ARITMETICA $a) + ; + +load : ( a = 'iconst_m1' + | a = 'iconst_0' + | a = 'iconst_1' + | a = 'iconst_2' + | a = 'iconst_3' + | a = 'iconst_4' + | a = 'iconst_5' + | a = 'aconst_null' + | a = 'iload_0' + | a = 'iload_1' + | a = 'iload_2' + | a = 'iload_3' + | a = 'aload_0' + | a = 'aload_1' + | a = 'aload_2' + | a = 'aload_3' + ) + -> ^(LOAD $a) + ; + +loadint : ( a = 'iload' b = INTEIRO + | a = 'ldc' b = INTEIRO + | a = 'aload' b = INTEIRO + ) + -> ^(LOAD $a $b) + ; + +store : ( a = 'istore_0' + | a = 'istore_1' + | a = 'istore_2' + | a = 'istore_3' + | a = 'astore_0' + | a = 'astore_1' + | a = 'astore_2' + | a = 'astore_3' + ) + -> ^(STORE $a) + ; + +storeint : ( a = 'istore' b = INTEIRO + | a = 'astore' b = INTEIRO + ) + -> ^(STORE $a $b) + ; + +logica : ( a = 'iand' + | a = 'ior' + | a = 'ixor' + ) + -> ^(LOGICA $a) + ; + +desvio : ( a = 'ifeq' b = ID + | a = 'ifne' b = ID + | a = 'iflt' b = ID + | a = 'ifge' b = ID + | a = 'ifgt' b = ID + | a = 'ifle' b = ID + | a = 'if_icmpeq' b = ID + | a = 'if_icmpne' b = ID + | a = 'if_icmplt' b = ID + | a = 'if_icmpge' b = ID + | a = 'if_icmpgt' b = ID + | a = 'if_icmple' b = ID + | a = 'goto' b = ID + ) + -> ^(DESVIO $a $b) + ; + +pilha : ( a = 'pop' + | a = 'pop2' + | a = 'dup' + ) + -> ^(PILHA $a) + ; + +parametrosRetorno + : (parametros | '(' parametros ')') tip = tipo + -> ^(METHOD_CALL parametros $tip) + ; + +INIT : ''; + +INT : 'I'; + +VOID : 'V'; + +NULL : ('null' | 'NULL'); + +INTEIRO : '-'? '0'..'9'+ ; + +REF : (ID '/')+ ( ID | INIT); + +TIPO_REF: ('L'ID ('/' ID)*';' | INT)+; + +ID: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '_')*; + +NEWLINE : '\n'+; + +WS : (' ' | '\t' | '\r') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/bin/br/ufpb/iged/interpretador/gramaticas/Def.g b/bin/br/ufpb/iged/interpretador/gramaticas/Def.g new file mode 100644 index 0000000..0bda5a9 --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/gramaticas/Def.g @@ -0,0 +1,186 @@ +tree grammar Def; + +options { + tokenVocab=Assembler; + ASTLabelType=BytecodesAST; + filter=true; +} + +@header{ + package br.ufpb.iged.interpretador.parser; + + import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; + import br.ufpb.iged.interpretador.symboltable.classes.Escopo; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloVariavel; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; + import br.ufpb.iged.interpretador.symboltable.classes.TabelaSimbolos; + import br.ufpb.iged.interpretador.symboltable.classes.EscopoLocal; +} + +@members { + TabelaSimbolos tabelaSimbolos; + Escopo escopoAtual; + int contador; + public Def(TreeNodeStream input, TabelaSimbolos tabelaSimbolos) { + this(input); + this.tabelaSimbolos = tabelaSimbolos; + escopoAtual = tabelaSimbolos.global; + } +} + +topdown : entraNoCorpoMetodo + | entraNoConstrutor + | entraNoMetodo + | entraNaClasse + //| parametros + | declaracaoVariavel + | field + | invoke + | nenhumoperando + | umoperando + | label + ; + +bottomup : saiDoCorpoMetodo + | saiDoMetodo + | saiDoConstrutor + | saiDaClasse + ; + +entraNaClasse + : ^('.class' nome=ID (^(EXTENDS sup = .))? .) + { + System.out.println("linha "+$nome.getLine()+ + ": def class "+$nome.text); + if ( $sup!=null ) + $sup.escopo = escopoAtual; + SimboloClasse classe = new SimboloClasse("L" + $nome.text,escopoAtual,null); + classe.def = $nome; + $nome.simbolo = classe; + escopoAtual.definir(classe); + escopoAtual = classe; + } + ; + +declaracaoVariavel + : ^(FIELD_DECL (st =.)? ID tipo =.) + { + System.out.println("linha "+$ID.getLine()+": def "+$ID.text); + $tipo.escopo = escopoAtual; + boolean estatico = $st != null; + SimboloVariavel variavel = new SimboloVariavel($ID.text,null,estatico); + variavel.def = $ID; + $ID.simbolo = variavel; + escopoAtual.definir(variavel); + ((SimboloClasse)escopoAtual).getConstantPool().add(variavel); + } + ; + +entraNoConstrutor + : ^(CONSTR_DECL INIT tipoRet =. ^(PARAMS a =.) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("linha "+$INIT.getLine()+ + ": def method init "); + SimboloMetodo metodo = new SimboloMetodo($INIT.text+"("+a.getText()+")"+tipoRet.getText(), null, escopoAtual); + if (lim != null) + metodo.setTamanhoMemoriaLocal(new Integer(lim.getText())); + metodo.setRetorno($tipoRet.getText()); + metodo.def = $INIT; + $INIT.simbolo = metodo; + escopoAtual.definir(metodo); + escopoAtual = metodo; + contador = 0; + } + ; + +entraNoMetodo + : ^(METHOD_DECL ID tipoRet =. ^(PARAMS a =.) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("linha "+$ID.getLine()+ + ": def method "+$ID.text); + SimboloMetodo metodo = new SimboloMetodo($ID.text+"("+a.getText()+")"+tipoRet.getText(), null, escopoAtual); + if (lim != null) + metodo.setTamanhoMemoriaLocal(new Integer(lim.getText())); + metodo.setRetorno($tipoRet.getText()); + metodo.def = $ID; + $ID.simbolo = metodo; + escopoAtual.definir(metodo); + escopoAtual = metodo; + contador = 0; + } + ; + +entraNoCorpoMetodo + : BODY {escopoAtual = new EscopoLocal(escopoAtual);} + ; + +saiDoCorpoMetodo + : BODY + { + System.out.println("locals: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + ; + +saiDaClasse : '.class' + { + System.out.println("Saindo da classe.. membros: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + ; + +saiDoMetodo + : METHOD_DECL + { + System.out.println("Saindo do metodo: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + + } + ; + +saiDoConstrutor + : CONSTR_DECL + { + System.out.println("Saindo do construtor: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + + ; + +field : ^((a = 'getfield' | a = 'getstatic' | a = 'putfield' | a = 'putstatic') . .) + { + if ($a.equals("getstatic") || $a.equals("putstatic")) + contador += 9; + else + contador += 5; + } + ; + +invoke : ^(('invokespecial' | 'invokestatic' | 'invokevirtual') . ^(METHOD_CALL ^(PARAMS .) .)) + { + contador += 9; + } + ; + +nenhumoperando + : ^((RETURN | ARITMETICA | NEW | LOAD | STORE | LOGICA | PILHA) . ) + { + contador++; + } + ; + +umoperando + : ^((DESVIO | LOAD | STORE) . .) + { + contador += 5; + } + ; +label + : ^(LABEL id = .) + { + System.out.println("Definindo label "+id.getText()+" no endereço "+contador); + SimboloMetodo metodo = (SimboloMetodo) escopoAtual.obterEscopoEnvolvente(); + metodo.definirLabel($id.token, contador); + } + ; \ No newline at end of file diff --git a/bin/br/ufpb/iged/interpretador/gramaticas/Intermediario.g b/bin/br/ufpb/iged/interpretador/gramaticas/Intermediario.g new file mode 100644 index 0000000..2055079 --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/gramaticas/Intermediario.g @@ -0,0 +1,48 @@ +grammar Intermediario; + +@header{ + + package br.ufpb.iged.interpretador.tradutor.intermediario.parser; + + import java.io.IOException; + +} + +@lexer::header{ + package br.ufpb.iged.interpretador.tradutor.intermediario.parser; +} + +@members { + + protected void adicionarVariavel(Token op); + protected void traduzirLoad(Token opc, Token op) throws IOException; + protected void traduzirStore(Token opc, Token op) throws IOException; + protected void traduzirArimetica(Token opc) throws IOException; + +} + +programa : instrucao*; + +instrucao : (create | load | store | aritmetica); + +create : 'CREATE_INT' a = ID {adicionarVariavel($a);} + | 'DELETE_INT' ID + ; + +load : a = 'READ_INT' b = ID {traduzirLoad($a, $b);} + | a = 'READ_INTC' INT {traduzirLoad($a, $INT);} + ; + +store : a = 'WRITE_INT' b = ID {traduzirStore($a, $b);}; + +aritmetica : a = 'ADD' {traduzirArimetica($a);} + | a = 'SUB' {traduzirArimetica($a);} + | a = 'MULT' {traduzirArimetica($a);} + | a = 'DIV' {traduzirArimetica($a);} + ; + +INT : '-'? '0'..'9'+ ; + +ID: ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '.')* ; + +WS : (' ' | '\t' | '\r' | '\n') {skip();} ; \ No newline at end of file diff --git a/bin/br/ufpb/iged/interpretador/gramaticas/Ref.g b/bin/br/ufpb/iged/interpretador/gramaticas/Ref.g new file mode 100644 index 0000000..b82cc27 --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/gramaticas/Ref.g @@ -0,0 +1,266 @@ +tree grammar Ref; + +options { + tokenVocab = Assembler; + ASTLabelType = BytecodesAST; + filter = true; +} + +@header{ + package br.ufpb.iged.interpretador.parser; + + import br.ufpb.iged.interpretador.symboltable.classes.Escopo; + import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; + import br.ufpb.iged.interpretador.symboltable.classes.TabelaSimbolos; + import br.ufpb.iged.interpretador.symboltable.classes.Tipo; + import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloVariavel; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloLabel; +} + +@members { + + TabelaSimbolos tabelaSimbolos; + SimboloClasse simboloClasse; + BytecodeAssembler assembler; + Escopo escopoAtual; + public Ref(TreeNodeStream input, TabelaSimbolos tabelaSimbolos, + BytecodeAssembler assembler) { + this(input); + this.tabelaSimbolos = tabelaSimbolos; + this.assembler = assembler; + } + + private Tipo resolverTipo(String nomeTipo) { + + return (Tipo)simboloClasse.resolver(nomeTipo); + + } + + private void acessarCampo(String operacao, String nomeClasse, String nomeCampo) { + + assembler.escreverOpcode(operacao); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver(nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + SimboloVariavel simboloVariavel = + (SimboloVariavel) simboloClasse.resolver(nomeCampo); + + if (!simboloClasse.getConstantPool().contains(simboloVariavel)) + + simboloClasse.getConstantPool().add(simboloVariavel); + + if (operacao.equals("getstatic") || operacao.equals("putstatic")) + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + assembler.getConstantPool().indexOf(simboloClasse)); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + simboloClasse.obterIdentificadorVariavel(simboloVariavel)); + + } + + private void chamarMetodo(String instrucao, String nomeClasse, String nomeMetodo, String args, String tipoRetorno) { + + assembler.escreverOpcode(instrucao); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver(nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + SimboloMetodo simboloMetodo = + (SimboloMetodo) simboloClasse.resolver(nomeMetodo+"("+args+")"+tipoRetorno); + + if (!simboloClasse.getMethodArea().contains(simboloMetodo)) + + simboloClasse.getMethodArea().add(simboloMetodo); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + assembler.getConstantPool().indexOf(simboloClasse)); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + simboloClasse.getMethodArea().indexOf(simboloMetodo)); + + } + + private void newClass(String nomeClasse) { + + assembler.escreverOpcode("new"); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver( nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + BytecodeAssembler.escreverInteiro(BytecodeAssembler.codigo, + BytecodeAssembler.ip, assembler.getConstantPool().indexOf(simboloClasse)); + + } + +} + +topdown + : entraNaClasse + | entraNoMetodo + | entraNoConstrutor + | declaracaoVariavel + | field + | invoke + | novaClasse + | nenhumoperando + | umoperando + ; + +bottomup + : saiDoMetodo + | saiDoConstrutor + + ; + +entraNaClasse + : ^('.class' nome=ID (^(EXTENDS sup = .))? .) + { + + simboloClasse =(SimboloClasse)tabelaSimbolos.global.resolver("L" + $nome.getText()); + if(!assembler.getConstantPool().contains(simboloClasse)) + assembler.getConstantPool().add(simboloClasse); + if ( $sup!=null ) { + $sup.simbolo = $sup.escopo.resolver("L"+$sup.getText()); + simboloClasse.superClasse = + (SimboloClasse)$sup.simbolo; + System.out.println("linha "+$nome.getLine()+": set "+$nome.text+ + " super to "+((SimboloClasse)$nome.simbolo).superClasse.nome); + } + else { + System.out.println("linha "+$nome.getLine()+": set "+$nome.text); + } + } + ; + +declaracaoVariavel + : ^(FIELD_DECL .? ID tip =.) + { + if ($tip.getText().startsWith("L")) + $ID.simbolo.tipo = resolverTipo($tip.getText().substring(0, $tip.getText().length() - 1)); + else + $ID.simbolo.tipo = resolverTipo($tip.getText()); + System.out.println("linha "+$ID.getLine()+": set var type "+$ID.simbolo); + } + ; + +entraNoConstrutor + : ^(CONSTR_DECL INIT . ^(PARAMS .) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("Ref: Entrou no construtor "+$INIT.text); + escopoAtual = (SimboloMetodo)$INIT.simbolo; + BytecodeAssembler.codigo = new byte[BytecodeAssembler.TAMANHO_INICIAL_MEMORIA_CODIGO]; + BytecodeAssembler.ip = 0; + assembler.setMetodoAtual((SimboloMetodo)escopoAtual); + } + ; + +entraNoMetodo + : ^(METHOD_DECL ID . ^(PARAMS .) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("Ref: Entrou no metodo "+$ID.text); + escopoAtual = (SimboloMetodo)$ID.simbolo; + BytecodeAssembler.codigo = new byte[BytecodeAssembler.TAMANHO_INICIAL_MEMORIA_CODIGO]; + BytecodeAssembler.ip = 0; + assembler.setMetodoAtual((SimboloMetodo)escopoAtual); + } + ; + +saiDoMetodo + : METHOD_DECL + { + System.out.println("Ref: Saindo do metodo... "); + ((SimboloMetodo)escopoAtual).setCodigo(assembler.obterCodigoMaquina()); + ((SimboloMetodo)escopoAtual).setTamanhoMemoriaLocal(assembler.obterTamanhoMemoriaCodigo()); + } + ; + +saiDoConstrutor + : CONSTR_DECL + { + System.out.println("Ref: Saindo do construtor... "); + ((SimboloMetodo)escopoAtual).setCodigo(assembler.obterCodigoMaquina()); + ((SimboloMetodo)escopoAtual).setTamanhoMemoriaLocal(assembler.obterTamanhoMemoriaCodigo()); + } + ; + +field : ^((op = 'getfield' | op = 'getstatic' | op = 'putfield' | op = 'putstatic') ref = . tipo = .) + { + String[] tokens = $ref.getText().split("/"); + String campo = tokens[tokens.length - 1]; + String classe = "L"; + + int i; + + for (i = 0; i < tokens.length - 1; i++){ + if (i == tokens.length - 2) + classe += tokens[i]; + else + classe += tokens[i]+"/"; + } + + acessarCampo($op.getText(), classe, campo); + } + ; + +invoke : ^((op = 'invokespecial' | op = 'invokestatic' | op = 'invokevirtual') ref = . ^(METHOD_CALL ^(PARAMS a = .) tipoRet = .)) + { + + String[] tokens = $ref.getText().split("/"); + String nomeMetodo = tokens[tokens.length - 1]; + String classe = "L"; + + int i; + + for (i = 0; i < tokens.length - 1; i++){ + if (i == tokens.length - 2) + classe += tokens[i]; + else + classe += tokens[i]+"/"; + } + + System.out.println("chamando metodo "+nomeMetodo+"("+$a.getText()+")"+$tipoRet.getText()); + chamarMetodo($op.getText(), classe, nomeMetodo, $a.getText(), $tipoRet.getText()); + } + ; + +novaClasse + : ^(NEW classe = .) + { + newClass("L"+$classe.getText()); + } + ; + +nenhumoperando + : ^((RETURN | ARITMETICA | LOAD | STORE | LOGICA | PILHA) operacao = . ) + { + assembler.escreverOpcode($operacao.getText()); + } + ; + +umoperando + : ^((DESVIO | LOAD | STORE) operacao = . operando = .) + { + assembler.escreverOpcode($operacao.token, $operando.token); + } + ; \ No newline at end of file diff --git a/bin/br/ufpb/iged/interpretador/main.class b/bin/br/ufpb/iged/interpretador/main.class deleted file mode 100644 index f274b27..0000000 Binary files a/bin/br/ufpb/iged/interpretador/main.class and /dev/null differ diff --git a/bin/br/ufpb/iged/interpretador/parser/Assembler.tokens b/bin/br/ufpb/iged/interpretador/parser/Assembler.tokens new file mode 100644 index 0000000..940c7a7 --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/parser/Assembler.tokens @@ -0,0 +1,187 @@ +T__33=33 +T__34=34 +T__35=35 +T__36=36 +T__37=37 +T__38=38 +T__39=39 +T__40=40 +T__41=41 +T__42=42 +T__43=43 +T__44=44 +T__45=45 +T__46=46 +T__47=47 +T__48=48 +T__49=49 +T__50=50 +T__51=51 +T__52=52 +T__53=53 +T__54=54 +T__55=55 +T__56=56 +T__57=57 +T__58=58 +T__59=59 +T__60=60 +T__61=61 +T__62=62 +T__63=63 +T__64=64 +T__65=65 +T__66=66 +T__67=67 +T__68=68 +T__69=69 +T__70=70 +T__71=71 +T__72=72 +T__73=73 +T__74=74 +T__75=75 +T__76=76 +T__77=77 +T__78=78 +T__79=79 +T__80=80 +T__81=81 +T__82=82 +T__83=83 +T__84=84 +T__85=85 +T__86=86 +T__87=87 +T__88=88 +T__89=89 +T__90=90 +T__91=91 +T__92=92 +T__93=93 +T__94=94 +T__95=95 +T__96=96 +T__97=97 +T__98=98 +T__99=99 +T__100=100 +T__101=101 +T__102=102 +T__103=103 +T__104=104 +T__105=105 +T__106=106 +T__107=107 +T__108=108 +T__109=109 +T__110=110 +T__111=111 +ARGS=4 +ARITMETICA=5 +BODY=6 +CONSTR_DECL=7 +DESVIO=8 +EXTENDS=9 +FIELD_DECL=10 +ID=11 +INIT=12 +INT=13 +INTEIRO=14 +LABEL=15 +LIMIT=16 +LOAD=17 +LOGICA=18 +MEMBRO_CLASSE=19 +METHOD_CALL=20 +METHOD_DECL=21 +NEW=22 +NEWLINE=23 +NULL=24 +PARAMS=25 +PILHA=26 +REF=27 +RETURN=28 +STORE=29 +TIPO_REF=30 +VOID=31 +WS=32 +'('=33 +'()'=34 +')'=35 +'.class'=36 +'.end class'=37 +'.end method'=38 +'.field'=39 +'.limit locals'=40 +'.method'=41 +'.super'=42 +':'=43 +'aconst_null'=44 +'aload'=45 +'aload_0'=46 +'aload_1'=47 +'aload_2'=48 +'aload_3'=49 +'areturn'=50 +'astore'=51 +'astore_0'=52 +'astore_1'=53 +'astore_2'=54 +'astore_3'=55 +'dup'=56 +'getfield'=57 +'getstatic'=58 +'goto'=59 +'iadd'=60 +'iand'=61 +'iconst_0'=62 +'iconst_1'=63 +'iconst_2'=64 +'iconst_3'=65 +'iconst_4'=66 +'iconst_5'=67 +'iconst_m1'=68 +'idiv'=69 +'if_icmpeq'=70 +'if_icmpge'=71 +'if_icmpgt'=72 +'if_icmple'=73 +'if_icmplt'=74 +'if_icmpne'=75 +'ifeq'=76 +'ifge'=77 +'ifgt'=78 +'ifle'=79 +'iflt'=80 +'ifne'=81 +'iinc'=82 +'iload'=83 +'iload_0'=84 +'iload_1'=85 +'iload_2'=86 +'iload_3'=87 +'imul'=88 +'ineg'=89 +'invokespecial'=90 +'invokestatic'=91 +'invokevirtual'=92 +'ior'=93 +'irem'=94 +'ireturn'=95 +'istore'=96 +'istore_0'=97 +'istore_1'=98 +'istore_2'=99 +'istore_3'=100 +'isub'=101 +'ixor'=102 +'ldc'=103 +'new'=104 +'nop'=105 +'pop'=106 +'pop2'=107 +'putfield'=108 +'putstatic'=109 +'return'=110 +'static'=111 diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer$DFA10.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer$DFA10.class new file mode 100644 index 0000000..637275a Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer$DFA10.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer$DFA4.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer$DFA4.class new file mode 100644 index 0000000..ff3c533 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer$DFA4.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer.class new file mode 100644 index 0000000..1b2e107 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerLexer.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$aritmetica_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$aritmetica_return.class new file mode 100644 index 0000000..74df3f5 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$aritmetica_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$comando_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$comando_return.class new file mode 100644 index 0000000..e882e81 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$comando_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$definicaoClasse_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$definicaoClasse_return.class new file mode 100644 index 0000000..a9abe38 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$definicaoClasse_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$desvio_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$desvio_return.class new file mode 100644 index 0000000..31b1f88 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$desvio_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$instrucao_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$instrucao_return.class new file mode 100644 index 0000000..54131cf Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$instrucao_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$label_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$label_return.class new file mode 100644 index 0000000..b8919aa Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$label_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$limite_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$limite_return.class new file mode 100644 index 0000000..d2c8ddc Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$limite_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$load_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$load_return.class new file mode 100644 index 0000000..4efe769 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$load_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$loadint_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$loadint_return.class new file mode 100644 index 0000000..aded104 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$loadint_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$logica_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$logica_return.class new file mode 100644 index 0000000..4b73b8d Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$logica_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$manipulacaoObjetos_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$manipulacaoObjetos_return.class new file mode 100644 index 0000000..d0f96d1 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$manipulacaoObjetos_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$membroClasse_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$membroClasse_return.class new file mode 100644 index 0000000..fd1cb1f Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$membroClasse_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$operacao_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$operacao_return.class new file mode 100644 index 0000000..3b6fddf Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$operacao_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$parametrosRetorno_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$parametrosRetorno_return.class new file mode 100644 index 0000000..c60d16f Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$parametrosRetorno_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$parametros_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$parametros_return.class new file mode 100644 index 0000000..0b0e3d2 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$parametros_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$pilha_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$pilha_return.class new file mode 100644 index 0000000..0cc9fe1 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$pilha_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$programa_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$programa_return.class new file mode 100644 index 0000000..ea7b5c1 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$programa_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$retorno_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$retorno_return.class new file mode 100644 index 0000000..782baa5 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$retorno_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$store_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$store_return.class new file mode 100644 index 0000000..90138dc Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$store_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$storeint_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$storeint_return.class new file mode 100644 index 0000000..3088343 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$storeint_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$superClasse_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$superClasse_return.class new file mode 100644 index 0000000..8aaf9ed Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$superClasse_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$tipo_return.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$tipo_return.class new file mode 100644 index 0000000..47147b6 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser$tipo_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/AssemblerParser.class b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser.class new file mode 100644 index 0000000..234c77a Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/AssemblerParser.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/Def$DFA1.class b/bin/br/ufpb/iged/interpretador/parser/Def$DFA1.class new file mode 100644 index 0000000..5544b24 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/Def$DFA1.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/Def$declaracaoVariavel_return.class b/bin/br/ufpb/iged/interpretador/parser/Def$declaracaoVariavel_return.class new file mode 100644 index 0000000..b167fe9 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/Def$declaracaoVariavel_return.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/Def.class b/bin/br/ufpb/iged/interpretador/parser/Def.class new file mode 100644 index 0000000..bdbb0fc Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/Def.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/Def.tokens b/bin/br/ufpb/iged/interpretador/parser/Def.tokens new file mode 100644 index 0000000..940c7a7 --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/parser/Def.tokens @@ -0,0 +1,187 @@ +T__33=33 +T__34=34 +T__35=35 +T__36=36 +T__37=37 +T__38=38 +T__39=39 +T__40=40 +T__41=41 +T__42=42 +T__43=43 +T__44=44 +T__45=45 +T__46=46 +T__47=47 +T__48=48 +T__49=49 +T__50=50 +T__51=51 +T__52=52 +T__53=53 +T__54=54 +T__55=55 +T__56=56 +T__57=57 +T__58=58 +T__59=59 +T__60=60 +T__61=61 +T__62=62 +T__63=63 +T__64=64 +T__65=65 +T__66=66 +T__67=67 +T__68=68 +T__69=69 +T__70=70 +T__71=71 +T__72=72 +T__73=73 +T__74=74 +T__75=75 +T__76=76 +T__77=77 +T__78=78 +T__79=79 +T__80=80 +T__81=81 +T__82=82 +T__83=83 +T__84=84 +T__85=85 +T__86=86 +T__87=87 +T__88=88 +T__89=89 +T__90=90 +T__91=91 +T__92=92 +T__93=93 +T__94=94 +T__95=95 +T__96=96 +T__97=97 +T__98=98 +T__99=99 +T__100=100 +T__101=101 +T__102=102 +T__103=103 +T__104=104 +T__105=105 +T__106=106 +T__107=107 +T__108=108 +T__109=109 +T__110=110 +T__111=111 +ARGS=4 +ARITMETICA=5 +BODY=6 +CONSTR_DECL=7 +DESVIO=8 +EXTENDS=9 +FIELD_DECL=10 +ID=11 +INIT=12 +INT=13 +INTEIRO=14 +LABEL=15 +LIMIT=16 +LOAD=17 +LOGICA=18 +MEMBRO_CLASSE=19 +METHOD_CALL=20 +METHOD_DECL=21 +NEW=22 +NEWLINE=23 +NULL=24 +PARAMS=25 +PILHA=26 +REF=27 +RETURN=28 +STORE=29 +TIPO_REF=30 +VOID=31 +WS=32 +'('=33 +'()'=34 +')'=35 +'.class'=36 +'.end class'=37 +'.end method'=38 +'.field'=39 +'.limit locals'=40 +'.method'=41 +'.super'=42 +':'=43 +'aconst_null'=44 +'aload'=45 +'aload_0'=46 +'aload_1'=47 +'aload_2'=48 +'aload_3'=49 +'areturn'=50 +'astore'=51 +'astore_0'=52 +'astore_1'=53 +'astore_2'=54 +'astore_3'=55 +'dup'=56 +'getfield'=57 +'getstatic'=58 +'goto'=59 +'iadd'=60 +'iand'=61 +'iconst_0'=62 +'iconst_1'=63 +'iconst_2'=64 +'iconst_3'=65 +'iconst_4'=66 +'iconst_5'=67 +'iconst_m1'=68 +'idiv'=69 +'if_icmpeq'=70 +'if_icmpge'=71 +'if_icmpgt'=72 +'if_icmple'=73 +'if_icmplt'=74 +'if_icmpne'=75 +'ifeq'=76 +'ifge'=77 +'ifgt'=78 +'ifle'=79 +'iflt'=80 +'ifne'=81 +'iinc'=82 +'iload'=83 +'iload_0'=84 +'iload_1'=85 +'iload_2'=86 +'iload_3'=87 +'imul'=88 +'ineg'=89 +'invokespecial'=90 +'invokestatic'=91 +'invokevirtual'=92 +'ior'=93 +'irem'=94 +'ireturn'=95 +'istore'=96 +'istore_0'=97 +'istore_1'=98 +'istore_2'=99 +'istore_3'=100 +'isub'=101 +'ixor'=102 +'ldc'=103 +'new'=104 +'nop'=105 +'pop'=106 +'pop2'=107 +'putfield'=108 +'putstatic'=109 +'return'=110 +'static'=111 diff --git a/bin/br/ufpb/iged/interpretador/parser/Ref$DFA1.class b/bin/br/ufpb/iged/interpretador/parser/Ref$DFA1.class new file mode 100644 index 0000000..9d9ed7e Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/Ref$DFA1.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/Ref.class b/bin/br/ufpb/iged/interpretador/parser/Ref.class new file mode 100644 index 0000000..c94a38b Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/parser/Ref.class differ diff --git a/bin/br/ufpb/iged/interpretador/parser/Ref.tokens b/bin/br/ufpb/iged/interpretador/parser/Ref.tokens new file mode 100644 index 0000000..940c7a7 --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/parser/Ref.tokens @@ -0,0 +1,187 @@ +T__33=33 +T__34=34 +T__35=35 +T__36=36 +T__37=37 +T__38=38 +T__39=39 +T__40=40 +T__41=41 +T__42=42 +T__43=43 +T__44=44 +T__45=45 +T__46=46 +T__47=47 +T__48=48 +T__49=49 +T__50=50 +T__51=51 +T__52=52 +T__53=53 +T__54=54 +T__55=55 +T__56=56 +T__57=57 +T__58=58 +T__59=59 +T__60=60 +T__61=61 +T__62=62 +T__63=63 +T__64=64 +T__65=65 +T__66=66 +T__67=67 +T__68=68 +T__69=69 +T__70=70 +T__71=71 +T__72=72 +T__73=73 +T__74=74 +T__75=75 +T__76=76 +T__77=77 +T__78=78 +T__79=79 +T__80=80 +T__81=81 +T__82=82 +T__83=83 +T__84=84 +T__85=85 +T__86=86 +T__87=87 +T__88=88 +T__89=89 +T__90=90 +T__91=91 +T__92=92 +T__93=93 +T__94=94 +T__95=95 +T__96=96 +T__97=97 +T__98=98 +T__99=99 +T__100=100 +T__101=101 +T__102=102 +T__103=103 +T__104=104 +T__105=105 +T__106=106 +T__107=107 +T__108=108 +T__109=109 +T__110=110 +T__111=111 +ARGS=4 +ARITMETICA=5 +BODY=6 +CONSTR_DECL=7 +DESVIO=8 +EXTENDS=9 +FIELD_DECL=10 +ID=11 +INIT=12 +INT=13 +INTEIRO=14 +LABEL=15 +LIMIT=16 +LOAD=17 +LOGICA=18 +MEMBRO_CLASSE=19 +METHOD_CALL=20 +METHOD_DECL=21 +NEW=22 +NEWLINE=23 +NULL=24 +PARAMS=25 +PILHA=26 +REF=27 +RETURN=28 +STORE=29 +TIPO_REF=30 +VOID=31 +WS=32 +'('=33 +'()'=34 +')'=35 +'.class'=36 +'.end class'=37 +'.end method'=38 +'.field'=39 +'.limit locals'=40 +'.method'=41 +'.super'=42 +':'=43 +'aconst_null'=44 +'aload'=45 +'aload_0'=46 +'aload_1'=47 +'aload_2'=48 +'aload_3'=49 +'areturn'=50 +'astore'=51 +'astore_0'=52 +'astore_1'=53 +'astore_2'=54 +'astore_3'=55 +'dup'=56 +'getfield'=57 +'getstatic'=58 +'goto'=59 +'iadd'=60 +'iand'=61 +'iconst_0'=62 +'iconst_1'=63 +'iconst_2'=64 +'iconst_3'=65 +'iconst_4'=66 +'iconst_5'=67 +'iconst_m1'=68 +'idiv'=69 +'if_icmpeq'=70 +'if_icmpge'=71 +'if_icmpgt'=72 +'if_icmple'=73 +'if_icmplt'=74 +'if_icmpne'=75 +'ifeq'=76 +'ifge'=77 +'ifgt'=78 +'ifle'=79 +'iflt'=80 +'ifne'=81 +'iinc'=82 +'iload'=83 +'iload_0'=84 +'iload_1'=85 +'iload_2'=86 +'iload_3'=87 +'imul'=88 +'ineg'=89 +'invokespecial'=90 +'invokestatic'=91 +'invokevirtual'=92 +'ior'=93 +'irem'=94 +'ireturn'=95 +'istore'=96 +'istore_0'=97 +'istore_1'=98 +'istore_2'=99 +'istore_3'=100 +'isub'=101 +'ixor'=102 +'ldc'=103 +'new'=104 +'nop'=105 +'pop'=106 +'pop2'=107 +'putfield'=108 +'putstatic'=109 +'return'=110 +'static'=111 diff --git a/bin/br/ufpb/iged/interpretador/principal/ClassLoader.class b/bin/br/ufpb/iged/interpretador/principal/ClassLoader.class new file mode 100644 index 0000000..252444d Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/principal/ClassLoader.class differ diff --git a/bin/br/ufpb/iged/interpretador/principal/Interpretador$1.class b/bin/br/ufpb/iged/interpretador/principal/Interpretador$1.class new file mode 100644 index 0000000..e1384b3 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/principal/Interpretador$1.class differ diff --git a/bin/br/ufpb/iged/interpretador/principal/Interpretador.class b/bin/br/ufpb/iged/interpretador/principal/Interpretador.class index 5abf885..fd8ca4e 100644 Binary files a/bin/br/ufpb/iged/interpretador/principal/Interpretador.class and b/bin/br/ufpb/iged/interpretador/principal/Interpretador.class differ diff --git a/bin/br/ufpb/iged/interpretador/principal/MaquinaVirtual.class b/bin/br/ufpb/iged/interpretador/principal/MaquinaVirtual.class new file mode 100644 index 0000000..f7aabe2 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/principal/MaquinaVirtual.class differ diff --git a/bin/br/ufpb/iged/interpretador/principal/Objeto.class b/bin/br/ufpb/iged/interpretador/principal/Objeto.class new file mode 100644 index 0000000..807a290 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/principal/Objeto.class differ diff --git a/bin/br/ufpb/iged/interpretador/principal/ProgramCounter.class b/bin/br/ufpb/iged/interpretador/principal/ProgramCounter.class new file mode 100644 index 0000000..9b8a270 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/principal/ProgramCounter.class differ diff --git a/bin/br/ufpb/iged/interpretador/principal/Referencia.class b/bin/br/ufpb/iged/interpretador/principal/Referencia.class new file mode 100644 index 0000000..03e4b17 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/principal/Referencia.class differ diff --git a/bin/br/ufpb/iged/interpretador/principal/StackFrame.class b/bin/br/ufpb/iged/interpretador/principal/StackFrame.class new file mode 100644 index 0000000..2b86de9 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/principal/StackFrame.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/BytecodesAST.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/BytecodesAST.class new file mode 100644 index 0000000..f14766a Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/BytecodesAST.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/BytecodesErrorNode.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/BytecodesErrorNode.class new file mode 100644 index 0000000..d7db25c Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/BytecodesErrorNode.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/Escopo.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/Escopo.class new file mode 100644 index 0000000..0d27abd Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/Escopo.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoBase.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoBase.class new file mode 100644 index 0000000..2bc18ee Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoBase.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoGlobal.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoGlobal.class new file mode 100644 index 0000000..dc35aa2 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoGlobal.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoLocal.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoLocal.class new file mode 100644 index 0000000..7674e3f Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/EscopoLocal.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/Simbolo.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/Simbolo.class new file mode 100644 index 0000000..8b0b690 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/Simbolo.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloClasse.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloClasse.class new file mode 100644 index 0000000..1a456b7 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloClasse.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloComEscopo.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloComEscopo.class new file mode 100644 index 0000000..3283df5 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloComEscopo.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloLabel.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloLabel.class new file mode 100644 index 0000000..79410e9 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloLabel.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloMetodo.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloMetodo.class new file mode 100644 index 0000000..c5fcef2 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloMetodo.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloTipoPrimitvo.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloTipoPrimitvo.class new file mode 100644 index 0000000..678e7c5 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloTipoPrimitvo.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloVariavel.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloVariavel.class new file mode 100644 index 0000000..0696ddb Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/SimboloVariavel.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/TabelaSimbolos.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/TabelaSimbolos.class new file mode 100644 index 0000000..06d8094 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/TabelaSimbolos.class differ diff --git a/bin/br/ufpb/iged/interpretador/symboltable/classes/Tipo.class b/bin/br/ufpb/iged/interpretador/symboltable/classes/Tipo.class new file mode 100644 index 0000000..c732335 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/symboltable/classes/Tipo.class differ diff --git a/bin/br/ufpb/iged/interpretador/testes/Test.class b/bin/br/ufpb/iged/interpretador/testes/Test.class index b940d82..360ee39 100644 Binary files a/bin/br/ufpb/iged/interpretador/testes/Test.class and b/bin/br/ufpb/iged/interpretador/testes/Test.class differ diff --git a/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/Intermediario.tokens b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/Intermediario.tokens new file mode 100644 index 0000000..0b7c472 --- /dev/null +++ b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/Intermediario.tokens @@ -0,0 +1,21 @@ +T__7=7 +T__8=8 +T__9=9 +T__10=10 +T__11=11 +T__12=12 +T__13=13 +T__14=14 +T__15=15 +ID=4 +INT=5 +WS=6 +'ADD'=7 +'CREATE_INT'=8 +'DELETE_INT'=9 +'DIV'=10 +'MULT'=11 +'READ_INT'=12 +'READ_INTC'=13 +'SUB'=14 +'WRITE_INT'=15 diff --git a/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioLexer.class b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioLexer.class new file mode 100644 index 0000000..1ed928b Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioLexer.class differ diff --git a/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioParser.class b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioParser.class new file mode 100644 index 0000000..ea9b53f Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioParser.class differ diff --git a/bin/br/ufpb/iged/interpretador/tradutor/intermediario/principal/Main.class b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/principal/Main.class new file mode 100644 index 0000000..7c3ef89 Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/principal/Main.class differ diff --git a/bin/br/ufpb/iged/interpretador/tradutor/intermediario/principal/TradutorIntermediario.class b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/principal/TradutorIntermediario.class new file mode 100644 index 0000000..475ef0b Binary files /dev/null and b/bin/br/ufpb/iged/interpretador/tradutor/intermediario/principal/TradutorIntermediario.class differ diff --git a/build.xml b/build.xml old mode 100644 new mode 100755 index 3a392b5..6d01066 --- a/build.xml +++ b/build.xml @@ -1,32 +1,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bytecodes.txt b/bytecodes.txt new file mode 100644 index 0000000..c6cbf67 --- /dev/null +++ b/bytecodes.txt @@ -0,0 +1,7 @@ +iload_0 +ldc 10 +istore_0 +iadd +isub +imul +idiv diff --git a/classes/Classe.class b/classes/Classe.class new file mode 100644 index 0000000..c662489 --- /dev/null +++ b/classes/Classe.class @@ -0,0 +1,37 @@ +.class Classe +.field asdf I +.field fachdf I +.field zavcui I +.field lohdg I +.field attr1 I +.field atr I +.method (II) V + iload_0 + iload_1 + putfield Classe/attr1 I + iload_2 + putfield Classe/atr I + return +.end method +.method kioeot(IIII) I + iload_1 + iconst_2 + imul +L2: iload_2 + if_icmpeq L1 + iload_0 + iload 4 + putfield Classe/atr I + iload_2 + ireturn +L1: iload_1 + iconst_2 + idiv + istore_2 + iconst_3 + iload_2 + isub + ifeq L2 + ireturn +.end method +.end class \ No newline at end of file diff --git a/classes/Comp.class b/classes/Comp.class new file mode 100644 index 0000000..34080c1 --- /dev/null +++ b/classes/Comp.class @@ -0,0 +1,20 @@ +.class Comp +.method operacoes(II) I + iload_1 + iload_2 + isub + istore_0 +L1: iload_0 + ldc 10 + if_icmplt L2 + iload_0 + iconst_2 + idiv + ireturn +L2: iload_0 + iconst_2 + iadd + istore_0 + goto L1 +.end method +.end class \ No newline at end of file diff --git a/classes/Composicao.class b/classes/Composicao.class new file mode 100644 index 0000000..5c7475a --- /dev/null +++ b/classes/Composicao.class @@ -0,0 +1,8 @@ +.class Composicao +.field basxty I +.field teste LTeste; +.field jahss I +.method () V + return +.end method +.end class diff --git a/classes/Foo.class b/classes/Foo.class new file mode 100644 index 0000000..9b47b38 --- /dev/null +++ b/classes/Foo.class @@ -0,0 +1,43 @@ +.class Foo +.super Super +.field x I +.field y I +.field z LComp; +.method (II) V + iload_0 + iload_1 + putfield Foo/abc I + iload_2 + putfield Foo/xyz I + iconst_0 + putfield Foo/x I + iconst_0 + putfield Foo/y I + new Comp + putfield Foo/z LComp; + return +.end method +.method media() I + iload_0 + dup + getfield Foo/abc I + istore_1 + dup + getfield Foo/xyz I + iload_1 + iadd + istore_2 + dup + getfield Foo/x I + iload_2 + iadd + istore_2 + dup + getfield Foo/y I + iload_2 + iadd + iconst_4 + idiv + ireturn +.end method +.end class \ No newline at end of file diff --git a/classes/Heranca.class b/classes/Heranca.class new file mode 100644 index 0000000..12f1f1f --- /dev/null +++ b/classes/Heranca.class @@ -0,0 +1,20 @@ +.class Heranca +.super Teste +.field abfgs I +.field lovxfd I +.method () V + return +.end method +.method ashdhdf(III) V + iload_1 + iload_2 + imul + iload_3 + iadd + istore 4 + iload_0 + iload 4 + putfield Heranca/lovxfd I + return +.end method +.end class \ No newline at end of file diff --git a/classes/Main.class b/classes/Main.class new file mode 100644 index 0000000..b454040 --- /dev/null +++ b/classes/Main.class @@ -0,0 +1,36 @@ +.class Main +.method static main() V +.limit locals 100 + new Foo + iconst_1 + iconst_5 + invokespecial Foo/(II) V + pop2 + astore_0 + aload_0 + iconst_4 + putfield Foo/x I + iconst_2 + putfield Foo/y I + invokevirtual Foo/media() I + istore_1 + ldc 8 + iload_1 + iadd + istore_2 + aload_0 + dup + getfield Foo/z LComp; + astore_3 + aload_3 + iload_1 + iload_2 + invokevirtual Comp/operacoes(II) I + istore 4 + iload 4 + iconst_2 + imul + istore 5 + return +.end method +.end class \ No newline at end of file diff --git a/classes/Main2.class b/classes/Main2.class new file mode 100644 index 0000000..bddc977 --- /dev/null +++ b/classes/Main2.class @@ -0,0 +1,289 @@ +.class Main2 +.method static main() V +.limit locals 100 + new Heranca + invokespecial Heranca/() V + ldc 6 + iconst_3 + iconst_2 + invokevirtual Heranca/ashdhdf(III)V + pop2 + pop + dup + getfield Heranca/lovxfd I + iconst_2 + ldc 24 + invokevirtual Heranca/jdkfjkd(III)I + pop2 + pop2 + ldc 3 + ldc 6 + iadd + istore_0 + iconst_2 + iconst_3 + imul + istore_1 + iconst_2 + iconst_1 + isub + istore_2 + ldc 25 + ldc 5 + idiv + istore_3 + ldc 7 + iconst_2 + irem + istore 4 + iconst_m1 + istore 5 +L1: iload 5 + iinc + istore 5 + iload_1 + iload_2 + iadd + istore 6 + iload 4 + iload 6 + pop + iinc + istore 7 + ldc 14 + ineg + istore 8 + ldc 25 + ldc 34 + if_icmpgt L1 + pop + iconst_2 + ldc 10 + imul +L2: ineg + ldc 4 + pop2 + ldc 20 + ldc 44 + isub + ldc -26 + if_icmplt L2 + iconst_2 + iconst_3 + ldc 5 + invokestatic Main/uisos(III)I + ldc 11 + iadd + ldc -23 + iload 5 + iadd + iadd + ifeq L1 + new Teste + dup + invokespecial Teste/() V + ldc 5 + putfield Teste/abc I + iconst_3 + putfield Teste/xyz I + dup + getfield Teste/abc I + istore 9 + astore 10 + aconst_null + astore 11 + new Classe + dup + astore 12 + dup + iconst_3 + ldc 8 + invokespecial Classe/(II) V + pop2 + getfield Classe/attr1 I + pop + dup + getfield Classe/atr I + putfield Classe/asdf I + iconst_5 + putfield Classe/zavcui I + ldc 24 + putfield Classe/fachdf I + dup + getfield Classe/zavcui I + putfield Classe/lohdg I + dup + getfield Classe/lohdg I + iconst_4 + imul + istore 13 + dup + getfield Classe/fachdf I + ldc 8 + idiv + istore 14 + iconst_4 + iconst_2 + ldc 12 + ldc 6 + invokevirtual Classe/kioeot(IIII) I + new Composicao + dup + astore 15 + dup + invokespecial Composicao/() V + new Teste + dup + invokespecial Teste/() V + ldc 12 + putfield Teste/abc I + ldc 24 + putfield Teste/xyz I + pop + putfield Composicao/teste LTeste; + iconst_2 + putfield Composicao/basxty I + iconst_3 + putfield Composicao/jahss I + astore 16 + ldc 8 + istore 17 + aload 16 + dup + getfield Composicao/teste LTeste; + dup + getfield Teste/xyz I + iload 17 + idiv + istore 18 + pop2 + new Heranca + dup + astore 19 + dup + invokespecial Heranca/() V + iconst_3 + putfield Heranca/abfgs I + ldc 45 + putfield Heranca/lovxfd I + ldc 32 + putfield Heranca/abc I + ldc 9 + putfield Heranca/xyz I + astore 20 + iconst_4 + istore 21 + aload 20 + dup + getfield Heranca/abfgs I + aload 20 + getfield Heranca/abc I + imul + istore 22 + dup + getfield Heranca/lovxfd I + aload 20 + getfield Heranca/xyz I + idiv + iload 21 + isub + istore 23 + aload 19 + iload 23 + iload 22 + aload 15 + aload 12 + invokestatic Main/refs(LClasse;LComposicao;IILHeranca;) I + istore 24 + return +.end method +.method static uisos(III)I +.limit locals 100 + ldc 5 + iconst_2 + imul + ldc 9 + if_icmpgt L2 +L1: ldc 6 + iconst_3 + idiv + iload 4 + if_icmpeq L3 +L2: iconst_3 + iconst_1 + iadd + istore_3 + iload_0 + iload_1 + isub + istore 4 + iload_2 + if_icmplt L1 +L3: ldc 8 + iconst_3 + imul + iload 4 + idiv + ireturn +.end method +.method static refs(LClasse;LComposicao;IILHeranca;)I + aload_0 + getfield Classe/attr1 I + istore 5 + aload_1 + dup + getfield Composicao/jahss I + iload 5 + imul + istore 5 + dup + getfield Composicao/teste LTeste; + dup + getfield Teste/abc I + istore 8 + getfield Teste/xyz I + iload 8 + idiv + istore 6 + pop +L2: iload 5 + iload 6 + iadd + istore 7 + iload_2 + iload_3 + isub + iload 7 + iadd + istore 7 + aload 4 + dup + getfield Heranca/abfgs I + istore 9 + getfield Heranca/xyz I + iload 9 + irem + ifeq L1 + goto L2 +L1: iload 7 + iload 6 + isub + iinc + invokestatic Main/campos_estaticos(I) I + ireturn +.end method +.method static campos_estaticos(I)I + ldc 240 + putstatic Teste/kadls I + ldc 8 + dup + putstatic Teste/iqowd I + getstatic Teste/kadls I + iload_0 + idiv + dup + getstatic Teste/iqowd I + imul + ireturn +.end method +.end class \ No newline at end of file diff --git a/classes/Super.class b/classes/Super.class new file mode 100644 index 0000000..f2c0831 --- /dev/null +++ b/classes/Super.class @@ -0,0 +1,7 @@ +.class Super +.field abc I +.field xyz I +.method () V + return +.end method +.end class \ No newline at end of file diff --git a/classes/Teste.class b/classes/Teste.class new file mode 100644 index 0000000..020daec --- /dev/null +++ b/classes/Teste.class @@ -0,0 +1,17 @@ +.class Teste +.field abc I +.field xyz I +.field static kadls I +.field static iqowd I +.method () V + return +.end method +.method jdkfjkd(III) I + iload_1 + iload_2 + idiv + iload_3 + isub + ireturn +.end method +.end class \ No newline at end of file diff --git a/codigo_intermediario.txt b/codigo_intermediario.txt new file mode 100644 index 0000000..08cb009 --- /dev/null +++ b/codigo_intermediario.txt @@ -0,0 +1,9 @@ +CREATE_INT x +READ_INT x +READ_INTC 10 +WRITE_INT x +DELETE_INT x +ADD +SUB +MULT +DIV \ No newline at end of file diff --git a/entrada.txt b/entrada.txt deleted file mode 100644 index 9a7871f..0000000 --- a/entrada.txt +++ /dev/null @@ -1,53 +0,0 @@ - ldc 3; - ldc 6; - iadd; - istore_0; - iconst_2; - iconst_3; - imul; - istore_1; - iconst_2; - iconst_1; - isub; - istore_2; - ldc 25; - ldc 5; - idiv; - istore_3; - ldc 7; - iconst_2; - irem; - istore 4; -L1: iload_1; - iload_2; - iadd; - istore 5; - iload 4; - iload 5; - pop; - iinc; - istore 6; - ldc 14; - ineg; - istore 7; - ldc 25; - ldc 34; - if_icmpgt L1; - pop; - iconst_2; - ldc 10; - imul; -L2: ineg; - ldc 4; - pop2; - ldc 20; - ldc 44; - isub; - ldc -26; - if_icmplt L2; - ldc 23; - ldc -23; - iadd; - ifeq L1; - - \ No newline at end of file diff --git a/instropcode_set.txt b/instropcode_set.txt old mode 100644 new mode 100755 index 1909a14..33884d4 --- a/instropcode_set.txt +++ b/instropcode_set.txt @@ -1,48 +1,71 @@ -//Contém o conjunto de opcodes das instruções que o interpretador suporta até o momento - -opcode hex dec - -nop 00 0 -iconst_m1 02 2 -iconst_0 03 3 -iconst_1 04 4 -iconst_2 05 5 -iconst_3 06 6 -iconst_4 07 7 -iconst_5 -ldc 12 18 -iload 15 21 -iload_0 1a 26 -iload_1 1b 27 -iload_2 1c 28 -iload_3 1d 29 -istore 36 54 -istore_0 3b 59 -istore_1 3c 60 -istore_2 3d 61 -istore_3 3e 62 -pop 57 87 -pop2 58 88 -iadd 60 96 -isub 64 100 -imul 68 104 -idiv 6c 108 -irem 70 112 -ineg 74 116 -iand 7e 126 -ior 80 128 -ixor 82 130 -iinc 84 132 -ifeq 99 153 -ifne 9a 154 -iflt 9b 155 -ifge 9c 156 -ifgt 9d 157 -ifle 9e 158 -if_icmpeq 9f 159 -if_icmpne a0 160 -if_icmplt a1 161 -if_icmpge a2 162 -if_icmpgt a3 163 -if_icmple a4 164 -goto a7 167 \ No newline at end of file +//Contém o conjunto de opcodes das instruções que o interpretador suporta até o momento + +opcode hex dec + +nop 00 0 +aconst_null 01 1 +iconst_m1 02 2 +iconst_0 03 3 +iconst_1 04 4 +iconst_2 05 5 +iconst_3 06 6 +iconst_4 07 7 +iconst_5 08 8 +ldc 12 18 +iload 15 21 +iload_0 1a 26 +iload_1 1b 27 +iload_2 1c 28 +iload_3 1d 29 +istore 36 54 +astore 3a 58 +istore_0 3b 59 +istore_1 3c 60 +istore_2 3d 61 +istore_3 3e 62 +pop 57 87 +pop2 58 88 +dup 59 89 +iadd 60 96 +isub 64 100 +imul 68 104 +idiv 6c 108 +irem 70 112 +ineg 74 116 +iand 7e 126 +ior 80 128 +ixor 82 130 +iinc 84 132 +ifeq 99 153 +ifne 9a 154 +iflt 9b 155 +ifge 9c 156 +ifgt 9d 157 +ifle 9e 158 +if_icmpeq 9f 159 +if_icmpne a0 160 +if_icmplt a1 161 +if_icmpge a2 162 +if_icmpgt a3 163 +if_icmple a4 164 +goto a7 167 +aload 19 25 +aload_0 2a 42 +aload_1 2b 43 +aload_2 2c 44 +aload_3 2d 45 +astore_0 4b 75 +astore_1 4c 76 +astore_2 4d 77 +astore_3 4e 78 +ireturn ac 172 +areturn b0 176 +return b1 177 +getstatic b2 178 +putstatic b3 179 +getfield b4 180 +putfield b5 181 +invokevirtual b6 182 +invokespecial b7 183 +invokestatic b8 184 +new bb 187 diff --git a/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.java b/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.java old mode 100644 new mode 100755 index aa9884a..965b79f --- a/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.java +++ b/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/BytecodeAssembler.java @@ -1,248 +1,257 @@ -package br.ufpb.iged.interpretador.bytecodeassembler.asm; - -import java.util.HashMap; -import java.util.Map; - -import org.antlr.runtime.TokenStream; - -import org.antlr.runtime.Token; -import br.ufpb.iged.interpretador.bytecodeassembler.parser.AssemblerParser; -import br.ufpb.iged.interpretador.excecoes.AcessoIndevidoMemoriaException; -import br.ufpb.iged.interpretador.excecoes.LabelException; - -public class BytecodeAssembler extends AssemblerParser{ - - public static final int TAMANHO_INICIAL_MEMORIA_CODIGO = 1024; - public static final int TAMANHO_INICIAL_MEMORIA_GLOBAL = 1024; - - protected Map opcodesInstrucoes = - new HashMap(); - - protected Map labels = - new HashMap(); - protected Map enderecosMap = - new HashMap(); - protected static int ip = 0; - public static byte[] codigo = new byte[TAMANHO_INICIAL_MEMORIA_CODIGO]; - protected int tamMemoriaGlobalEstruturas = 0; - protected int tamMemoriaGlobalReferencias = 0; - protected int tamMemoriaGlobal = 0; - - - public BytecodeAssembler(TokenStream lexer, Definicao.Instrucao[] instrucoes) { - - super(lexer); - - for (int i = 1; i < instrucoes.length; i++) { - - opcodesInstrucoes.put(instrucoes[i].nome, instrucoes[i].opcode); - - } - - } - - protected void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException { - - String opcodeTxt = opc.getText(); - - if (opcodeTxt.contains("0")) { - - if (tamMemoriaGlobal == 0) - - tamMemoriaGlobal++; - - } else if (opcodeTxt.contains("1")) { - - if (tamMemoriaGlobal == 1) - - tamMemoriaGlobal++; - - else if (tamMemoriaGlobal < 1) - - throw new AcessoIndevidoMemoriaException(); - - } else if (opcodeTxt.contains("2")) { - - if (tamMemoriaGlobal == 2) - - tamMemoriaGlobal++; - - else if (tamMemoriaGlobal < 2) - - throw new AcessoIndevidoMemoriaException(); - - } else if (opcodeTxt.contains("3")) { - - if (tamMemoriaGlobal == 3) - - tamMemoriaGlobal++; - - else if (tamMemoriaGlobal < 3) - - throw new AcessoIndevidoMemoriaException(); - - } - - escreverOpcode(opc); - - } - - protected void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException { - - Integer endereco = new Integer(op.getText()); - - if (tamMemoriaGlobal == endereco) - - tamMemoriaGlobal++; - - else if (tamMemoriaGlobal < endereco) - - throw new AcessoIndevidoMemoriaException(); - - escreverOpcode(opc, op); - - } - - protected void escreverOpcode(Token opc) { - - String nomeInstrucao = opc.getText(); - - Integer opcode = opcodesInstrucoes.get(nomeInstrucao); - - verificarAumentoTamanhoMemoria(ip + 1); - - codigo[ip++] = (byte)(opcode.intValue() & 0xFF); - - - } - - - protected void escreverOpcode(Token opc, Token op) throws LabelException { - - escreverOpcode(opc); - - escreverOperando(op); - - } - - protected void escreverOperando(Token token) throws LabelException { - - int valor = 0; - - String operandoTxt = token.getText(); - - switch(token.getType()) { - - case INT: valor = new Integer(operandoTxt);break; - case ID: valor = obterEndereco(operandoTxt);break; - - } - - escreverInteiro(codigo, ip, valor); - - } - - protected void definirLabel(Token id) throws LabelException { - - LabelSymbol label = labels.get(id.getText()); - - if (label != null) - throw new LabelException("Label duplicado"); - - - label = new LabelSymbol(id.getText(), ip); - - labels.put(id.getText(), label); - - } - - protected int obterEndereco(String id) throws LabelException { - - LabelSymbol label = labels.get(id); - - if (label == null) - - throw new LabelException("O label referido não existe"); - - - return label.address; - - } - - protected static void verificarAumentoTamanhoMemoria(int indice) { - - if ( indice >= codigo.length ) { - - int tamanho = Math.max(indice, codigo.length) * 2; - byte[] novaMemoriaCodigo = new byte[tamanho]; - System.arraycopy(codigo, 0 , novaMemoriaCodigo, 0, codigo.length); - codigo = novaMemoriaCodigo; - - } - - } - - - public static void escreverInteiro(byte[] bytes, int indice, int valor) { - - verificarAumentoTamanhoMemoria(ip + 4); - - bytes[indice + 0] = (byte)((valor >> (8 * 3)) & 0xFF); - bytes[indice + 1] = (byte)((valor >> (8 * 2)) & 0xFF); - bytes[indice + 2] = (byte)((valor >> (8 * 1)) & 0xFF); - bytes[indice + 3] = (byte)(valor & 0xFF); - - ip += 4; - - } - - public static int obterInteiro(byte[] memoria, int indice) { - - int b1 = memoria[indice++]&0xFF; - int b2 = memoria[indice++]&0xFF; - int b3 = memoria[indice++]&0xFF; - int b4 = memoria[indice++]&0xFF; - int palavra = b1<<(8*3) | b2<<(8*2) | b3<<(8*1) | b4; - return palavra; - - } - - - public byte[] obterCodigoMaquina() { - - return codigo; - - } - - public int obterTamanhoMemoriaCodigo() { - - return ip; - - } - - public int getTamMemoriaGlobalReferencias() { - return tamMemoriaGlobalReferencias; - } - - public void setTamMemoriaGlobalReferencias(int tamMemoriaGlobalReferencias) { - this.tamMemoriaGlobalReferencias = tamMemoriaGlobalReferencias; - } - - public int getTamMemoriaGlobal() { - return tamMemoriaGlobal; - } - - public void setTamMemoriaGlobal( - int tamMemoriaGlobal) { - this.tamMemoriaGlobal = tamMemoriaGlobal; - } - - public int getTamMemoriaGlobalEstruturas() { - return tamMemoriaGlobalEstruturas; - } - - public void setTamMemoriaGlobalEstruturas(int tamMemoriaGlobalEstruturas) { - this.tamMemoriaGlobalEstruturas = tamMemoriaGlobalEstruturas; - } - -} +package br.ufpb.iged.interpretador.bytecodeassembler.asm; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.antlr.runtime.TokenStream; + +import org.antlr.runtime.Token; + +import br.ufpb.iged.interpretador.parser.AssemblerParser; +import br.ufpb.iged.interpretador.excecoes.AcessoIndevidoMemoriaException; +import br.ufpb.iged.interpretador.excecoes.LabelException; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloLabel; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; + +public class BytecodeAssembler extends AssemblerParser{ + + public static final int TAMANHO_INICIAL_MEMORIA_CODIGO = 1024; + public static final int TAMANHO_INICIAL_MEMORIA_GLOBAL = 1024; + + protected Map opcodesInstrucoes = + new HashMap(); + + protected Map enderecosMap = + new HashMap(); + + protected List constantPool = new ArrayList(); + + private SimboloMetodo metodoAtual; + + public static int ip = 0; + public static byte[] codigo; + protected int tamMemoriaGlobalEstruturas = 0; + protected int tamMemoriaGlobalReferencias = 0; + protected int tamMemoriaGlobal = 0; + protected int idProximaClasse = 0; + + public BytecodeAssembler(TokenStream lexer, Definicao.Instrucao[] instrucoes) { + + super(lexer); + + for (int i = 1; i < instrucoes.length; i++) { + + opcodesInstrucoes.put(instrucoes[i].nome, instrucoes[i].opcode); + + } + + } + + public void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException { + + String opcodeTxt = opc.getText(); + + if (opcodeTxt.contains("0")) { + + if (tamMemoriaGlobal == 0) + + tamMemoriaGlobal++; + + } else if (opcodeTxt.contains("1")) { + + if (tamMemoriaGlobal == 1) + + tamMemoriaGlobal++; + + else if (tamMemoriaGlobal < 1) + + throw new AcessoIndevidoMemoriaException(); + + } else if (opcodeTxt.contains("2")) { + + if (tamMemoriaGlobal == 2) + + tamMemoriaGlobal++; + + else if (tamMemoriaGlobal < 2) + + throw new AcessoIndevidoMemoriaException(); + + } else if (opcodeTxt.contains("3")) { + + if (tamMemoriaGlobal == 3) + + tamMemoriaGlobal++; + + else if (tamMemoriaGlobal < 3) + + throw new AcessoIndevidoMemoriaException(); + + } + + escreverOpcode(opc.getText()); + + } + + public void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException { + + Integer endereco = new Integer(op.getText()); + + if (tamMemoriaGlobal == endereco) + + tamMemoriaGlobal++; + + else if (tamMemoriaGlobal < endereco) + + throw new AcessoIndevidoMemoriaException(); + + escreverOpcode(opc, op); + + } + + public void escreverOpcode(String nomeInstrucao) { + + Integer opcode = opcodesInstrucoes.get(nomeInstrucao); + + verificarAumentoTamanhoMemoria(ip + 1); + + codigo[ip++] = (byte)(opcode.intValue() & 0xFF); + + + } + + + public void escreverOpcode(Token opc, Token op) throws LabelException { + + escreverOpcode(opc.getText()); + + escreverOperando(op); + + } + + public void escreverOperando(Token token) throws LabelException { + + int valor = 0; + + String operandoTxt = token.getText(); + + switch(token.getType()) { + + case INTEIRO: valor = new Integer(operandoTxt);break; + case ID: valor = obterEndereco(operandoTxt);break; + + } + + escreverInteiro(codigo, ip, valor); + + } + + protected int obterEndereco(String id) throws LabelException { + + SimboloLabel label = metodoAtual.getLabels().get(id); + + if (label == null) + + throw new LabelException("O label referido não existe"); + + + return label.endereco; + + } + + protected static void verificarAumentoTamanhoMemoria(int indice) { + + if ( indice >= codigo.length ) { + + int tamanho = Math.max(indice, codigo.length) * 2; + byte[] novaMemoriaCodigo = new byte[tamanho]; + System.arraycopy(codigo, 0 , novaMemoriaCodigo, 0, codigo.length); + codigo = novaMemoriaCodigo; + + } + + } + + + public static void escreverInteiro(byte[] bytes, int indice, int valor) { + + verificarAumentoTamanhoMemoria(ip + 4); + + bytes[indice + 0] = (byte)((valor >> (8 * 3)) & 0xFF); + bytes[indice + 1] = (byte)((valor >> (8 * 2)) & 0xFF); + bytes[indice + 2] = (byte)((valor >> (8 * 1)) & 0xFF); + bytes[indice + 3] = (byte)(valor & 0xFF); + + ip += 4; + + } + + public static int obterInteiro(byte[] memoria, int indice) { + + int b1 = memoria[indice++]&0xFF; + int b2 = memoria[indice++]&0xFF; + int b3 = memoria[indice++]&0xFF; + int b4 = memoria[indice++]&0xFF; + int palavra = b1<<(8*3) | b2<<(8*2) | b3<<(8*1) | b4; + return palavra; + + } + + + public byte[] obterCodigoMaquina() { + + return codigo; + + } + + public int obterTamanhoMemoriaCodigo() { + + return ip; + + } + + public int getTamMemoriaGlobalReferencias() { + return tamMemoriaGlobalReferencias; + } + + public void setTamMemoriaGlobalReferencias(int tamMemoriaGlobalReferencias) { + this.tamMemoriaGlobalReferencias = tamMemoriaGlobalReferencias; + } + + public int getTamMemoriaGlobal() { + return tamMemoriaGlobal; + } + + public void setTamMemoriaGlobal( + int tamMemoriaGlobal) { + this.tamMemoriaGlobal = tamMemoriaGlobal; + } + + public int getTamMemoriaGlobalEstruturas() { + return tamMemoriaGlobalEstruturas; + } + + public void setTamMemoriaGlobalEstruturas(int tamMemoriaGlobalEstruturas) { + this.tamMemoriaGlobalEstruturas = tamMemoriaGlobalEstruturas; + } + + public List getConstantPool() { + return constantPool; + } + + public void setConstantPool(List constantPool) { + this.constantPool = constantPool; + } + + public SimboloMetodo getMetodoAtual() { + return metodoAtual; + } + + public void setMetodoAtual(SimboloMetodo metodoAtual) { + this.metodoAtual = metodoAtual; + } + +} diff --git a/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.java b/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.java old mode 100644 new mode 100755 index c2c4df8..1a41ef7 --- a/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.java +++ b/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/Definicao.java @@ -1,138 +1,186 @@ -package br.ufpb.iged.interpretador.bytecodeassembler.asm; - -import br.ufpb.iged.interpretador.bytecodeassembler.parser.AssemblerParser; - -public class Definicao { - - public static final int NOP = 0x0; - - public static final int ICONSTM1 = 0x2; - public static final int ICONST0 = 0x3; - public static final int ICONST1 = 0x4; - public static final int ICONST2 = 0x5; - public static final int ICONST3 = 0x6; - public static final int ICONST4 = 0x7; - public static final int ICONST5 = 0x8; - public static final int LDC = 0x12; - public static final int ILOAD = 0x15; - public static final int ILOAD0 = 0x1A; - public static final int ILOAD1 = 0x1B; - public static final int ILOAD2 = 0x1C; - public static final int ILOAD3 = 0x1D; - public static final int ISTORE = 0x36; - public static final int ISTORE0 = 0x3B; - public static final int ISTORE1 = 0x3C; - public static final int ISTORE2 = 0x3D; - public static final int ISTORE3 = 0x3E; - public static final int POP = 0x57; - public static final int POP2 = 0x58; - public static final int IADD = 0x60; - public static final int ISUB = 0x64; - public static final int IMUL = 0x68; - public static final int IDIV = 0x6C; - public static final int IREM = 0x70; - public static final int INEG = 0x74; - public static final int IAND = 0x7E; - public static final int IOR = 0x80; - public static final int IXOR = 0x82; - public static final int IINC = 0x84; - public static final int IFEQ = 0x99; - public static final int IFNE = 0x9A; - public static final int IFLT = 0x9B; - public static final int IFGE = 0x9C; - public static final int IFGT = 0x9D; - public static final int IFLE = 0x9E; - public static final int IF_ICMPEQ = 0x9F; - public static final int IF_ICMPNE = 0xA0; - public static final int IF_ICMPLT = 0xA1; - public static final int IF_ICMPGE = 0xA2; - public static final int IF_ICMPGT = 0xA3; - public static final int IF_ICMPLE = 0xA4; - public static final int GOTO = 0xA7; - - public static final int ID = AssemblerParser.ID; - public static final int INT= AssemblerParser.INT; - public static final int NOVA_LINHA = AssemblerParser.NOVA_LINHA; - public static final int NULL = AssemblerParser.NULL; - public static final int WS = AssemblerParser.WS; - - - public static class Instrucao { - - String nome; - - int tipo; - - int opcode; - - int n = 0; - - public Instrucao (String nome, int opcode) { - - this (nome, 0, opcode); - - } - - public Instrucao (String nome, int a, int opcode) { - - this.nome = nome; - - tipo = a; - - this.opcode = opcode; - - } - - - } - - public static Instrucao[] instrucoes = new Instrucao[] { null, - new Instrucao("nop", Definicao.NOP), - new Instrucao("iconst_m1", Definicao.ICONSTM1), - new Instrucao("iconst_0", Definicao.ICONST0), - new Instrucao("iconst_1", Definicao.ICONST1), - new Instrucao("iconst_2", Definicao.ICONST2), - new Instrucao("iconst_3", Definicao.ICONST3), - new Instrucao("iconst_4", Definicao.ICONST4), - new Instrucao("iconst_5", Definicao.ICONST5), - new Instrucao("ldc", INT, Definicao.LDC), - new Instrucao("iload", INT, Definicao.ILOAD), - new Instrucao("iload_0", Definicao.ILOAD0), - new Instrucao("iload_1", Definicao.ILOAD1), - new Instrucao("iload_2", Definicao.ILOAD2), - new Instrucao("iload_3", Definicao.ILOAD3), - new Instrucao("istore", INT, Definicao.ISTORE), - new Instrucao("istore_0", Definicao.ISTORE0), - new Instrucao("istore_1", Definicao.ISTORE1), - new Instrucao("istore_2", Definicao.ISTORE2), - new Instrucao("istore_3", Definicao.ISTORE3), - new Instrucao("pop", Definicao.POP), - new Instrucao("pop2", Definicao.POP2), - new Instrucao("iadd", Definicao.IADD), - new Instrucao("isub", Definicao.ISUB), - new Instrucao("imul", Definicao.IMUL), - new Instrucao("idiv", Definicao.IDIV), - new Instrucao("irem", Definicao.IREM), - new Instrucao("ineg", Definicao.INEG), - new Instrucao("iand", Definicao.IADD), - new Instrucao("ior", Definicao.IOR), - new Instrucao("ixor", Definicao.IXOR), - new Instrucao("iinc", Definicao.IINC), - new Instrucao("ifeq", ID, Definicao.IFEQ), - new Instrucao("ifne", ID, Definicao.IFNE), - new Instrucao("iflt", ID, Definicao.IFLT), - new Instrucao("ifge", ID, Definicao.IFGE), - new Instrucao("ifgt", ID, Definicao.IFGT), - new Instrucao("ifle", ID, Definicao.IFLE), - new Instrucao("if_icmpeq", ID, Definicao.IF_ICMPEQ), - new Instrucao("if_icmpne", ID, Definicao.IF_ICMPNE), - new Instrucao("if_icmplt", ID, Definicao.IF_ICMPLT), - new Instrucao("if_icmpge", ID, Definicao.IF_ICMPGE), - new Instrucao("if_icmpgt", ID, Definicao.IF_ICMPGT), - new Instrucao("if_icmple", ID, Definicao.IF_ICMPLE), - new Instrucao("goto", ID, Definicao.GOTO) - - }; - - -} +package br.ufpb.iged.interpretador.bytecodeassembler.asm; + +import br.ufpb.iged.interpretador.parser.AssemblerParser; + +public class Definicao { + + public static final int NOP = 0x0; + public static final int ACONSTNULL = 0x1; + public static final int ICONSTM1 = 0x2; + public static final int ICONST0 = 0x3; + public static final int ICONST1 = 0x4; + public static final int ICONST2 = 0x5; + public static final int ICONST3 = 0x6; + public static final int ICONST4 = 0x7; + public static final int ICONST5 = 0x8; + public static final int LDC = 0x12; + public static final int ILOAD = 0x15; + public static final int ILOAD0 = 0x1A; + public static final int ILOAD1 = 0x1B; + public static final int ILOAD2 = 0x1C; + public static final int ILOAD3 = 0x1D; + public static final int ISTORE = 0x36; + public static final int ISTORE0 = 0x3B; + public static final int ISTORE1 = 0x3C; + public static final int ISTORE2 = 0x3D; + public static final int ISTORE3 = 0x3E; + public static final int POP = 0x57; + public static final int POP2 = 0x58; + public static final int DUP = 0x59; + public static final int IADD = 0x60; + public static final int ISUB = 0x64; + public static final int IMUL = 0x68; + public static final int IDIV = 0x6C; + public static final int IREM = 0x70; + public static final int INEG = 0x74; + public static final int IAND = 0x7E; + public static final int IOR = 0x80; + public static final int IXOR = 0x82; + public static final int IINC = 0x84; + public static final int IFEQ = 0x99; + public static final int IFNE = 0x9A; + public static final int IFLT = 0x9B; + public static final int IFGE = 0x9C; + public static final int IFGT = 0x9D; + public static final int IFLE = 0x9E; + public static final int IF_ICMPEQ = 0x9F; + public static final int IF_ICMPNE = 0xA0; + public static final int IF_ICMPLT = 0xA1; + public static final int IF_ICMPGE = 0xA2; + public static final int IF_ICMPGT = 0xA3; + public static final int IF_ICMPLE = 0xA4; + public static final int GOTO = 0xA7; + public static final int ALOAD = 0x19; + public static final int ALOAD0 = 0x2a; + public static final int ALOAD1 = 0x2b; + public static final int ALOAD2 = 0x2c; + public static final int ALOAD3 = 0x2d; + public static final int ASTORE = 0x3a; + public static final int ASTORE0 = 0x4b; + public static final int ASTORE1 = 0x4c; + public static final int ASTORE2 = 0x4d; + public static final int ASTORE3 = 0x4e; + public static final int IRETURN = 0xac; + public static final int ARETURN = 0xb0; + public static final int RETURN = 0xb1; + public static final int GETSTATIC = 0xb2; + public static final int PUTSTATIC = 0xb3; + public static final int GETFIELD = 0xb4; + public static final int PUTFIELD = 0xb5; + public static final int INVOKEVIRTUAL = 0xb6; + public static final int INVOKESPECIAL = 0xb7; + public static final int INVOKESTATIC = 0xb8; + public static final int NEW = 0xbb; + + public static final int ID = AssemblerParser.ID; + public static final int INT= AssemblerParser.INT; + public static final int NOVA_LINHA = AssemblerParser.NEWLINE; + public static final int NULL = AssemblerParser.NULL; + public static final int WS = AssemblerParser.WS; + + + public static class Instrucao { + + String nome; + + int tipo1; + + int tipo2; + + int opcode; + + int n = 0; + + public Instrucao (String nome, int opcode) { + + this (nome, 0, opcode); + + } + + + public Instrucao (String nome, int a, int opcode) { + + this.nome = nome; + + tipo1 = a; + + this.opcode = opcode; + + } + + + } + + public static Instrucao[] instrucoes = new Instrucao[] { null, + new Instrucao("nop", Definicao.NOP), + new Instrucao("aconst_null", Definicao.ACONSTNULL), + new Instrucao("iconst_m1", Definicao.ICONSTM1), + new Instrucao("iconst_0", Definicao.ICONST0), + new Instrucao("iconst_1", Definicao.ICONST1), + new Instrucao("iconst_2", Definicao.ICONST2), + new Instrucao("iconst_3", Definicao.ICONST3), + new Instrucao("iconst_4", Definicao.ICONST4), + new Instrucao("iconst_5", Definicao.ICONST5), + new Instrucao("ldc", INT, Definicao.LDC), + new Instrucao("iload", INT, Definicao.ILOAD), + new Instrucao("iload_0", Definicao.ILOAD0), + new Instrucao("iload_1", Definicao.ILOAD1), + new Instrucao("iload_2", Definicao.ILOAD2), + new Instrucao("iload_3", Definicao.ILOAD3), + new Instrucao("istore", INT, Definicao.ISTORE), + new Instrucao("istore_0", Definicao.ISTORE0), + new Instrucao("istore_1", Definicao.ISTORE1), + new Instrucao("istore_2", Definicao.ISTORE2), + new Instrucao("istore_3", Definicao.ISTORE3), + new Instrucao("pop", Definicao.POP), + new Instrucao("pop2", Definicao.POP2), + new Instrucao("dup", Definicao.DUP), + new Instrucao("iadd", Definicao.IADD), + new Instrucao("isub", Definicao.ISUB), + new Instrucao("imul", Definicao.IMUL), + new Instrucao("idiv", Definicao.IDIV), + new Instrucao("irem", Definicao.IREM), + new Instrucao("ineg", Definicao.INEG), + new Instrucao("iand", Definicao.IADD), + new Instrucao("ior", Definicao.IOR), + new Instrucao("ixor", Definicao.IXOR), + new Instrucao("iinc", Definicao.IINC), + new Instrucao("ifeq", ID, Definicao.IFEQ), + new Instrucao("ifne", ID, Definicao.IFNE), + new Instrucao("iflt", ID, Definicao.IFLT), + new Instrucao("ifge", ID, Definicao.IFGE), + new Instrucao("ifgt", ID, Definicao.IFGT), + new Instrucao("ifle", ID, Definicao.IFLE), + new Instrucao("if_icmpeq", ID, Definicao.IF_ICMPEQ), + new Instrucao("if_icmpne", ID, Definicao.IF_ICMPNE), + new Instrucao("if_icmplt", ID, Definicao.IF_ICMPLT), + new Instrucao("if_icmpge", ID, Definicao.IF_ICMPGE), + new Instrucao("if_icmpgt", ID, Definicao.IF_ICMPGT), + new Instrucao("if_icmple", ID, Definicao.IF_ICMPLE), + new Instrucao("goto", ID, Definicao.GOTO), + new Instrucao("aload", Definicao.ALOAD), + new Instrucao("aload_0", Definicao.ALOAD0), + new Instrucao("aload_1", Definicao.ALOAD1), + new Instrucao("aload_2", Definicao.ALOAD2), + new Instrucao("aload_3", Definicao.ALOAD3), + new Instrucao("astore", Definicao.ASTORE), + new Instrucao("astore_0", Definicao.ASTORE0), + new Instrucao("astore_1", Definicao.ASTORE1), + new Instrucao("astore_2", Definicao.ASTORE2), + new Instrucao("astore_3", Definicao.ASTORE3), + new Instrucao("ireturn", Definicao.IRETURN), + new Instrucao("areturn", Definicao.ARETURN), + new Instrucao("return", Definicao.RETURN), + new Instrucao("getstatic", Definicao.GETSTATIC), + new Instrucao("putstatic", Definicao.PUTSTATIC), + new Instrucao("getfield", Definicao.GETFIELD), + new Instrucao("putfield", Definicao.PUTFIELD), + new Instrucao("invokevirtual", Definicao.INVOKEVIRTUAL), + new Instrucao("invokespecial", Definicao.INVOKESPECIAL), + new Instrucao("invokestatic", Definicao.INVOKESTATIC), + new Instrucao("new", Definicao.NEW) + + }; + + +} diff --git a/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/LabelSymbol.java b/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/LabelSymbol.java deleted file mode 100644 index e16c537..0000000 --- a/src/br/ufpb/iged/interpretador/bytecodeassembler/asm/LabelSymbol.java +++ /dev/null @@ -1,76 +0,0 @@ -/*** - * Excerpted from "Language Implementation Patterns", - * published by The Pragmatic Bookshelf. - * Copyrights apply to this code. It may not be used to create training material, - * courses, books, articles, and the like. Contact us if you are in doubt. - * We make no guarantees that this code is fit for any purpose. - * Visit http://www.pragmaticprogrammer.com/titles/tpdsl for more book information. - ***/ - -package br.ufpb.iged.interpretador.bytecodeassembler.asm; - -import java.util.*; - -public class LabelSymbol { - String name; - - /** Address in code memory */ - int address; - - /** Is this ref'd before def'd. */ - boolean isForwardRef = false; - - /** Set when we see actual ID: definition */ - boolean isDefined = true; - - /** List of operands in memory we need to update after seeing def */ - Vector forwardReferences = null; - - public LabelSymbol(String name) { - this.name = name; - } - - public LabelSymbol(String name, int address) { - this(name); - this.address = address; - } - - public LabelSymbol(String name, int address, boolean forward) { - this(name); - isForwardRef = forward; - if (forward) { - // if forward reference, then address is address to update - addForwardReference(address); - } else { - this.address = address; - } - } - - public void addForwardReference(int address) { - if (forwardReferences == null) { - forwardReferences = new Vector(); - } - forwardReferences.addElement(new Integer(address)); - } - - public void resolveForwardReferences(byte[] code) { - isForwardRef = false; - // need to patch up all references to this symbol - Vector opndsToPatch = forwardReferences; - for (int addrToPatch : opndsToPatch) { - /* - * System.out.println("updating operand at addr "+ - * addr+" to be "+getAddress()); - */ - BytecodeAssembler.escreverInteiro(code, addrToPatch, address); - } - } - - public String toString() { - String refs = ""; - if (forwardReferences != null) { - refs = "[refs=" + forwardReferences.toString() + "]"; - } - return name + "@" + address + refs; - } -} \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/bytecodeassembler/grammars/Assembler.g b/src/br/ufpb/iged/interpretador/bytecodeassembler/grammars/Assembler.g deleted file mode 100644 index 1d69b2a..0000000 --- a/src/br/ufpb/iged/interpretador/bytecodeassembler/grammars/Assembler.g +++ /dev/null @@ -1,86 +0,0 @@ -grammar Assembler; - -@members { - - protected void escreverOpcode(Token opc); - protected void escreverOpcode(Token opc, Token op) throws LabelException; - protected void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException; - protected void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException; - protected void definirLabel(Token id) throws LabelException; - -} - -programa : comando* - ; - -comando : (label instrucao | instrucao); - -label : a = ID ':' {definirLabel($a);}; - -instrucao: (aritmetica | load | store | desvio | logica | 'nop' - | a = 'pop' {escreverOpcode($a);} - | a = 'pop2'{escreverOpcode($a);} - )? NOVA_LINHA; - -aritmetica : a = 'iadd' {escreverOpcode($a);} - | a = 'isub' {escreverOpcode($a);} - | a = 'imul' {escreverOpcode($a);} - | a = 'idiv' {escreverOpcode($a);} - | a = 'irem' {escreverOpcode($a);} - | a = 'iinc' {escreverOpcode($a);} - | a = 'ineg' {escreverOpcode($a);} - ; - -load : a = 'iconst_m1'{escreverOpcode($a);} - | a = 'iconst_0' {escreverOpcode($a);} - | a = 'iconst_1' {escreverOpcode($a);} - | a = 'iconst_2' {escreverOpcode($a);} - | a = 'iconst_3'{escreverOpcode($a);} - | a = 'iconst_4'{escreverOpcode($a);} - | a = 'iconst_5'{escreverOpcode($a);} - | a = 'iload_0' {escreverOpcode($a);} - | a = 'iload_1' {escreverOpcode($a);} - | a = 'iload_2' {escreverOpcode($a);} - | a = 'iload_3' {escreverOpcode($a);} - | a = 'iload' INT {escreverOpcode($a, $INT);} - | a = 'ldc' INT {escreverOpcode($a, $INT);} - ; - -store : a = 'istore_0' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore_1' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore_2' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore_3' {verificarAumentoMemoriaGlobal($a);} - | a = 'istore' INT {verificarAumentoMemoriaGlobal($a, $INT);} - ; - -logica : a = 'iand' {escreverOpcode($a);} - | a = 'ior' {escreverOpcode($a);} - | a = 'ixor' {escreverOpcode($a);} - ; - -desvio : a = 'ifeq' b = ID {escreverOpcode($a, $b);} - | a = 'ifne' b = ID {escreverOpcode($a, $b);} - | a = 'iflt' b = ID {escreverOpcode($a, $b);} - | a = 'ifge' b = ID {escreverOpcode($a, $b);} - | a = 'ifgt' b = ID {escreverOpcode($a, $b);} - | a = 'ifle' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpeq' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpne' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmplt' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpge' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmpgt' b = ID {escreverOpcode($a, $b);} - | a = 'if_icmple' b = ID {escreverOpcode($a, $b);} - | a = 'goto' b = ID {escreverOpcode($a, $b);} - ; - -NULL: ('null' | 'NULL'); - -INT : '-'? '0'..'9'+ ; - -ID: ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '.')* ; - -//LETRA: ('a'..'z' | 'A'..'Z'); - -NOVA_LINHA : ';'; - -WS : (' ' | '\t' | '\r' | '\n') {skip();} ; \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/bytecodeassembler/parser/Assembler.tokens b/src/br/ufpb/iged/interpretador/bytecodeassembler/parser/Assembler.tokens deleted file mode 100644 index 0e0aa1f..0000000 --- a/src/br/ufpb/iged/interpretador/bytecodeassembler/parser/Assembler.tokens +++ /dev/null @@ -1,95 +0,0 @@ -T__9=9 -T__10=10 -T__11=11 -T__12=12 -T__13=13 -T__14=14 -T__15=15 -T__16=16 -T__17=17 -T__18=18 -T__19=19 -T__20=20 -T__21=21 -T__22=22 -T__23=23 -T__24=24 -T__25=25 -T__26=26 -T__27=27 -T__28=28 -T__29=29 -T__30=30 -T__31=31 -T__32=32 -T__33=33 -T__34=34 -T__35=35 -T__36=36 -T__37=37 -T__38=38 -T__39=39 -T__40=40 -T__41=41 -T__42=42 -T__43=43 -T__44=44 -T__45=45 -T__46=46 -T__47=47 -T__48=48 -T__49=49 -T__50=50 -T__51=51 -T__52=52 -T__53=53 -ID=4 -INT=5 -NOVA_LINHA=6 -NULL=7 -WS=8 -':'=9 -'goto'=10 -'iadd'=11 -'iand'=12 -'iconst_0'=13 -'iconst_1'=14 -'iconst_2'=15 -'iconst_3'=16 -'iconst_4'=17 -'iconst_5'=18 -'iconst_m1'=19 -'idiv'=20 -'if_icmpeq'=21 -'if_icmpge'=22 -'if_icmpgt'=23 -'if_icmple'=24 -'if_icmplt'=25 -'if_icmpne'=26 -'ifeq'=27 -'ifge'=28 -'ifgt'=29 -'ifle'=30 -'iflt'=31 -'ifne'=32 -'iinc'=33 -'iload'=34 -'iload_0'=35 -'iload_1'=36 -'iload_2'=37 -'iload_3'=38 -'imul'=39 -'ineg'=40 -'ior'=41 -'irem'=42 -'istore'=43 -'istore_0'=44 -'istore_1'=45 -'istore_2'=46 -'istore_3'=47 -'isub'=48 -'ixor'=49 -'ldc'=50 -'nop'=51 -'pop'=52 -'pop2'=53 diff --git a/src/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer.java b/src/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer.java deleted file mode 100644 index 75da9e1..0000000 --- a/src/br/ufpb/iged/interpretador/bytecodeassembler/parser/AssemblerLexer.java +++ /dev/null @@ -1,1988 +0,0 @@ -// $ANTLR 3.4 C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g 2012-04-18 17:32:19 - -package br.ufpb.iged.interpretador.bytecodeassembler.parser; - -import org.antlr.runtime.*; -import java.util.Stack; -import java.util.List; -import java.util.ArrayList; - -@SuppressWarnings({"all", "warnings", "unchecked"}) -public class AssemblerLexer extends Lexer { - public static final int EOF=-1; - public static final int T__9=9; - public static final int T__10=10; - public static final int T__11=11; - public static final int T__12=12; - public static final int T__13=13; - public static final int T__14=14; - public static final int T__15=15; - public static final int T__16=16; - public static final int T__17=17; - public static final int T__18=18; - public static final int T__19=19; - public static final int T__20=20; - public static final int T__21=21; - public static final int T__22=22; - public static final int T__23=23; - public static final int T__24=24; - public static final int T__25=25; - public static final int T__26=26; - public static final int T__27=27; - public static final int T__28=28; - public static final int T__29=29; - public static final int T__30=30; - public static final int T__31=31; - public static final int T__32=32; - public static final int T__33=33; - public static final int T__34=34; - public static final int T__35=35; - public static final int T__36=36; - public static final int T__37=37; - public static final int T__38=38; - public static final int T__39=39; - public static final int T__40=40; - public static final int T__41=41; - public static final int T__42=42; - public static final int T__43=43; - public static final int T__44=44; - public static final int T__45=45; - public static final int T__46=46; - public static final int T__47=47; - public static final int T__48=48; - public static final int T__49=49; - public static final int T__50=50; - public static final int T__51=51; - public static final int T__52=52; - public static final int T__53=53; - public static final int ID=4; - public static final int INT=5; - public static final int NOVA_LINHA=6; - public static final int NULL=7; - public static final int WS=8; - - // delegates - // delegators - public Lexer[] getDelegates() { - return new Lexer[] {}; - } - - public AssemblerLexer() {} - public AssemblerLexer(CharStream input) { - this(input, new RecognizerSharedState()); - } - public AssemblerLexer(CharStream input, RecognizerSharedState state) { - super(input,state); - } - public String getGrammarFileName() { return "C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g"; } - - // $ANTLR start "T__9" - public final void mT__9() throws RecognitionException { - try { - int _type = T__9; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:2:6: ( ':' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:2:8: ':' - { - match(':'); - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__9" - - // $ANTLR start "T__10" - public final void mT__10() throws RecognitionException { - try { - int _type = T__10; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:3:7: ( 'goto' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:3:9: 'goto' - { - match("goto"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__10" - - // $ANTLR start "T__11" - public final void mT__11() throws RecognitionException { - try { - int _type = T__11; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:4:7: ( 'iadd' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:4:9: 'iadd' - { - match("iadd"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__11" - - // $ANTLR start "T__12" - public final void mT__12() throws RecognitionException { - try { - int _type = T__12; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:5:7: ( 'iand' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:5:9: 'iand' - { - match("iand"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__12" - - // $ANTLR start "T__13" - public final void mT__13() throws RecognitionException { - try { - int _type = T__13; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:6:7: ( 'iconst_0' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:6:9: 'iconst_0' - { - match("iconst_0"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__13" - - // $ANTLR start "T__14" - public final void mT__14() throws RecognitionException { - try { - int _type = T__14; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:7:7: ( 'iconst_1' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:7:9: 'iconst_1' - { - match("iconst_1"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__14" - - // $ANTLR start "T__15" - public final void mT__15() throws RecognitionException { - try { - int _type = T__15; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:8:7: ( 'iconst_2' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:8:9: 'iconst_2' - { - match("iconst_2"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__15" - - // $ANTLR start "T__16" - public final void mT__16() throws RecognitionException { - try { - int _type = T__16; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:9:7: ( 'iconst_3' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:9:9: 'iconst_3' - { - match("iconst_3"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__16" - - // $ANTLR start "T__17" - public final void mT__17() throws RecognitionException { - try { - int _type = T__17; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:10:7: ( 'iconst_4' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:10:9: 'iconst_4' - { - match("iconst_4"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__17" - - // $ANTLR start "T__18" - public final void mT__18() throws RecognitionException { - try { - int _type = T__18; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:11:7: ( 'iconst_5' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:11:9: 'iconst_5' - { - match("iconst_5"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__18" - - // $ANTLR start "T__19" - public final void mT__19() throws RecognitionException { - try { - int _type = T__19; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:12:7: ( 'iconst_m1' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:12:9: 'iconst_m1' - { - match("iconst_m1"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__19" - - // $ANTLR start "T__20" - public final void mT__20() throws RecognitionException { - try { - int _type = T__20; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:13:7: ( 'idiv' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:13:9: 'idiv' - { - match("idiv"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__20" - - // $ANTLR start "T__21" - public final void mT__21() throws RecognitionException { - try { - int _type = T__21; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:14:7: ( 'if_icmpeq' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:14:9: 'if_icmpeq' - { - match("if_icmpeq"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__21" - - // $ANTLR start "T__22" - public final void mT__22() throws RecognitionException { - try { - int _type = T__22; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:15:7: ( 'if_icmpge' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:15:9: 'if_icmpge' - { - match("if_icmpge"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__22" - - // $ANTLR start "T__23" - public final void mT__23() throws RecognitionException { - try { - int _type = T__23; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:7: ( 'if_icmpgt' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:9: 'if_icmpgt' - { - match("if_icmpgt"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__23" - - // $ANTLR start "T__24" - public final void mT__24() throws RecognitionException { - try { - int _type = T__24; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:17:7: ( 'if_icmple' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:17:9: 'if_icmple' - { - match("if_icmple"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__24" - - // $ANTLR start "T__25" - public final void mT__25() throws RecognitionException { - try { - int _type = T__25; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:18:7: ( 'if_icmplt' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:18:9: 'if_icmplt' - { - match("if_icmplt"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__25" - - // $ANTLR start "T__26" - public final void mT__26() throws RecognitionException { - try { - int _type = T__26; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:19:7: ( 'if_icmpne' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:19:9: 'if_icmpne' - { - match("if_icmpne"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__26" - - // $ANTLR start "T__27" - public final void mT__27() throws RecognitionException { - try { - int _type = T__27; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:7: ( 'ifeq' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:9: 'ifeq' - { - match("ifeq"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__27" - - // $ANTLR start "T__28" - public final void mT__28() throws RecognitionException { - try { - int _type = T__28; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:21:7: ( 'ifge' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:21:9: 'ifge' - { - match("ifge"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__28" - - // $ANTLR start "T__29" - public final void mT__29() throws RecognitionException { - try { - int _type = T__29; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:22:7: ( 'ifgt' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:22:9: 'ifgt' - { - match("ifgt"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__29" - - // $ANTLR start "T__30" - public final void mT__30() throws RecognitionException { - try { - int _type = T__30; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:23:7: ( 'ifle' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:23:9: 'ifle' - { - match("ifle"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__30" - - // $ANTLR start "T__31" - public final void mT__31() throws RecognitionException { - try { - int _type = T__31; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:24:7: ( 'iflt' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:24:9: 'iflt' - { - match("iflt"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__31" - - // $ANTLR start "T__32" - public final void mT__32() throws RecognitionException { - try { - int _type = T__32; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:25:7: ( 'ifne' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:25:9: 'ifne' - { - match("ifne"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__32" - - // $ANTLR start "T__33" - public final void mT__33() throws RecognitionException { - try { - int _type = T__33; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:26:7: ( 'iinc' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:26:9: 'iinc' - { - match("iinc"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__33" - - // $ANTLR start "T__34" - public final void mT__34() throws RecognitionException { - try { - int _type = T__34; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:27:7: ( 'iload' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:27:9: 'iload' - { - match("iload"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__34" - - // $ANTLR start "T__35" - public final void mT__35() throws RecognitionException { - try { - int _type = T__35; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:28:7: ( 'iload_0' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:28:9: 'iload_0' - { - match("iload_0"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__35" - - // $ANTLR start "T__36" - public final void mT__36() throws RecognitionException { - try { - int _type = T__36; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:29:7: ( 'iload_1' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:29:9: 'iload_1' - { - match("iload_1"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__36" - - // $ANTLR start "T__37" - public final void mT__37() throws RecognitionException { - try { - int _type = T__37; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:30:7: ( 'iload_2' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:30:9: 'iload_2' - { - match("iload_2"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__37" - - // $ANTLR start "T__38" - public final void mT__38() throws RecognitionException { - try { - int _type = T__38; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:31:7: ( 'iload_3' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:31:9: 'iload_3' - { - match("iload_3"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__38" - - // $ANTLR start "T__39" - public final void mT__39() throws RecognitionException { - try { - int _type = T__39; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:32:7: ( 'imul' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:32:9: 'imul' - { - match("imul"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__39" - - // $ANTLR start "T__40" - public final void mT__40() throws RecognitionException { - try { - int _type = T__40; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:33:7: ( 'ineg' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:33:9: 'ineg' - { - match("ineg"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__40" - - // $ANTLR start "T__41" - public final void mT__41() throws RecognitionException { - try { - int _type = T__41; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:34:7: ( 'ior' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:34:9: 'ior' - { - match("ior"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__41" - - // $ANTLR start "T__42" - public final void mT__42() throws RecognitionException { - try { - int _type = T__42; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:35:7: ( 'irem' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:35:9: 'irem' - { - match("irem"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__42" - - // $ANTLR start "T__43" - public final void mT__43() throws RecognitionException { - try { - int _type = T__43; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:36:7: ( 'istore' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:36:9: 'istore' - { - match("istore"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__43" - - // $ANTLR start "T__44" - public final void mT__44() throws RecognitionException { - try { - int _type = T__44; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:37:7: ( 'istore_0' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:37:9: 'istore_0' - { - match("istore_0"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__44" - - // $ANTLR start "T__45" - public final void mT__45() throws RecognitionException { - try { - int _type = T__45; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:38:7: ( 'istore_1' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:38:9: 'istore_1' - { - match("istore_1"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__45" - - // $ANTLR start "T__46" - public final void mT__46() throws RecognitionException { - try { - int _type = T__46; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:39:7: ( 'istore_2' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:39:9: 'istore_2' - { - match("istore_2"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__46" - - // $ANTLR start "T__47" - public final void mT__47() throws RecognitionException { - try { - int _type = T__47; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:40:7: ( 'istore_3' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:40:9: 'istore_3' - { - match("istore_3"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__47" - - // $ANTLR start "T__48" - public final void mT__48() throws RecognitionException { - try { - int _type = T__48; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:41:7: ( 'isub' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:41:9: 'isub' - { - match("isub"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__48" - - // $ANTLR start "T__49" - public final void mT__49() throws RecognitionException { - try { - int _type = T__49; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:42:7: ( 'ixor' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:42:9: 'ixor' - { - match("ixor"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__49" - - // $ANTLR start "T__50" - public final void mT__50() throws RecognitionException { - try { - int _type = T__50; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:43:7: ( 'ldc' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:43:9: 'ldc' - { - match("ldc"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__50" - - // $ANTLR start "T__51" - public final void mT__51() throws RecognitionException { - try { - int _type = T__51; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:44:7: ( 'nop' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:44:9: 'nop' - { - match("nop"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__51" - - // $ANTLR start "T__52" - public final void mT__52() throws RecognitionException { - try { - int _type = T__52; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:45:7: ( 'pop' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:45:9: 'pop' - { - match("pop"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__52" - - // $ANTLR start "T__53" - public final void mT__53() throws RecognitionException { - try { - int _type = T__53; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:46:7: ( 'pop2' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:46:9: 'pop2' - { - match("pop2"); - - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "T__53" - - // $ANTLR start "NULL" - public final void mNULL() throws RecognitionException { - try { - int _type = NULL; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:76:5: ( ( 'null' | 'NULL' ) ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:76:7: ( 'null' | 'NULL' ) - { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:76:7: ( 'null' | 'NULL' ) - int alt1=2; - int LA1_0 = input.LA(1); - - if ( (LA1_0=='n') ) { - alt1=1; - } - else if ( (LA1_0=='N') ) { - alt1=2; - } - else { - NoViableAltException nvae = - new NoViableAltException("", 1, 0, input); - - throw nvae; - - } - switch (alt1) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:76:8: 'null' - { - match("null"); - - - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:76:17: 'NULL' - { - match("NULL"); - - - - } - break; - - } - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "NULL" - - // $ANTLR start "INT" - public final void mINT() throws RecognitionException { - try { - int _type = INT; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:78:5: ( ( '-' )? ( '0' .. '9' )+ ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:78:7: ( '-' )? ( '0' .. '9' )+ - { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:78:7: ( '-' )? - int alt2=2; - int LA2_0 = input.LA(1); - - if ( (LA2_0=='-') ) { - alt2=1; - } - switch (alt2) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:78:7: '-' - { - match('-'); - - } - break; - - } - - - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:78:12: ( '0' .. '9' )+ - int cnt3=0; - loop3: - do { - int alt3=2; - int LA3_0 = input.LA(1); - - if ( ((LA3_0 >= '0' && LA3_0 <= '9')) ) { - alt3=1; - } - - - switch (alt3) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g: - { - if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) { - input.consume(); - } - else { - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse; - } - - - } - break; - - default : - if ( cnt3 >= 1 ) break loop3; - EarlyExitException eee = - new EarlyExitException(3, input); - throw eee; - } - cnt3++; - } while (true); - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "INT" - - // $ANTLR start "ID" - public final void mID() throws RecognitionException { - try { - int _type = ID; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:80:3: ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' )* ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:80:5: ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' )* - { - if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { - input.consume(); - } - else { - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse; - } - - - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:80:27: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' )* - loop4: - do { - int alt4=2; - int LA4_0 = input.LA(1); - - if ( (LA4_0=='.'||(LA4_0 >= '0' && LA4_0 <= '9')||(LA4_0 >= 'A' && LA4_0 <= 'Z')||(LA4_0 >= 'a' && LA4_0 <= 'z')) ) { - alt4=1; - } - - - switch (alt4) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g: - { - if ( input.LA(1)=='.'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { - input.consume(); - } - else { - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse; - } - - - } - break; - - default : - break loop4; - } - } while (true); - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "ID" - - // $ANTLR start "NOVA_LINHA" - public final void mNOVA_LINHA() throws RecognitionException { - try { - int _type = NOVA_LINHA; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:84:12: ( ';' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:84:14: ';' - { - match(';'); - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "NOVA_LINHA" - - // $ANTLR start "WS" - public final void mWS() throws RecognitionException { - try { - int _type = WS; - int _channel = DEFAULT_TOKEN_CHANNEL; - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:86:4: ( ( ' ' | '\\t' | '\\r' | '\\n' ) ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:86:6: ( ' ' | '\\t' | '\\r' | '\\n' ) - { - if ( (input.LA(1) >= '\t' && input.LA(1) <= '\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) { - input.consume(); - } - else { - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse; - } - - - skip(); - - } - - state.type = _type; - state.channel = _channel; - } - finally { - // do for sure before leaving - } - } - // $ANTLR end "WS" - - public void mTokens() throws RecognitionException { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:8: ( T__9 | T__10 | T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | NULL | INT | ID | NOVA_LINHA | WS ) - int alt5=50; - alt5 = dfa5.predict(input); - switch (alt5) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:10: T__9 - { - mT__9(); - - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:15: T__10 - { - mT__10(); - - - } - break; - case 3 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:21: T__11 - { - mT__11(); - - - } - break; - case 4 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:27: T__12 - { - mT__12(); - - - } - break; - case 5 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:33: T__13 - { - mT__13(); - - - } - break; - case 6 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:39: T__14 - { - mT__14(); - - - } - break; - case 7 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:45: T__15 - { - mT__15(); - - - } - break; - case 8 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:51: T__16 - { - mT__16(); - - - } - break; - case 9 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:57: T__17 - { - mT__17(); - - - } - break; - case 10 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:63: T__18 - { - mT__18(); - - - } - break; - case 11 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:69: T__19 - { - mT__19(); - - - } - break; - case 12 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:75: T__20 - { - mT__20(); - - - } - break; - case 13 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:81: T__21 - { - mT__21(); - - - } - break; - case 14 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:87: T__22 - { - mT__22(); - - - } - break; - case 15 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:93: T__23 - { - mT__23(); - - - } - break; - case 16 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:99: T__24 - { - mT__24(); - - - } - break; - case 17 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:105: T__25 - { - mT__25(); - - - } - break; - case 18 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:111: T__26 - { - mT__26(); - - - } - break; - case 19 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:117: T__27 - { - mT__27(); - - - } - break; - case 20 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:123: T__28 - { - mT__28(); - - - } - break; - case 21 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:129: T__29 - { - mT__29(); - - - } - break; - case 22 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:135: T__30 - { - mT__30(); - - - } - break; - case 23 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:141: T__31 - { - mT__31(); - - - } - break; - case 24 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:147: T__32 - { - mT__32(); - - - } - break; - case 25 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:153: T__33 - { - mT__33(); - - - } - break; - case 26 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:159: T__34 - { - mT__34(); - - - } - break; - case 27 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:165: T__35 - { - mT__35(); - - - } - break; - case 28 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:171: T__36 - { - mT__36(); - - - } - break; - case 29 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:177: T__37 - { - mT__37(); - - - } - break; - case 30 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:183: T__38 - { - mT__38(); - - - } - break; - case 31 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:189: T__39 - { - mT__39(); - - - } - break; - case 32 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:195: T__40 - { - mT__40(); - - - } - break; - case 33 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:201: T__41 - { - mT__41(); - - - } - break; - case 34 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:207: T__42 - { - mT__42(); - - - } - break; - case 35 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:213: T__43 - { - mT__43(); - - - } - break; - case 36 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:219: T__44 - { - mT__44(); - - - } - break; - case 37 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:225: T__45 - { - mT__45(); - - - } - break; - case 38 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:231: T__46 - { - mT__46(); - - - } - break; - case 39 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:237: T__47 - { - mT__47(); - - - } - break; - case 40 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:243: T__48 - { - mT__48(); - - - } - break; - case 41 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:249: T__49 - { - mT__49(); - - - } - break; - case 42 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:255: T__50 - { - mT__50(); - - - } - break; - case 43 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:261: T__51 - { - mT__51(); - - - } - break; - case 44 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:267: T__52 - { - mT__52(); - - - } - break; - case 45 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:273: T__53 - { - mT__53(); - - - } - break; - case 46 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:279: NULL - { - mNULL(); - - - } - break; - case 47 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:284: INT - { - mINT(); - - - } - break; - case 48 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:288: ID - { - mID(); - - - } - break; - case 49 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:291: NOVA_LINHA - { - mNOVA_LINHA(); - - - } - break; - case 50 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:1:302: WS - { - mWS(); - - - } - break; - - } - - } - - - protected DFA5 dfa5 = new DFA5(this); - static final String DFA5_eotS = - "\2\uffff\6\11\4\uffff\27\11\1\uffff\10\11\1\106\4\11\1\113\1\114"+ - "\1\11\1\117\1\11\1\121\1\122\1\123\1\11\1\125\1\uffff\1\127\1\130"+ - "\1\131\1\132\1\133\1\134\1\135\1\11\1\137\1\140\1\uffff\1\141\1"+ - "\11\1\143\1\144\2\uffff\1\145\1\146\1\uffff\1\145\3\uffff\1\11\11"+ - "\uffff\1\152\3\uffff\1\11\4\uffff\1\11\3\uffff\1\163\33\uffff"; - static final String DFA5_eofS = - "\u0087\uffff"; - static final String DFA5_minS = - "\1\11\1\uffff\1\157\1\141\1\144\2\157\1\125\4\uffff\1\164\1\144"+ - "\1\157\1\151\1\137\1\156\1\157\1\165\1\145\1\162\1\145\1\164\1\157"+ - "\1\143\1\160\1\154\1\160\1\114\1\157\2\144\1\156\1\166\1\151\1\161"+ - "\3\145\1\143\1\141\1\154\1\147\1\56\1\155\1\157\1\142\1\162\2\56"+ - "\1\154\1\56\1\114\3\56\1\163\1\56\1\143\7\56\1\144\2\56\1\uffff"+ - "\1\56\1\162\2\56\2\uffff\2\56\1\uffff\1\56\3\uffff\1\164\1\uffff"+ - "\1\155\7\uffff\1\56\3\uffff\1\145\4\uffff\1\137\1\160\1\60\1\uffff"+ - "\1\56\1\60\1\145\4\uffff\1\60\11\uffff\2\145\11\uffff"; - static final String DFA5_maxS = - "\1\172\1\uffff\1\157\1\170\1\144\1\165\1\157\1\125\4\uffff\1\164"+ - "\1\156\1\157\1\151\2\156\1\157\1\165\1\145\1\162\1\145\1\165\1\157"+ - "\1\143\1\160\1\154\1\160\1\114\1\157\2\144\1\156\1\166\1\151\1\161"+ - "\2\164\1\145\1\143\1\141\1\154\1\147\1\172\1\155\1\157\1\142\1\162"+ - "\2\172\1\154\1\172\1\114\3\172\1\163\1\172\1\143\7\172\1\144\2\172"+ - "\1\uffff\1\172\1\162\2\172\2\uffff\2\172\1\uffff\1\172\3\uffff\1"+ - "\164\1\uffff\1\155\7\uffff\1\172\3\uffff\1\145\4\uffff\1\137\1\160"+ - "\1\63\1\uffff\1\172\1\155\1\156\4\uffff\1\63\11\uffff\2\164\11\uffff"; - static final String DFA5_acceptS = - "\1\uffff\1\1\6\uffff\1\57\1\60\1\61\1\62\72\uffff\1\41\4\uffff\1"+ - "\52\1\53\2\uffff\1\54\1\uffff\1\2\1\3\1\4\1\uffff\1\14\1\uffff\1"+ - "\23\1\24\1\25\1\26\1\27\1\30\1\31\1\uffff\1\37\1\40\1\42\1\uffff"+ - "\1\50\1\51\1\56\1\55\3\uffff\1\32\3\uffff\1\33\1\34\1\35\1\36\1"+ - "\uffff\1\43\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\15\2\uffff\1\22\1"+ - "\44\1\45\1\46\1\47\1\16\1\17\1\20\1\21"; - static final String DFA5_specialS = - "\u0087\uffff}>"; - static final String[] DFA5_transitionS = { - "\2\13\2\uffff\1\13\22\uffff\1\13\14\uffff\1\10\2\uffff\12\10"+ - "\1\1\1\12\5\uffff\15\11\1\7\14\11\6\uffff\6\11\1\2\1\11\1\3"+ - "\2\11\1\4\1\11\1\5\1\11\1\6\12\11", - "", - "\1\14", - "\1\15\1\uffff\1\16\1\17\1\uffff\1\20\2\uffff\1\21\2\uffff\1"+ - "\22\1\23\1\24\1\25\2\uffff\1\26\1\27\4\uffff\1\30", - "\1\31", - "\1\32\5\uffff\1\33", - "\1\34", - "\1\35", - "", - "", - "", - "", - "\1\36", - "\1\37\11\uffff\1\40", - "\1\41", - "\1\42", - "\1\43\5\uffff\1\44\1\uffff\1\45\4\uffff\1\46\1\uffff\1\47", - "\1\50", - "\1\51", - "\1\52", - "\1\53", - "\1\54", - "\1\55", - "\1\56\1\57", - "\1\60", - "\1\61", - "\1\62", - "\1\63", - "\1\64", - "\1\65", - "\1\66", - "\1\67", - "\1\70", - "\1\71", - "\1\72", - "\1\73", - "\1\74", - "\1\75\16\uffff\1\76", - "\1\77\16\uffff\1\100", - "\1\101", - "\1\102", - "\1\103", - "\1\104", - "\1\105", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\107", - "\1\110", - "\1\111", - "\1\112", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\115", - "\1\11\1\uffff\2\11\1\116\7\11\7\uffff\32\11\6\uffff\32\11", - "\1\120", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\124", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\126", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\136", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\142", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "", - "", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "", - "\1\11\1\uffff\12\11\7\uffff\32\11\6\uffff\32\11", - "", - "", - "", - "\1\147", - "", - "\1\150", - "", - "", - "", - "", - "", - "", - "", - "\1\11\1\uffff\12\11\7\uffff\32\11\4\uffff\1\151\1\uffff\32"+ - "\11", - "", - "", - "", - "\1\153", - "", - "", - "", - "", - "\1\154", - "\1\155", - "\1\156\1\157\1\160\1\161", - "", - "\1\11\1\uffff\12\11\7\uffff\32\11\4\uffff\1\162\1\uffff\32"+ - "\11", - "\1\164\1\165\1\166\1\167\1\170\1\171\67\uffff\1\172", - "\1\173\1\uffff\1\174\4\uffff\1\175\1\uffff\1\176", - "", - "", - "", - "", - "\1\177\1\u0080\1\u0081\1\u0082", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "\1\u0083\16\uffff\1\u0084", - "\1\u0085\16\uffff\1\u0086", - "", - "", - "", - "", - "", - "", - "", - "", - "" - }; - - static final short[] DFA5_eot = DFA.unpackEncodedString(DFA5_eotS); - static final short[] DFA5_eof = DFA.unpackEncodedString(DFA5_eofS); - static final char[] DFA5_min = DFA.unpackEncodedStringToUnsignedChars(DFA5_minS); - static final char[] DFA5_max = DFA.unpackEncodedStringToUnsignedChars(DFA5_maxS); - static final short[] DFA5_accept = DFA.unpackEncodedString(DFA5_acceptS); - static final short[] DFA5_special = DFA.unpackEncodedString(DFA5_specialS); - static final short[][] DFA5_transition; - - static { - int numStates = DFA5_transitionS.length; - DFA5_transition = new short[numStates][]; - for (int i=0; i", "", "", "", "ID", "INT", "NOVA_LINHA", "NULL", "WS", "':'", "'goto'", "'iadd'", "'iand'", "'iconst_0'", "'iconst_1'", "'iconst_2'", "'iconst_3'", "'iconst_4'", "'iconst_5'", "'iconst_m1'", "'idiv'", "'if_icmpeq'", "'if_icmpge'", "'if_icmpgt'", "'if_icmple'", "'if_icmplt'", "'if_icmpne'", "'ifeq'", "'ifge'", "'ifgt'", "'ifle'", "'iflt'", "'ifne'", "'iinc'", "'iload'", "'iload_0'", "'iload_1'", "'iload_2'", "'iload_3'", "'imul'", "'ineg'", "'ior'", "'irem'", "'istore'", "'istore_0'", "'istore_1'", "'istore_2'", "'istore_3'", "'isub'", "'ixor'", "'ldc'", "'nop'", "'pop'", "'pop2'" - }; - - public static final int EOF=-1; - public static final int T__9=9; - public static final int T__10=10; - public static final int T__11=11; - public static final int T__12=12; - public static final int T__13=13; - public static final int T__14=14; - public static final int T__15=15; - public static final int T__16=16; - public static final int T__17=17; - public static final int T__18=18; - public static final int T__19=19; - public static final int T__20=20; - public static final int T__21=21; - public static final int T__22=22; - public static final int T__23=23; - public static final int T__24=24; - public static final int T__25=25; - public static final int T__26=26; - public static final int T__27=27; - public static final int T__28=28; - public static final int T__29=29; - public static final int T__30=30; - public static final int T__31=31; - public static final int T__32=32; - public static final int T__33=33; - public static final int T__34=34; - public static final int T__35=35; - public static final int T__36=36; - public static final int T__37=37; - public static final int T__38=38; - public static final int T__39=39; - public static final int T__40=40; - public static final int T__41=41; - public static final int T__42=42; - public static final int T__43=43; - public static final int T__44=44; - public static final int T__45=45; - public static final int T__46=46; - public static final int T__47=47; - public static final int T__48=48; - public static final int T__49=49; - public static final int T__50=50; - public static final int T__51=51; - public static final int T__52=52; - public static final int T__53=53; - public static final int ID=4; - public static final int INT=5; - public static final int NOVA_LINHA=6; - public static final int NULL=7; - public static final int WS=8; - - // delegates - public Parser[] getDelegates() { - return new Parser[] {}; - } - - // delegators - - - public AssemblerParser(TokenStream input) { - this(input, new RecognizerSharedState()); - } - public AssemblerParser(TokenStream input, RecognizerSharedState state) { - super(input, state); - } - - public String[] getTokenNames() { return AssemblerParser.tokenNames; } - public String getGrammarFileName() { return "C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g"; } - - - - protected abstract void escreverOpcode(Token opc); - protected abstract void escreverOpcode(Token opc, Token op) throws LabelException; - protected abstract void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException; - protected abstract void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException; - protected abstract void definirLabel(Token id) throws LabelException; - - - - - // $ANTLR start "programa" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:13:1: programa : ( comando )* ; - public final void programa() throws RecognitionException, LabelException, AcessoIndevidoMemoriaException { - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:13:10: ( ( comando )* ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:13:12: ( comando )* - { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:13:12: ( comando )* - loop1: - do { - int alt1=2; - int LA1_0 = input.LA(1); - - if ( (LA1_0==ID||LA1_0==NOVA_LINHA||(LA1_0 >= 10 && LA1_0 <= 53)) ) { - alt1=1; - } - - - switch (alt1) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:13:12: comando - { - pushFollow(FOLLOW_comando_in_programa16); - comando(); - - state._fsp--; - - - } - break; - - default : - break loop1; - } - } while (true); - - - } - - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "programa" - - - - // $ANTLR start "comando" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:1: comando : ( label instrucao | instrucao ) ; - public final void comando() throws RecognitionException, LabelException, AcessoIndevidoMemoriaException { - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:9: ( ( label instrucao | instrucao ) ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:11: ( label instrucao | instrucao ) - { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:11: ( label instrucao | instrucao ) - int alt2=2; - int LA2_0 = input.LA(1); - - if ( (LA2_0==ID) ) { - alt2=1; - } - else if ( (LA2_0==NOVA_LINHA||(LA2_0 >= 10 && LA2_0 <= 53)) ) { - alt2=2; - } - else { - NoViableAltException nvae = - new NoViableAltException("", 2, 0, input); - - throw nvae; - - } - switch (alt2) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:12: label instrucao - { - pushFollow(FOLLOW_label_in_comando36); - label(); - - state._fsp--; - - - pushFollow(FOLLOW_instrucao_in_comando38); - instrucao(); - - state._fsp--; - - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:16:30: instrucao - { - pushFollow(FOLLOW_instrucao_in_comando42); - instrucao(); - - state._fsp--; - - - } - break; - - } - - - } - - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "comando" - - - - // $ANTLR start "label" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:18:1: label : a= ID ':' ; - public final void label() throws RecognitionException, LabelException { - Token a=null; - - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:18:7: (a= ID ':' ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:18:9: a= ID ':' - { - a=(Token)match(input,ID,FOLLOW_ID_in_label64); - - match(input,9,FOLLOW_9_in_label66); - - definirLabel(a); - - } - - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "label" - - - - // $ANTLR start "instrucao" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:1: instrucao : ( aritmetica | load | store | desvio | logica | 'nop' |a= 'pop' |a= 'pop2' )? NOVA_LINHA ; - public final void instrucao() throws RecognitionException, LabelException, AcessoIndevidoMemoriaException { - Token a=null; - - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:10: ( ( aritmetica | load | store | desvio | logica | 'nop' |a= 'pop' |a= 'pop2' )? NOVA_LINHA ) - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:12: ( aritmetica | load | store | desvio | logica | 'nop' |a= 'pop' |a= 'pop2' )? NOVA_LINHA - { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:12: ( aritmetica | load | store | desvio | logica | 'nop' |a= 'pop' |a= 'pop2' )? - int alt3=9; - switch ( input.LA(1) ) { - case 11: - case 20: - case 33: - case 39: - case 40: - case 42: - case 48: - { - alt3=1; - } - break; - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - case 19: - case 34: - case 35: - case 36: - case 37: - case 38: - case 50: - { - alt3=2; - } - break; - case 43: - case 44: - case 45: - case 46: - case 47: - { - alt3=3; - } - break; - case 10: - case 21: - case 22: - case 23: - case 24: - case 25: - case 26: - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - { - alt3=4; - } - break; - case 12: - case 41: - case 49: - { - alt3=5; - } - break; - case 51: - { - alt3=6; - } - break; - case 52: - { - alt3=7; - } - break; - case 53: - { - alt3=8; - } - break; - } - - switch (alt3) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:13: aritmetica - { - pushFollow(FOLLOW_aritmetica_in_instrucao76); - aritmetica(); - - state._fsp--; - - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:26: load - { - pushFollow(FOLLOW_load_in_instrucao80); - load(); - - state._fsp--; - - - } - break; - case 3 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:33: store - { - pushFollow(FOLLOW_store_in_instrucao84); - store(); - - state._fsp--; - - - } - break; - case 4 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:41: desvio - { - pushFollow(FOLLOW_desvio_in_instrucao88); - desvio(); - - state._fsp--; - - - } - break; - case 5 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:50: logica - { - pushFollow(FOLLOW_logica_in_instrucao92); - logica(); - - state._fsp--; - - - } - break; - case 6 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:20:59: 'nop' - { - match(input,51,FOLLOW_51_in_instrucao96); - - } - break; - case 7 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:21:17: a= 'pop' - { - a=(Token)match(input,52,FOLLOW_52_in_instrucao118); - - escreverOpcode(a); - - } - break; - case 8 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:22:17: a= 'pop2' - { - a=(Token)match(input,53,FOLLOW_53_in_instrucao142); - - escreverOpcode(a); - - } - break; - - } - - - match(input,NOVA_LINHA,FOLLOW_NOVA_LINHA_in_instrucao162); - - } - - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "instrucao" - - - - // $ANTLR start "aritmetica" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:25:1: aritmetica : (a= 'iadd' |a= 'isub' |a= 'imul' |a= 'idiv' |a= 'irem' |a= 'iinc' |a= 'ineg' ); - public final void aritmetica() throws RecognitionException { - Token a=null; - - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:25:12: (a= 'iadd' |a= 'isub' |a= 'imul' |a= 'idiv' |a= 'irem' |a= 'iinc' |a= 'ineg' ) - int alt4=7; - switch ( input.LA(1) ) { - case 11: - { - alt4=1; - } - break; - case 48: - { - alt4=2; - } - break; - case 39: - { - alt4=3; - } - break; - case 20: - { - alt4=4; - } - break; - case 42: - { - alt4=5; - } - break; - case 33: - { - alt4=6; - } - break; - case 40: - { - alt4=7; - } - break; - default: - NoViableAltException nvae = - new NoViableAltException("", 4, 0, input); - - throw nvae; - - } - - switch (alt4) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:25:14: a= 'iadd' - { - a=(Token)match(input,11,FOLLOW_11_in_aritmetica174); - - escreverOpcode(a); - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:26:14: a= 'isub' - { - a=(Token)match(input,48,FOLLOW_48_in_aritmetica195); - - escreverOpcode(a); - - } - break; - case 3 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:27:14: a= 'imul' - { - a=(Token)match(input,39,FOLLOW_39_in_aritmetica216); - - escreverOpcode(a); - - } - break; - case 4 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:28:14: a= 'idiv' - { - a=(Token)match(input,20,FOLLOW_20_in_aritmetica237); - - escreverOpcode(a); - - } - break; - case 5 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:29:14: a= 'irem' - { - a=(Token)match(input,42,FOLLOW_42_in_aritmetica258); - - escreverOpcode(a); - - } - break; - case 6 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:30:14: a= 'iinc' - { - a=(Token)match(input,33,FOLLOW_33_in_aritmetica279); - - escreverOpcode(a); - - } - break; - case 7 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:31:14: a= 'ineg' - { - a=(Token)match(input,40,FOLLOW_40_in_aritmetica300); - - escreverOpcode(a); - - } - break; - - } - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "aritmetica" - - - - // $ANTLR start "load" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:34:1: load : (a= 'iconst_m1' |a= 'iconst_0' |a= 'iconst_1' |a= 'iconst_2' |a= 'iconst_3' |a= 'iconst_4' |a= 'iconst_5' |a= 'iload_0' |a= 'iload_1' |a= 'iload_2' |a= 'iload_3' |a= 'iload' INT |a= 'ldc' INT ); - public final void load() throws RecognitionException, LabelException { - Token a=null; - Token INT1=null; - Token INT2=null; - - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:34:6: (a= 'iconst_m1' |a= 'iconst_0' |a= 'iconst_1' |a= 'iconst_2' |a= 'iconst_3' |a= 'iconst_4' |a= 'iconst_5' |a= 'iload_0' |a= 'iload_1' |a= 'iload_2' |a= 'iload_3' |a= 'iload' INT |a= 'ldc' INT ) - int alt5=13; - switch ( input.LA(1) ) { - case 19: - { - alt5=1; - } - break; - case 13: - { - alt5=2; - } - break; - case 14: - { - alt5=3; - } - break; - case 15: - { - alt5=4; - } - break; - case 16: - { - alt5=5; - } - break; - case 17: - { - alt5=6; - } - break; - case 18: - { - alt5=7; - } - break; - case 35: - { - alt5=8; - } - break; - case 36: - { - alt5=9; - } - break; - case 37: - { - alt5=10; - } - break; - case 38: - { - alt5=11; - } - break; - case 34: - { - alt5=12; - } - break; - case 50: - { - alt5=13; - } - break; - default: - NoViableAltException nvae = - new NoViableAltException("", 5, 0, input); - - throw nvae; - - } - - switch (alt5) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:34:8: a= 'iconst_m1' - { - a=(Token)match(input,19,FOLLOW_19_in_load337); - - escreverOpcode(a); - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:35:8: a= 'iconst_0' - { - a=(Token)match(input,13,FOLLOW_13_in_load351); - - escreverOpcode(a); - - } - break; - case 3 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:36:8: a= 'iconst_1' - { - a=(Token)match(input,14,FOLLOW_14_in_load366); - - escreverOpcode(a); - - } - break; - case 4 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:37:8: a= 'iconst_2' - { - a=(Token)match(input,15,FOLLOW_15_in_load381); - - escreverOpcode(a); - - } - break; - case 5 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:38:8: a= 'iconst_3' - { - a=(Token)match(input,16,FOLLOW_16_in_load396); - - escreverOpcode(a); - - } - break; - case 6 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:39:8: a= 'iconst_4' - { - a=(Token)match(input,17,FOLLOW_17_in_load410); - - escreverOpcode(a); - - } - break; - case 7 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:40:8: a= 'iconst_5' - { - a=(Token)match(input,18,FOLLOW_18_in_load424); - - escreverOpcode(a); - - } - break; - case 8 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:41:8: a= 'iload_0' - { - a=(Token)match(input,35,FOLLOW_35_in_load438); - - escreverOpcode(a); - - } - break; - case 9 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:42:8: a= 'iload_1' - { - a=(Token)match(input,36,FOLLOW_36_in_load453); - - escreverOpcode(a); - - } - break; - case 10 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:43:8: a= 'iload_2' - { - a=(Token)match(input,37,FOLLOW_37_in_load468); - - escreverOpcode(a); - - } - break; - case 11 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:44:8: a= 'iload_3' - { - a=(Token)match(input,38,FOLLOW_38_in_load483); - - escreverOpcode(a); - - } - break; - case 12 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:45:8: a= 'iload' INT - { - a=(Token)match(input,34,FOLLOW_34_in_load498); - - INT1=(Token)match(input,INT,FOLLOW_INT_in_load500); - - escreverOpcode(a, INT1); - - } - break; - case 13 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:46:8: a= 'ldc' INT - { - a=(Token)match(input,50,FOLLOW_50_in_load515); - - INT2=(Token)match(input,INT,FOLLOW_INT_in_load517); - - escreverOpcode(a, INT2); - - } - break; - - } - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "load" - - - - // $ANTLR start "store" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:49:1: store : (a= 'istore_0' |a= 'istore_1' |a= 'istore_2' |a= 'istore_3' |a= 'istore' INT ); - public final void store() throws RecognitionException, AcessoIndevidoMemoriaException, LabelException { - Token a=null; - Token INT3=null; - - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:49:7: (a= 'istore_0' |a= 'istore_1' |a= 'istore_2' |a= 'istore_3' |a= 'istore' INT ) - int alt6=5; - switch ( input.LA(1) ) { - case 44: - { - alt6=1; - } - break; - case 45: - { - alt6=2; - } - break; - case 46: - { - alt6=3; - } - break; - case 47: - { - alt6=4; - } - break; - case 43: - { - alt6=5; - } - break; - default: - NoViableAltException nvae = - new NoViableAltException("", 6, 0, input); - - throw nvae; - - } - - switch (alt6) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:49:9: a= 'istore_0' - { - a=(Token)match(input,44,FOLLOW_44_in_store542); - - verificarAumentoMemoriaGlobal(a); - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:50:9: a= 'istore_1' - { - a=(Token)match(input,45,FOLLOW_45_in_store558); - - verificarAumentoMemoriaGlobal(a); - - } - break; - case 3 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:51:9: a= 'istore_2' - { - a=(Token)match(input,46,FOLLOW_46_in_store574); - - verificarAumentoMemoriaGlobal(a); - - } - break; - case 4 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:52:9: a= 'istore_3' - { - a=(Token)match(input,47,FOLLOW_47_in_store590); - - verificarAumentoMemoriaGlobal(a); - - } - break; - case 5 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:53:9: a= 'istore' INT - { - a=(Token)match(input,43,FOLLOW_43_in_store606); - - INT3=(Token)match(input,INT,FOLLOW_INT_in_store608); - - verificarAumentoMemoriaGlobal(a, INT3); - - } - break; - - } - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "store" - - - - // $ANTLR start "logica" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:56:1: logica : (a= 'iand' |a= 'ior' |a= 'ixor' ); - public final void logica() throws RecognitionException { - Token a=null; - - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:56:8: (a= 'iand' |a= 'ior' |a= 'ixor' ) - int alt7=3; - switch ( input.LA(1) ) { - case 12: - { - alt7=1; - } - break; - case 41: - { - alt7=2; - } - break; - case 49: - { - alt7=3; - } - break; - default: - NoViableAltException nvae = - new NoViableAltException("", 7, 0, input); - - throw nvae; - - } - - switch (alt7) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:56:10: a= 'iand' - { - a=(Token)match(input,12,FOLLOW_12_in_logica629); - - escreverOpcode(a); - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:57:10: a= 'ior' - { - a=(Token)match(input,41,FOLLOW_41_in_logica646); - - escreverOpcode(a); - - } - break; - case 3 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:58:10: a= 'ixor' - { - a=(Token)match(input,49,FOLLOW_49_in_logica663); - - escreverOpcode(a); - - } - break; - - } - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "logica" - - - - // $ANTLR start "desvio" - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:61:1: desvio : (a= 'ifeq' b= ID |a= 'ifne' b= ID |a= 'iflt' b= ID |a= 'ifge' b= ID |a= 'ifgt' b= ID |a= 'ifle' b= ID |a= 'if_icmpeq' b= ID |a= 'if_icmpne' b= ID |a= 'if_icmplt' b= ID |a= 'if_icmpge' b= ID |a= 'if_icmpgt' b= ID |a= 'if_icmple' b= ID |a= 'goto' b= ID ); - public final void desvio() throws RecognitionException, LabelException { - Token a=null; - Token b=null; - - try { - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:61:8: (a= 'ifeq' b= ID |a= 'ifne' b= ID |a= 'iflt' b= ID |a= 'ifge' b= ID |a= 'ifgt' b= ID |a= 'ifle' b= ID |a= 'if_icmpeq' b= ID |a= 'if_icmpne' b= ID |a= 'if_icmplt' b= ID |a= 'if_icmpge' b= ID |a= 'if_icmpgt' b= ID |a= 'if_icmple' b= ID |a= 'goto' b= ID ) - int alt8=13; - switch ( input.LA(1) ) { - case 27: - { - alt8=1; - } - break; - case 32: - { - alt8=2; - } - break; - case 31: - { - alt8=3; - } - break; - case 28: - { - alt8=4; - } - break; - case 29: - { - alt8=5; - } - break; - case 30: - { - alt8=6; - } - break; - case 21: - { - alt8=7; - } - break; - case 26: - { - alt8=8; - } - break; - case 25: - { - alt8=9; - } - break; - case 22: - { - alt8=10; - } - break; - case 23: - { - alt8=11; - } - break; - case 24: - { - alt8=12; - } - break; - case 10: - { - alt8=13; - } - break; - default: - NoViableAltException nvae = - new NoViableAltException("", 8, 0, input); - - throw nvae; - - } - - switch (alt8) { - case 1 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:61:10: a= 'ifeq' b= ID - { - a=(Token)match(input,27,FOLLOW_27_in_desvio685); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio691); - - escreverOpcode(a, b); - - } - break; - case 2 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:62:10: a= 'ifne' b= ID - { - a=(Token)match(input,32,FOLLOW_32_in_desvio708); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio714); - - escreverOpcode(a, b); - - } - break; - case 3 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:63:10: a= 'iflt' b= ID - { - a=(Token)match(input,31,FOLLOW_31_in_desvio731); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio737); - - escreverOpcode(a, b); - - } - break; - case 4 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:64:10: a= 'ifge' b= ID - { - a=(Token)match(input,28,FOLLOW_28_in_desvio754); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio760); - - escreverOpcode(a, b); - - } - break; - case 5 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:65:10: a= 'ifgt' b= ID - { - a=(Token)match(input,29,FOLLOW_29_in_desvio777); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio783); - - escreverOpcode(a, b); - - } - break; - case 6 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:66:10: a= 'ifle' b= ID - { - a=(Token)match(input,30,FOLLOW_30_in_desvio800); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio806); - - escreverOpcode(a, b); - - } - break; - case 7 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:67:10: a= 'if_icmpeq' b= ID - { - a=(Token)match(input,21,FOLLOW_21_in_desvio823); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio829); - - escreverOpcode(a, b); - - } - break; - case 8 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:68:10: a= 'if_icmpne' b= ID - { - a=(Token)match(input,26,FOLLOW_26_in_desvio846); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio852); - - escreverOpcode(a, b); - - } - break; - case 9 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:69:10: a= 'if_icmplt' b= ID - { - a=(Token)match(input,25,FOLLOW_25_in_desvio869); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio875); - - escreverOpcode(a, b); - - } - break; - case 10 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:70:10: a= 'if_icmpge' b= ID - { - a=(Token)match(input,22,FOLLOW_22_in_desvio892); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio898); - - escreverOpcode(a, b); - - } - break; - case 11 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:71:10: a= 'if_icmpgt' b= ID - { - a=(Token)match(input,23,FOLLOW_23_in_desvio915); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio921); - - escreverOpcode(a, b); - - } - break; - case 12 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:72:10: a= 'if_icmple' b= ID - { - a=(Token)match(input,24,FOLLOW_24_in_desvio938); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio944); - - escreverOpcode(a, b); - - } - break; - case 13 : - // C:\\Users\\Tiago\\.ssh\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\bytecodeassembler\\grammars\\Assembler.g:73:10: a= 'goto' b= ID - { - a=(Token)match(input,10,FOLLOW_10_in_desvio961); - - b=(Token)match(input,ID,FOLLOW_ID_in_desvio967); - - escreverOpcode(a, b); - - } - break; - - } - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - } - - finally { - // do for sure before leaving - } - return ; - } - // $ANTLR end "desvio" - - // Delegated rules - - - - - public static final BitSet FOLLOW_comando_in_programa16 = new BitSet(new long[]{0x003FFFFFFFFFFC52L}); - public static final BitSet FOLLOW_label_in_comando36 = new BitSet(new long[]{0x003FFFFFFFFFFC40L}); - public static final BitSet FOLLOW_instrucao_in_comando38 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_instrucao_in_comando42 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_label64 = new BitSet(new long[]{0x0000000000000200L}); - public static final BitSet FOLLOW_9_in_label66 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_aritmetica_in_instrucao76 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_load_in_instrucao80 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_store_in_instrucao84 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_desvio_in_instrucao88 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_logica_in_instrucao92 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_51_in_instrucao96 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_52_in_instrucao118 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_53_in_instrucao142 = new BitSet(new long[]{0x0000000000000040L}); - public static final BitSet FOLLOW_NOVA_LINHA_in_instrucao162 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_11_in_aritmetica174 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_48_in_aritmetica195 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_39_in_aritmetica216 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_20_in_aritmetica237 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_42_in_aritmetica258 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_33_in_aritmetica279 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_40_in_aritmetica300 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_19_in_load337 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_13_in_load351 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_14_in_load366 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_15_in_load381 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_16_in_load396 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_17_in_load410 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_18_in_load424 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_35_in_load438 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_36_in_load453 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_37_in_load468 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_38_in_load483 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_34_in_load498 = new BitSet(new long[]{0x0000000000000020L}); - public static final BitSet FOLLOW_INT_in_load500 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_50_in_load515 = new BitSet(new long[]{0x0000000000000020L}); - public static final BitSet FOLLOW_INT_in_load517 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_44_in_store542 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_45_in_store558 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_46_in_store574 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_47_in_store590 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_43_in_store606 = new BitSet(new long[]{0x0000000000000020L}); - public static final BitSet FOLLOW_INT_in_store608 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_12_in_logica629 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_41_in_logica646 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_49_in_logica663 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_27_in_desvio685 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio691 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_32_in_desvio708 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio714 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_31_in_desvio731 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio737 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_28_in_desvio754 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio760 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_29_in_desvio777 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio783 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_30_in_desvio800 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio806 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_21_in_desvio823 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio829 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_26_in_desvio846 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio852 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_25_in_desvio869 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio875 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_22_in_desvio892 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio898 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_23_in_desvio915 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio921 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_24_in_desvio938 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio944 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_10_in_desvio961 = new BitSet(new long[]{0x0000000000000010L}); - public static final BitSet FOLLOW_ID_in_desvio967 = new BitSet(new long[]{0x0000000000000002L}); - -} \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.java b/src/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.java old mode 100644 new mode 100755 index 0082f6e..bc4f4c9 --- a/src/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.java +++ b/src/br/ufpb/iged/interpretador/excecoes/AcessoIndevidoMemoriaException.java @@ -1,22 +1,19 @@ -package br.ufpb.iged.interpretador.excecoes; - -public class AcessoIndevidoMemoriaException extends Exception{ - -/** -* -*/ -private static final long serialVersionUID = 2321754267568937083L; - -public AcessoIndevidoMemoriaException() { - -super("Acesso indevido à memória"); - -} - -public AcessoIndevidoMemoriaException(String msg) { - -super(msg); - -} - +package br.ufpb.iged.interpretador.excecoes; + +public class AcessoIndevidoMemoriaException extends Exception{ + + private static final long serialVersionUID = 2321754267568937083L; + + public AcessoIndevidoMemoriaException() { + + super("Acesso indevido à memória"); + + } + + public AcessoIndevidoMemoriaException(String msg) { + + super(msg); + + } + } \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/excecoes/ClassNotFoundException.java b/src/br/ufpb/iged/interpretador/excecoes/ClassNotFoundException.java new file mode 100644 index 0000000..8f0c76b --- /dev/null +++ b/src/br/ufpb/iged/interpretador/excecoes/ClassNotFoundException.java @@ -0,0 +1,19 @@ +package br.ufpb.iged.interpretador.excecoes; + +public class ClassNotFoundException extends Exception{ + + private static final long serialVersionUID = 6082261366668401927L; + + public ClassNotFoundException() { + + super("Classe não encontrada"); + + } + + public ClassNotFoundException(String msg) { + + super(msg); + + } + +} diff --git a/src/br/ufpb/iged/interpretador/excecoes/LabelException.java b/src/br/ufpb/iged/interpretador/excecoes/LabelException.java old mode 100644 new mode 100755 index 906d2f2..7cf7305 --- a/src/br/ufpb/iged/interpretador/excecoes/LabelException.java +++ b/src/br/ufpb/iged/interpretador/excecoes/LabelException.java @@ -1,22 +1,19 @@ -package br.ufpb.iged.interpretador.excecoes; - -public class LabelException extends Exception{ - -/** -* -*/ -private static final long serialVersionUID = -8079795783286968296L; - -public LabelException() { - -super(); - -} - -public LabelException(String msg) { - -super(msg); - -} - -} +package br.ufpb.iged.interpretador.excecoes; + +public class LabelException extends Exception{ + + private static final long serialVersionUID = -8079795783286968296L; + + public LabelException() { + + super(); + + } + + public LabelException(String msg) { + + super(msg); + + } + +} diff --git a/src/br/ufpb/iged/interpretador/gramaticas/Assembler.g b/src/br/ufpb/iged/interpretador/gramaticas/Assembler.g new file mode 100644 index 0000000..cca44ae --- /dev/null +++ b/src/br/ufpb/iged/interpretador/gramaticas/Assembler.g @@ -0,0 +1,232 @@ +grammar Assembler; + +options { + output = AST; + ASTLabelType = BytecodesAST; +} + +tokens { + MEMBRO_CLASSE; + FIELD_DECL; + EXTENDS; + RETURN; + NEW; + ARITMETICA; + LOAD; + STORE; + LOGICA; + DESVIO; + LABEL; + PILHA; + BODY; + METHOD_DECL; + CONSTR_DECL; + PARAMS; + LIMIT; + METHOD_CALL; + ARGS; +} + +@header{ + package br.ufpb.iged.interpretador.parser; + + import br.ufpb.iged.interpretador.excecoes.AcessoIndevidoMemoriaException; + import br.ufpb.iged.interpretador.excecoes.LabelException; + import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; +} + +@lexer::header{ + package br.ufpb.iged.interpretador.parser; +} + +@members { + + public abstract void escreverOpcode(String nomeInstrucao); + public abstract void escreverOpcode(Token opc, Token op) throws LabelException; + public abstract void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException; + public abstract void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException; + +} + +programa : instrucao* + ; + +instrucao : operacao + | definicaoClasse ('.end class')? + ; + +operacao : (label comando | comando); + +label : a = ID ':' -> ^(LABEL $a); + +comando: ( manipulacaoObjetos + | aritmetica + | load + | loadint + | store + | storeint + | desvio + | logica + | pilha + | retorno + | 'nop' + )? NEWLINE; + +definicaoClasse + : '.class' ID NEWLINE (superClasse NEWLINE)? (membroClasse NEWLINE) + + -> ^('.class' ID superClasse? ^(MEMBRO_CLASSE membroClasse+)) + ; + +superClasse : '.super' (b = ID | b = REF)-> ^(EXTENDS $b) ; + +membroClasse + : '.field' st = 'static'? ID tipo -> ^(FIELD_DECL $st? ID tipo) + | '.method' INIT (parametros | '(' parametros ')') ret = tipo NEWLINE (limite NEWLINE)? operacao* '.end method' + -> ^(CONSTR_DECL INIT $ret parametros limite? ^(BODY operacao*)) + | '.method' 'static'? ID (parametros | '(' parametros ')') ret = tipo NEWLINE (limite NEWLINE)? operacao* '.end method' + -> ^(METHOD_DECL ID $ret parametros limite? ^(BODY operacao*)) + ; + +limite : '.limit locals' INTEIRO -> ^(LIMIT INTEIRO); + +parametros + : '()' -> ^(PARAMS VOID) + | ( a = INT | a = TIPO_REF) + -> ^(PARAMS $a) + ; + +retorno : + ( a = 'areturn' + | a = 'ireturn' + | a = 'return' + ) + -> ^(RETURN $a) + ; + +manipulacaoObjetos : a = 'getfield' REF tipo -> ^('getfield' REF tipo) + | a = 'getstatic' REF tipo -> ^('getstatic' REF tipo) + | a = 'putfield' REF tipo -> ^('putfield' REF tipo) + | a = 'putstatic' REF tipo -> ^('putstatic' REF tipo) + | a = 'invokespecial' REF d = parametrosRetorno + -> ^('invokespecial' REF $d) + | a = 'invokestatic' REF d = parametrosRetorno + -> ^('invokestatic' REF $d) + | a = 'invokevirtual' REF d = parametrosRetorno + -> ^('invokevirtual' REF $d) + | a = 'new' (b = ID | b = REF) -> ^(NEW $b) + ; + + +tipo : INT | VOID | TIPO_REF; + +aritmetica : ( a = 'iadd' + | a = 'isub' + | a = 'imul' + | a = 'idiv' + | a = 'irem' + | a = 'iinc' + | a = 'ineg' + ) + -> ^(ARITMETICA $a) + ; + +load : ( a = 'iconst_m1' + | a = 'iconst_0' + | a = 'iconst_1' + | a = 'iconst_2' + | a = 'iconst_3' + | a = 'iconst_4' + | a = 'iconst_5' + | a = 'aconst_null' + | a = 'iload_0' + | a = 'iload_1' + | a = 'iload_2' + | a = 'iload_3' + | a = 'aload_0' + | a = 'aload_1' + | a = 'aload_2' + | a = 'aload_3' + ) + -> ^(LOAD $a) + ; + +loadint : ( a = 'iload' b = INTEIRO + | a = 'ldc' b = INTEIRO + | a = 'aload' b = INTEIRO + ) + -> ^(LOAD $a $b) + ; + +store : ( a = 'istore_0' + | a = 'istore_1' + | a = 'istore_2' + | a = 'istore_3' + | a = 'astore_0' + | a = 'astore_1' + | a = 'astore_2' + | a = 'astore_3' + ) + -> ^(STORE $a) + ; + +storeint : ( a = 'istore' b = INTEIRO + | a = 'astore' b = INTEIRO + ) + -> ^(STORE $a $b) + ; + +logica : ( a = 'iand' + | a = 'ior' + | a = 'ixor' + ) + -> ^(LOGICA $a) + ; + +desvio : ( a = 'ifeq' b = ID + | a = 'ifne' b = ID + | a = 'iflt' b = ID + | a = 'ifge' b = ID + | a = 'ifgt' b = ID + | a = 'ifle' b = ID + | a = 'if_icmpeq' b = ID + | a = 'if_icmpne' b = ID + | a = 'if_icmplt' b = ID + | a = 'if_icmpge' b = ID + | a = 'if_icmpgt' b = ID + | a = 'if_icmple' b = ID + | a = 'goto' b = ID + ) + -> ^(DESVIO $a $b) + ; + +pilha : ( a = 'pop' + | a = 'pop2' + | a = 'dup' + ) + -> ^(PILHA $a) + ; + +parametrosRetorno + : (parametros | '(' parametros ')') tip = tipo + -> ^(METHOD_CALL parametros $tip) + ; + +INIT : ''; + +INT : 'I'; + +VOID : 'V'; + +NULL : ('null' | 'NULL'); + +INTEIRO : '-'? '0'..'9'+ ; + +REF : (ID '/')+ ( ID | INIT); + +TIPO_REF: ('L'ID ('/' ID)*';' | INT)+; + +ID: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '_')*; + +NEWLINE : '\n'+; + +WS : (' ' | '\t' | '\r') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/gramaticas/Def.g b/src/br/ufpb/iged/interpretador/gramaticas/Def.g new file mode 100644 index 0000000..0bda5a9 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/gramaticas/Def.g @@ -0,0 +1,186 @@ +tree grammar Def; + +options { + tokenVocab=Assembler; + ASTLabelType=BytecodesAST; + filter=true; +} + +@header{ + package br.ufpb.iged.interpretador.parser; + + import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; + import br.ufpb.iged.interpretador.symboltable.classes.Escopo; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloVariavel; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; + import br.ufpb.iged.interpretador.symboltable.classes.TabelaSimbolos; + import br.ufpb.iged.interpretador.symboltable.classes.EscopoLocal; +} + +@members { + TabelaSimbolos tabelaSimbolos; + Escopo escopoAtual; + int contador; + public Def(TreeNodeStream input, TabelaSimbolos tabelaSimbolos) { + this(input); + this.tabelaSimbolos = tabelaSimbolos; + escopoAtual = tabelaSimbolos.global; + } +} + +topdown : entraNoCorpoMetodo + | entraNoConstrutor + | entraNoMetodo + | entraNaClasse + //| parametros + | declaracaoVariavel + | field + | invoke + | nenhumoperando + | umoperando + | label + ; + +bottomup : saiDoCorpoMetodo + | saiDoMetodo + | saiDoConstrutor + | saiDaClasse + ; + +entraNaClasse + : ^('.class' nome=ID (^(EXTENDS sup = .))? .) + { + System.out.println("linha "+$nome.getLine()+ + ": def class "+$nome.text); + if ( $sup!=null ) + $sup.escopo = escopoAtual; + SimboloClasse classe = new SimboloClasse("L" + $nome.text,escopoAtual,null); + classe.def = $nome; + $nome.simbolo = classe; + escopoAtual.definir(classe); + escopoAtual = classe; + } + ; + +declaracaoVariavel + : ^(FIELD_DECL (st =.)? ID tipo =.) + { + System.out.println("linha "+$ID.getLine()+": def "+$ID.text); + $tipo.escopo = escopoAtual; + boolean estatico = $st != null; + SimboloVariavel variavel = new SimboloVariavel($ID.text,null,estatico); + variavel.def = $ID; + $ID.simbolo = variavel; + escopoAtual.definir(variavel); + ((SimboloClasse)escopoAtual).getConstantPool().add(variavel); + } + ; + +entraNoConstrutor + : ^(CONSTR_DECL INIT tipoRet =. ^(PARAMS a =.) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("linha "+$INIT.getLine()+ + ": def method init "); + SimboloMetodo metodo = new SimboloMetodo($INIT.text+"("+a.getText()+")"+tipoRet.getText(), null, escopoAtual); + if (lim != null) + metodo.setTamanhoMemoriaLocal(new Integer(lim.getText())); + metodo.setRetorno($tipoRet.getText()); + metodo.def = $INIT; + $INIT.simbolo = metodo; + escopoAtual.definir(metodo); + escopoAtual = metodo; + contador = 0; + } + ; + +entraNoMetodo + : ^(METHOD_DECL ID tipoRet =. ^(PARAMS a =.) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("linha "+$ID.getLine()+ + ": def method "+$ID.text); + SimboloMetodo metodo = new SimboloMetodo($ID.text+"("+a.getText()+")"+tipoRet.getText(), null, escopoAtual); + if (lim != null) + metodo.setTamanhoMemoriaLocal(new Integer(lim.getText())); + metodo.setRetorno($tipoRet.getText()); + metodo.def = $ID; + $ID.simbolo = metodo; + escopoAtual.definir(metodo); + escopoAtual = metodo; + contador = 0; + } + ; + +entraNoCorpoMetodo + : BODY {escopoAtual = new EscopoLocal(escopoAtual);} + ; + +saiDoCorpoMetodo + : BODY + { + System.out.println("locals: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + ; + +saiDaClasse : '.class' + { + System.out.println("Saindo da classe.. membros: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + ; + +saiDoMetodo + : METHOD_DECL + { + System.out.println("Saindo do metodo: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + + } + ; + +saiDoConstrutor + : CONSTR_DECL + { + System.out.println("Saindo do construtor: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + + ; + +field : ^((a = 'getfield' | a = 'getstatic' | a = 'putfield' | a = 'putstatic') . .) + { + if ($a.equals("getstatic") || $a.equals("putstatic")) + contador += 9; + else + contador += 5; + } + ; + +invoke : ^(('invokespecial' | 'invokestatic' | 'invokevirtual') . ^(METHOD_CALL ^(PARAMS .) .)) + { + contador += 9; + } + ; + +nenhumoperando + : ^((RETURN | ARITMETICA | NEW | LOAD | STORE | LOGICA | PILHA) . ) + { + contador++; + } + ; + +umoperando + : ^((DESVIO | LOAD | STORE) . .) + { + contador += 5; + } + ; +label + : ^(LABEL id = .) + { + System.out.println("Definindo label "+id.getText()+" no endereço "+contador); + SimboloMetodo metodo = (SimboloMetodo) escopoAtual.obterEscopoEnvolvente(); + metodo.definirLabel($id.token, contador); + } + ; \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/gramaticas/Intermediario.g b/src/br/ufpb/iged/interpretador/gramaticas/Intermediario.g new file mode 100644 index 0000000..2055079 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/gramaticas/Intermediario.g @@ -0,0 +1,48 @@ +grammar Intermediario; + +@header{ + + package br.ufpb.iged.interpretador.tradutor.intermediario.parser; + + import java.io.IOException; + +} + +@lexer::header{ + package br.ufpb.iged.interpretador.tradutor.intermediario.parser; +} + +@members { + + protected void adicionarVariavel(Token op); + protected void traduzirLoad(Token opc, Token op) throws IOException; + protected void traduzirStore(Token opc, Token op) throws IOException; + protected void traduzirArimetica(Token opc) throws IOException; + +} + +programa : instrucao*; + +instrucao : (create | load | store | aritmetica); + +create : 'CREATE_INT' a = ID {adicionarVariavel($a);} + | 'DELETE_INT' ID + ; + +load : a = 'READ_INT' b = ID {traduzirLoad($a, $b);} + | a = 'READ_INTC' INT {traduzirLoad($a, $INT);} + ; + +store : a = 'WRITE_INT' b = ID {traduzirStore($a, $b);}; + +aritmetica : a = 'ADD' {traduzirArimetica($a);} + | a = 'SUB' {traduzirArimetica($a);} + | a = 'MULT' {traduzirArimetica($a);} + | a = 'DIV' {traduzirArimetica($a);} + ; + +INT : '-'? '0'..'9'+ ; + +ID: ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '.')* ; + +WS : (' ' | '\t' | '\r' | '\n') {skip();} ; \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/gramaticas/Ref.g b/src/br/ufpb/iged/interpretador/gramaticas/Ref.g new file mode 100644 index 0000000..b82cc27 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/gramaticas/Ref.g @@ -0,0 +1,266 @@ +tree grammar Ref; + +options { + tokenVocab = Assembler; + ASTLabelType = BytecodesAST; + filter = true; +} + +@header{ + package br.ufpb.iged.interpretador.parser; + + import br.ufpb.iged.interpretador.symboltable.classes.Escopo; + import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; + import br.ufpb.iged.interpretador.symboltable.classes.TabelaSimbolos; + import br.ufpb.iged.interpretador.symboltable.classes.Tipo; + import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloVariavel; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; + import br.ufpb.iged.interpretador.symboltable.classes.SimboloLabel; +} + +@members { + + TabelaSimbolos tabelaSimbolos; + SimboloClasse simboloClasse; + BytecodeAssembler assembler; + Escopo escopoAtual; + public Ref(TreeNodeStream input, TabelaSimbolos tabelaSimbolos, + BytecodeAssembler assembler) { + this(input); + this.tabelaSimbolos = tabelaSimbolos; + this.assembler = assembler; + } + + private Tipo resolverTipo(String nomeTipo) { + + return (Tipo)simboloClasse.resolver(nomeTipo); + + } + + private void acessarCampo(String operacao, String nomeClasse, String nomeCampo) { + + assembler.escreverOpcode(operacao); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver(nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + SimboloVariavel simboloVariavel = + (SimboloVariavel) simboloClasse.resolver(nomeCampo); + + if (!simboloClasse.getConstantPool().contains(simboloVariavel)) + + simboloClasse.getConstantPool().add(simboloVariavel); + + if (operacao.equals("getstatic") || operacao.equals("putstatic")) + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + assembler.getConstantPool().indexOf(simboloClasse)); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + simboloClasse.obterIdentificadorVariavel(simboloVariavel)); + + } + + private void chamarMetodo(String instrucao, String nomeClasse, String nomeMetodo, String args, String tipoRetorno) { + + assembler.escreverOpcode(instrucao); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver(nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + SimboloMetodo simboloMetodo = + (SimboloMetodo) simboloClasse.resolver(nomeMetodo+"("+args+")"+tipoRetorno); + + if (!simboloClasse.getMethodArea().contains(simboloMetodo)) + + simboloClasse.getMethodArea().add(simboloMetodo); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + assembler.getConstantPool().indexOf(simboloClasse)); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + simboloClasse.getMethodArea().indexOf(simboloMetodo)); + + } + + private void newClass(String nomeClasse) { + + assembler.escreverOpcode("new"); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver( nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + BytecodeAssembler.escreverInteiro(BytecodeAssembler.codigo, + BytecodeAssembler.ip, assembler.getConstantPool().indexOf(simboloClasse)); + + } + +} + +topdown + : entraNaClasse + | entraNoMetodo + | entraNoConstrutor + | declaracaoVariavel + | field + | invoke + | novaClasse + | nenhumoperando + | umoperando + ; + +bottomup + : saiDoMetodo + | saiDoConstrutor + + ; + +entraNaClasse + : ^('.class' nome=ID (^(EXTENDS sup = .))? .) + { + + simboloClasse =(SimboloClasse)tabelaSimbolos.global.resolver("L" + $nome.getText()); + if(!assembler.getConstantPool().contains(simboloClasse)) + assembler.getConstantPool().add(simboloClasse); + if ( $sup!=null ) { + $sup.simbolo = $sup.escopo.resolver("L"+$sup.getText()); + simboloClasse.superClasse = + (SimboloClasse)$sup.simbolo; + System.out.println("linha "+$nome.getLine()+": set "+$nome.text+ + " super to "+((SimboloClasse)$nome.simbolo).superClasse.nome); + } + else { + System.out.println("linha "+$nome.getLine()+": set "+$nome.text); + } + } + ; + +declaracaoVariavel + : ^(FIELD_DECL .? ID tip =.) + { + if ($tip.getText().startsWith("L")) + $ID.simbolo.tipo = resolverTipo($tip.getText().substring(0, $tip.getText().length() - 1)); + else + $ID.simbolo.tipo = resolverTipo($tip.getText()); + System.out.println("linha "+$ID.getLine()+": set var type "+$ID.simbolo); + } + ; + +entraNoConstrutor + : ^(CONSTR_DECL INIT . ^(PARAMS .) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("Ref: Entrou no construtor "+$INIT.text); + escopoAtual = (SimboloMetodo)$INIT.simbolo; + BytecodeAssembler.codigo = new byte[BytecodeAssembler.TAMANHO_INICIAL_MEMORIA_CODIGO]; + BytecodeAssembler.ip = 0; + assembler.setMetodoAtual((SimboloMetodo)escopoAtual); + } + ; + +entraNoMetodo + : ^(METHOD_DECL ID . ^(PARAMS .) (^(LIMIT lim=INTEIRO))? .) + { + System.out.println("Ref: Entrou no metodo "+$ID.text); + escopoAtual = (SimboloMetodo)$ID.simbolo; + BytecodeAssembler.codigo = new byte[BytecodeAssembler.TAMANHO_INICIAL_MEMORIA_CODIGO]; + BytecodeAssembler.ip = 0; + assembler.setMetodoAtual((SimboloMetodo)escopoAtual); + } + ; + +saiDoMetodo + : METHOD_DECL + { + System.out.println("Ref: Saindo do metodo... "); + ((SimboloMetodo)escopoAtual).setCodigo(assembler.obterCodigoMaquina()); + ((SimboloMetodo)escopoAtual).setTamanhoMemoriaLocal(assembler.obterTamanhoMemoriaCodigo()); + } + ; + +saiDoConstrutor + : CONSTR_DECL + { + System.out.println("Ref: Saindo do construtor... "); + ((SimboloMetodo)escopoAtual).setCodigo(assembler.obterCodigoMaquina()); + ((SimboloMetodo)escopoAtual).setTamanhoMemoriaLocal(assembler.obterTamanhoMemoriaCodigo()); + } + ; + +field : ^((op = 'getfield' | op = 'getstatic' | op = 'putfield' | op = 'putstatic') ref = . tipo = .) + { + String[] tokens = $ref.getText().split("/"); + String campo = tokens[tokens.length - 1]; + String classe = "L"; + + int i; + + for (i = 0; i < tokens.length - 1; i++){ + if (i == tokens.length - 2) + classe += tokens[i]; + else + classe += tokens[i]+"/"; + } + + acessarCampo($op.getText(), classe, campo); + } + ; + +invoke : ^((op = 'invokespecial' | op = 'invokestatic' | op = 'invokevirtual') ref = . ^(METHOD_CALL ^(PARAMS a = .) tipoRet = .)) + { + + String[] tokens = $ref.getText().split("/"); + String nomeMetodo = tokens[tokens.length - 1]; + String classe = "L"; + + int i; + + for (i = 0; i < tokens.length - 1; i++){ + if (i == tokens.length - 2) + classe += tokens[i]; + else + classe += tokens[i]+"/"; + } + + System.out.println("chamando metodo "+nomeMetodo+"("+$a.getText()+")"+$tipoRet.getText()); + chamarMetodo($op.getText(), classe, nomeMetodo, $a.getText(), $tipoRet.getText()); + } + ; + +novaClasse + : ^(NEW classe = .) + { + newClass("L"+$classe.getText()); + } + ; + +nenhumoperando + : ^((RETURN | ARITMETICA | LOAD | STORE | LOGICA | PILHA) operacao = . ) + { + assembler.escreverOpcode($operacao.getText()); + } + ; + +umoperando + : ^((DESVIO | LOAD | STORE) operacao = . operando = .) + { + assembler.escreverOpcode($operacao.token, $operando.token); + } + ; \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/parser/Assembler.tokens b/src/br/ufpb/iged/interpretador/parser/Assembler.tokens new file mode 100644 index 0000000..940c7a7 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/parser/Assembler.tokens @@ -0,0 +1,187 @@ +T__33=33 +T__34=34 +T__35=35 +T__36=36 +T__37=37 +T__38=38 +T__39=39 +T__40=40 +T__41=41 +T__42=42 +T__43=43 +T__44=44 +T__45=45 +T__46=46 +T__47=47 +T__48=48 +T__49=49 +T__50=50 +T__51=51 +T__52=52 +T__53=53 +T__54=54 +T__55=55 +T__56=56 +T__57=57 +T__58=58 +T__59=59 +T__60=60 +T__61=61 +T__62=62 +T__63=63 +T__64=64 +T__65=65 +T__66=66 +T__67=67 +T__68=68 +T__69=69 +T__70=70 +T__71=71 +T__72=72 +T__73=73 +T__74=74 +T__75=75 +T__76=76 +T__77=77 +T__78=78 +T__79=79 +T__80=80 +T__81=81 +T__82=82 +T__83=83 +T__84=84 +T__85=85 +T__86=86 +T__87=87 +T__88=88 +T__89=89 +T__90=90 +T__91=91 +T__92=92 +T__93=93 +T__94=94 +T__95=95 +T__96=96 +T__97=97 +T__98=98 +T__99=99 +T__100=100 +T__101=101 +T__102=102 +T__103=103 +T__104=104 +T__105=105 +T__106=106 +T__107=107 +T__108=108 +T__109=109 +T__110=110 +T__111=111 +ARGS=4 +ARITMETICA=5 +BODY=6 +CONSTR_DECL=7 +DESVIO=8 +EXTENDS=9 +FIELD_DECL=10 +ID=11 +INIT=12 +INT=13 +INTEIRO=14 +LABEL=15 +LIMIT=16 +LOAD=17 +LOGICA=18 +MEMBRO_CLASSE=19 +METHOD_CALL=20 +METHOD_DECL=21 +NEW=22 +NEWLINE=23 +NULL=24 +PARAMS=25 +PILHA=26 +REF=27 +RETURN=28 +STORE=29 +TIPO_REF=30 +VOID=31 +WS=32 +'('=33 +'()'=34 +')'=35 +'.class'=36 +'.end class'=37 +'.end method'=38 +'.field'=39 +'.limit locals'=40 +'.method'=41 +'.super'=42 +':'=43 +'aconst_null'=44 +'aload'=45 +'aload_0'=46 +'aload_1'=47 +'aload_2'=48 +'aload_3'=49 +'areturn'=50 +'astore'=51 +'astore_0'=52 +'astore_1'=53 +'astore_2'=54 +'astore_3'=55 +'dup'=56 +'getfield'=57 +'getstatic'=58 +'goto'=59 +'iadd'=60 +'iand'=61 +'iconst_0'=62 +'iconst_1'=63 +'iconst_2'=64 +'iconst_3'=65 +'iconst_4'=66 +'iconst_5'=67 +'iconst_m1'=68 +'idiv'=69 +'if_icmpeq'=70 +'if_icmpge'=71 +'if_icmpgt'=72 +'if_icmple'=73 +'if_icmplt'=74 +'if_icmpne'=75 +'ifeq'=76 +'ifge'=77 +'ifgt'=78 +'ifle'=79 +'iflt'=80 +'ifne'=81 +'iinc'=82 +'iload'=83 +'iload_0'=84 +'iload_1'=85 +'iload_2'=86 +'iload_3'=87 +'imul'=88 +'ineg'=89 +'invokespecial'=90 +'invokestatic'=91 +'invokevirtual'=92 +'ior'=93 +'irem'=94 +'ireturn'=95 +'istore'=96 +'istore_0'=97 +'istore_1'=98 +'istore_2'=99 +'istore_3'=100 +'isub'=101 +'ixor'=102 +'ldc'=103 +'new'=104 +'nop'=105 +'pop'=106 +'pop2'=107 +'putfield'=108 +'putstatic'=109 +'return'=110 +'static'=111 diff --git a/src/br/ufpb/iged/interpretador/parser/AssemblerLexer.java b/src/br/ufpb/iged/interpretador/parser/AssemblerLexer.java new file mode 100644 index 0000000..de976de --- /dev/null +++ b/src/br/ufpb/iged/interpretador/parser/AssemblerLexer.java @@ -0,0 +1,3823 @@ +// $ANTLR 3.4 C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g 2012-09-29 22:01:22 + + package br.ufpb.iged.interpretador.parser; + + +import org.antlr.runtime.*; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked"}) +public class AssemblerLexer extends Lexer { + public static final int EOF=-1; + public static final int T__33=33; + public static final int T__34=34; + public static final int T__35=35; + public static final int T__36=36; + public static final int T__37=37; + public static final int T__38=38; + public static final int T__39=39; + public static final int T__40=40; + public static final int T__41=41; + public static final int T__42=42; + public static final int T__43=43; + public static final int T__44=44; + public static final int T__45=45; + public static final int T__46=46; + public static final int T__47=47; + public static final int T__48=48; + public static final int T__49=49; + public static final int T__50=50; + public static final int T__51=51; + public static final int T__52=52; + public static final int T__53=53; + public static final int T__54=54; + public static final int T__55=55; + public static final int T__56=56; + public static final int T__57=57; + public static final int T__58=58; + public static final int T__59=59; + public static final int T__60=60; + public static final int T__61=61; + public static final int T__62=62; + public static final int T__63=63; + public static final int T__64=64; + public static final int T__65=65; + public static final int T__66=66; + public static final int T__67=67; + public static final int T__68=68; + public static final int T__69=69; + public static final int T__70=70; + public static final int T__71=71; + public static final int T__72=72; + public static final int T__73=73; + public static final int T__74=74; + public static final int T__75=75; + public static final int T__76=76; + public static final int T__77=77; + public static final int T__78=78; + public static final int T__79=79; + public static final int T__80=80; + public static final int T__81=81; + public static final int T__82=82; + public static final int T__83=83; + public static final int T__84=84; + public static final int T__85=85; + public static final int T__86=86; + public static final int T__87=87; + public static final int T__88=88; + public static final int T__89=89; + public static final int T__90=90; + public static final int T__91=91; + public static final int T__92=92; + public static final int T__93=93; + public static final int T__94=94; + public static final int T__95=95; + public static final int T__96=96; + public static final int T__97=97; + public static final int T__98=98; + public static final int T__99=99; + public static final int T__100=100; + public static final int T__101=101; + public static final int T__102=102; + public static final int T__103=103; + public static final int T__104=104; + public static final int T__105=105; + public static final int T__106=106; + public static final int T__107=107; + public static final int T__108=108; + public static final int T__109=109; + public static final int T__110=110; + public static final int T__111=111; + public static final int ARGS=4; + public static final int ARITMETICA=5; + public static final int BODY=6; + public static final int CONSTR_DECL=7; + public static final int DESVIO=8; + public static final int EXTENDS=9; + public static final int FIELD_DECL=10; + public static final int ID=11; + public static final int INIT=12; + public static final int INT=13; + public static final int INTEIRO=14; + public static final int LABEL=15; + public static final int LIMIT=16; + public static final int LOAD=17; + public static final int LOGICA=18; + public static final int MEMBRO_CLASSE=19; + public static final int METHOD_CALL=20; + public static final int METHOD_DECL=21; + public static final int NEW=22; + public static final int NEWLINE=23; + public static final int NULL=24; + public static final int PARAMS=25; + public static final int PILHA=26; + public static final int REF=27; + public static final int RETURN=28; + public static final int STORE=29; + public static final int TIPO_REF=30; + public static final int VOID=31; + public static final int WS=32; + + // delegates + // delegators + public Lexer[] getDelegates() { + return new Lexer[] {}; + } + + public AssemblerLexer() {} + public AssemblerLexer(CharStream input) { + this(input, new RecognizerSharedState()); + } + public AssemblerLexer(CharStream input, RecognizerSharedState state) { + super(input,state); + } + public String getGrammarFileName() { return "C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g"; } + + // $ANTLR start "T__33" + public final void mT__33() throws RecognitionException { + try { + int _type = T__33; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:6:7: ( '(' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:6:9: '(' + { + match('('); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__33" + + // $ANTLR start "T__34" + public final void mT__34() throws RecognitionException { + try { + int _type = T__34; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:7:7: ( '()' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:7:9: '()' + { + match("()"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__34" + + // $ANTLR start "T__35" + public final void mT__35() throws RecognitionException { + try { + int _type = T__35; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:8:7: ( ')' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:8:9: ')' + { + match(')'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__35" + + // $ANTLR start "T__36" + public final void mT__36() throws RecognitionException { + try { + int _type = T__36; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:9:7: ( '.class' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:9:9: '.class' + { + match(".class"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__36" + + // $ANTLR start "T__37" + public final void mT__37() throws RecognitionException { + try { + int _type = T__37; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:10:7: ( '.end class' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:10:9: '.end class' + { + match(".end class"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__37" + + // $ANTLR start "T__38" + public final void mT__38() throws RecognitionException { + try { + int _type = T__38; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:11:7: ( '.end method' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:11:9: '.end method' + { + match(".end method"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__38" + + // $ANTLR start "T__39" + public final void mT__39() throws RecognitionException { + try { + int _type = T__39; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:12:7: ( '.field' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:12:9: '.field' + { + match(".field"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__39" + + // $ANTLR start "T__40" + public final void mT__40() throws RecognitionException { + try { + int _type = T__40; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:13:7: ( '.limit locals' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:13:9: '.limit locals' + { + match(".limit locals"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__40" + + // $ANTLR start "T__41" + public final void mT__41() throws RecognitionException { + try { + int _type = T__41; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:14:7: ( '.method' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:14:9: '.method' + { + match(".method"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__41" + + // $ANTLR start "T__42" + public final void mT__42() throws RecognitionException { + try { + int _type = T__42; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:15:7: ( '.super' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:15:9: '.super' + { + match(".super"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__42" + + // $ANTLR start "T__43" + public final void mT__43() throws RecognitionException { + try { + int _type = T__43; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:16:7: ( ':' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:16:9: ':' + { + match(':'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__43" + + // $ANTLR start "T__44" + public final void mT__44() throws RecognitionException { + try { + int _type = T__44; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:17:7: ( 'aconst_null' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:17:9: 'aconst_null' + { + match("aconst_null"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__44" + + // $ANTLR start "T__45" + public final void mT__45() throws RecognitionException { + try { + int _type = T__45; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:18:7: ( 'aload' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:18:9: 'aload' + { + match("aload"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__45" + + // $ANTLR start "T__46" + public final void mT__46() throws RecognitionException { + try { + int _type = T__46; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:19:7: ( 'aload_0' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:19:9: 'aload_0' + { + match("aload_0"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__46" + + // $ANTLR start "T__47" + public final void mT__47() throws RecognitionException { + try { + int _type = T__47; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:20:7: ( 'aload_1' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:20:9: 'aload_1' + { + match("aload_1"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__47" + + // $ANTLR start "T__48" + public final void mT__48() throws RecognitionException { + try { + int _type = T__48; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:21:7: ( 'aload_2' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:21:9: 'aload_2' + { + match("aload_2"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__48" + + // $ANTLR start "T__49" + public final void mT__49() throws RecognitionException { + try { + int _type = T__49; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:22:7: ( 'aload_3' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:22:9: 'aload_3' + { + match("aload_3"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__49" + + // $ANTLR start "T__50" + public final void mT__50() throws RecognitionException { + try { + int _type = T__50; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:23:7: ( 'areturn' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:23:9: 'areturn' + { + match("areturn"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__50" + + // $ANTLR start "T__51" + public final void mT__51() throws RecognitionException { + try { + int _type = T__51; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:24:7: ( 'astore' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:24:9: 'astore' + { + match("astore"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__51" + + // $ANTLR start "T__52" + public final void mT__52() throws RecognitionException { + try { + int _type = T__52; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:25:7: ( 'astore_0' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:25:9: 'astore_0' + { + match("astore_0"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__52" + + // $ANTLR start "T__53" + public final void mT__53() throws RecognitionException { + try { + int _type = T__53; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:26:7: ( 'astore_1' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:26:9: 'astore_1' + { + match("astore_1"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__53" + + // $ANTLR start "T__54" + public final void mT__54() throws RecognitionException { + try { + int _type = T__54; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:27:7: ( 'astore_2' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:27:9: 'astore_2' + { + match("astore_2"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__54" + + // $ANTLR start "T__55" + public final void mT__55() throws RecognitionException { + try { + int _type = T__55; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:28:7: ( 'astore_3' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:28:9: 'astore_3' + { + match("astore_3"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__55" + + // $ANTLR start "T__56" + public final void mT__56() throws RecognitionException { + try { + int _type = T__56; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:29:7: ( 'dup' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:29:9: 'dup' + { + match("dup"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__56" + + // $ANTLR start "T__57" + public final void mT__57() throws RecognitionException { + try { + int _type = T__57; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:30:7: ( 'getfield' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:30:9: 'getfield' + { + match("getfield"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__57" + + // $ANTLR start "T__58" + public final void mT__58() throws RecognitionException { + try { + int _type = T__58; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:31:7: ( 'getstatic' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:31:9: 'getstatic' + { + match("getstatic"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__58" + + // $ANTLR start "T__59" + public final void mT__59() throws RecognitionException { + try { + int _type = T__59; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:32:7: ( 'goto' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:32:9: 'goto' + { + match("goto"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__59" + + // $ANTLR start "T__60" + public final void mT__60() throws RecognitionException { + try { + int _type = T__60; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:33:7: ( 'iadd' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:33:9: 'iadd' + { + match("iadd"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__60" + + // $ANTLR start "T__61" + public final void mT__61() throws RecognitionException { + try { + int _type = T__61; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:34:7: ( 'iand' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:34:9: 'iand' + { + match("iand"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__61" + + // $ANTLR start "T__62" + public final void mT__62() throws RecognitionException { + try { + int _type = T__62; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:35:7: ( 'iconst_0' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:35:9: 'iconst_0' + { + match("iconst_0"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__62" + + // $ANTLR start "T__63" + public final void mT__63() throws RecognitionException { + try { + int _type = T__63; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:36:7: ( 'iconst_1' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:36:9: 'iconst_1' + { + match("iconst_1"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__63" + + // $ANTLR start "T__64" + public final void mT__64() throws RecognitionException { + try { + int _type = T__64; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:37:7: ( 'iconst_2' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:37:9: 'iconst_2' + { + match("iconst_2"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__64" + + // $ANTLR start "T__65" + public final void mT__65() throws RecognitionException { + try { + int _type = T__65; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:38:7: ( 'iconst_3' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:38:9: 'iconst_3' + { + match("iconst_3"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__65" + + // $ANTLR start "T__66" + public final void mT__66() throws RecognitionException { + try { + int _type = T__66; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:39:7: ( 'iconst_4' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:39:9: 'iconst_4' + { + match("iconst_4"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__66" + + // $ANTLR start "T__67" + public final void mT__67() throws RecognitionException { + try { + int _type = T__67; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:40:7: ( 'iconst_5' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:40:9: 'iconst_5' + { + match("iconst_5"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__67" + + // $ANTLR start "T__68" + public final void mT__68() throws RecognitionException { + try { + int _type = T__68; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:41:7: ( 'iconst_m1' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:41:9: 'iconst_m1' + { + match("iconst_m1"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__68" + + // $ANTLR start "T__69" + public final void mT__69() throws RecognitionException { + try { + int _type = T__69; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:42:7: ( 'idiv' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:42:9: 'idiv' + { + match("idiv"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__69" + + // $ANTLR start "T__70" + public final void mT__70() throws RecognitionException { + try { + int _type = T__70; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:43:7: ( 'if_icmpeq' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:43:9: 'if_icmpeq' + { + match("if_icmpeq"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__70" + + // $ANTLR start "T__71" + public final void mT__71() throws RecognitionException { + try { + int _type = T__71; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:44:7: ( 'if_icmpge' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:44:9: 'if_icmpge' + { + match("if_icmpge"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__71" + + // $ANTLR start "T__72" + public final void mT__72() throws RecognitionException { + try { + int _type = T__72; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:45:7: ( 'if_icmpgt' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:45:9: 'if_icmpgt' + { + match("if_icmpgt"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__72" + + // $ANTLR start "T__73" + public final void mT__73() throws RecognitionException { + try { + int _type = T__73; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:46:7: ( 'if_icmple' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:46:9: 'if_icmple' + { + match("if_icmple"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__73" + + // $ANTLR start "T__74" + public final void mT__74() throws RecognitionException { + try { + int _type = T__74; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:47:7: ( 'if_icmplt' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:47:9: 'if_icmplt' + { + match("if_icmplt"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__74" + + // $ANTLR start "T__75" + public final void mT__75() throws RecognitionException { + try { + int _type = T__75; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:48:7: ( 'if_icmpne' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:48:9: 'if_icmpne' + { + match("if_icmpne"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__75" + + // $ANTLR start "T__76" + public final void mT__76() throws RecognitionException { + try { + int _type = T__76; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:49:7: ( 'ifeq' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:49:9: 'ifeq' + { + match("ifeq"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__76" + + // $ANTLR start "T__77" + public final void mT__77() throws RecognitionException { + try { + int _type = T__77; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:50:7: ( 'ifge' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:50:9: 'ifge' + { + match("ifge"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__77" + + // $ANTLR start "T__78" + public final void mT__78() throws RecognitionException { + try { + int _type = T__78; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:51:7: ( 'ifgt' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:51:9: 'ifgt' + { + match("ifgt"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__78" + + // $ANTLR start "T__79" + public final void mT__79() throws RecognitionException { + try { + int _type = T__79; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:52:7: ( 'ifle' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:52:9: 'ifle' + { + match("ifle"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__79" + + // $ANTLR start "T__80" + public final void mT__80() throws RecognitionException { + try { + int _type = T__80; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:53:7: ( 'iflt' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:53:9: 'iflt' + { + match("iflt"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__80" + + // $ANTLR start "T__81" + public final void mT__81() throws RecognitionException { + try { + int _type = T__81; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:54:7: ( 'ifne' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:54:9: 'ifne' + { + match("ifne"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__81" + + // $ANTLR start "T__82" + public final void mT__82() throws RecognitionException { + try { + int _type = T__82; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:55:7: ( 'iinc' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:55:9: 'iinc' + { + match("iinc"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__82" + + // $ANTLR start "T__83" + public final void mT__83() throws RecognitionException { + try { + int _type = T__83; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:56:7: ( 'iload' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:56:9: 'iload' + { + match("iload"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__83" + + // $ANTLR start "T__84" + public final void mT__84() throws RecognitionException { + try { + int _type = T__84; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:57:7: ( 'iload_0' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:57:9: 'iload_0' + { + match("iload_0"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__84" + + // $ANTLR start "T__85" + public final void mT__85() throws RecognitionException { + try { + int _type = T__85; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:7: ( 'iload_1' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:9: 'iload_1' + { + match("iload_1"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__85" + + // $ANTLR start "T__86" + public final void mT__86() throws RecognitionException { + try { + int _type = T__86; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:59:7: ( 'iload_2' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:59:9: 'iload_2' + { + match("iload_2"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__86" + + // $ANTLR start "T__87" + public final void mT__87() throws RecognitionException { + try { + int _type = T__87; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:60:7: ( 'iload_3' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:60:9: 'iload_3' + { + match("iload_3"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__87" + + // $ANTLR start "T__88" + public final void mT__88() throws RecognitionException { + try { + int _type = T__88; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:61:7: ( 'imul' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:61:9: 'imul' + { + match("imul"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__88" + + // $ANTLR start "T__89" + public final void mT__89() throws RecognitionException { + try { + int _type = T__89; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:62:7: ( 'ineg' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:62:9: 'ineg' + { + match("ineg"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__89" + + // $ANTLR start "T__90" + public final void mT__90() throws RecognitionException { + try { + int _type = T__90; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:63:7: ( 'invokespecial' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:63:9: 'invokespecial' + { + match("invokespecial"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__90" + + // $ANTLR start "T__91" + public final void mT__91() throws RecognitionException { + try { + int _type = T__91; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:64:7: ( 'invokestatic' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:64:9: 'invokestatic' + { + match("invokestatic"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__91" + + // $ANTLR start "T__92" + public final void mT__92() throws RecognitionException { + try { + int _type = T__92; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:65:7: ( 'invokevirtual' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:65:9: 'invokevirtual' + { + match("invokevirtual"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__92" + + // $ANTLR start "T__93" + public final void mT__93() throws RecognitionException { + try { + int _type = T__93; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:66:7: ( 'ior' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:66:9: 'ior' + { + match("ior"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__93" + + // $ANTLR start "T__94" + public final void mT__94() throws RecognitionException { + try { + int _type = T__94; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:67:7: ( 'irem' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:67:9: 'irem' + { + match("irem"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__94" + + // $ANTLR start "T__95" + public final void mT__95() throws RecognitionException { + try { + int _type = T__95; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:68:7: ( 'ireturn' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:68:9: 'ireturn' + { + match("ireturn"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__95" + + // $ANTLR start "T__96" + public final void mT__96() throws RecognitionException { + try { + int _type = T__96; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:69:7: ( 'istore' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:69:9: 'istore' + { + match("istore"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__96" + + // $ANTLR start "T__97" + public final void mT__97() throws RecognitionException { + try { + int _type = T__97; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:70:7: ( 'istore_0' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:70:9: 'istore_0' + { + match("istore_0"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__97" + + // $ANTLR start "T__98" + public final void mT__98() throws RecognitionException { + try { + int _type = T__98; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:71:7: ( 'istore_1' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:71:9: 'istore_1' + { + match("istore_1"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__98" + + // $ANTLR start "T__99" + public final void mT__99() throws RecognitionException { + try { + int _type = T__99; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:72:7: ( 'istore_2' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:72:9: 'istore_2' + { + match("istore_2"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__99" + + // $ANTLR start "T__100" + public final void mT__100() throws RecognitionException { + try { + int _type = T__100; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:73:8: ( 'istore_3' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:73:10: 'istore_3' + { + match("istore_3"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__100" + + // $ANTLR start "T__101" + public final void mT__101() throws RecognitionException { + try { + int _type = T__101; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:74:8: ( 'isub' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:74:10: 'isub' + { + match("isub"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__101" + + // $ANTLR start "T__102" + public final void mT__102() throws RecognitionException { + try { + int _type = T__102; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:75:8: ( 'ixor' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:75:10: 'ixor' + { + match("ixor"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__102" + + // $ANTLR start "T__103" + public final void mT__103() throws RecognitionException { + try { + int _type = T__103; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:8: ( 'ldc' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:10: 'ldc' + { + match("ldc"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__103" + + // $ANTLR start "T__104" + public final void mT__104() throws RecognitionException { + try { + int _type = T__104; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:77:8: ( 'new' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:77:10: 'new' + { + match("new"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__104" + + // $ANTLR start "T__105" + public final void mT__105() throws RecognitionException { + try { + int _type = T__105; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:78:8: ( 'nop' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:78:10: 'nop' + { + match("nop"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__105" + + // $ANTLR start "T__106" + public final void mT__106() throws RecognitionException { + try { + int _type = T__106; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:79:8: ( 'pop' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:79:10: 'pop' + { + match("pop"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__106" + + // $ANTLR start "T__107" + public final void mT__107() throws RecognitionException { + try { + int _type = T__107; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:8: ( 'pop2' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:10: 'pop2' + { + match("pop2"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__107" + + // $ANTLR start "T__108" + public final void mT__108() throws RecognitionException { + try { + int _type = T__108; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:81:8: ( 'putfield' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:81:10: 'putfield' + { + match("putfield"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__108" + + // $ANTLR start "T__109" + public final void mT__109() throws RecognitionException { + try { + int _type = T__109; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:82:8: ( 'putstatic' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:82:10: 'putstatic' + { + match("putstatic"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__109" + + // $ANTLR start "T__110" + public final void mT__110() throws RecognitionException { + try { + int _type = T__110; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:8: ( 'return' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:10: 'return' + { + match("return"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__110" + + // $ANTLR start "T__111" + public final void mT__111() throws RecognitionException { + try { + int _type = T__111; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:8: ( 'static' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:10: 'static' + { + match("static"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__111" + + // $ANTLR start "INIT" + public final void mINIT() throws RecognitionException { + try { + int _type = INIT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:214:6: ( '' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:214:8: '' + { + match(""); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "INIT" + + // $ANTLR start "INT" + public final void mINT() throws RecognitionException { + try { + int _type = INT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:216:5: ( 'I' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:216:7: 'I' + { + match('I'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "INT" + + // $ANTLR start "VOID" + public final void mVOID() throws RecognitionException { + try { + int _type = VOID; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:218:6: ( 'V' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:218:8: 'V' + { + match('V'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "VOID" + + // $ANTLR start "NULL" + public final void mNULL() throws RecognitionException { + try { + int _type = NULL; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:220:6: ( ( 'null' | 'NULL' ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:220:8: ( 'null' | 'NULL' ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:220:8: ( 'null' | 'NULL' ) + int alt1=2; + int LA1_0 = input.LA(1); + + if ( (LA1_0=='n') ) { + alt1=1; + } + else if ( (LA1_0=='N') ) { + alt1=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 1, 0, input); + + throw nvae; + + } + switch (alt1) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:220:9: 'null' + { + match("null"); + + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:220:18: 'NULL' + { + match("NULL"); + + + + } + break; + + } + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "NULL" + + // $ANTLR start "INTEIRO" + public final void mINTEIRO() throws RecognitionException { + try { + int _type = INTEIRO; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:222:9: ( ( '-' )? ( '0' .. '9' )+ ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:222:11: ( '-' )? ( '0' .. '9' )+ + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:222:11: ( '-' )? + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0=='-') ) { + alt2=1; + } + switch (alt2) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:222:11: '-' + { + match('-'); + + } + break; + + } + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:222:16: ( '0' .. '9' )+ + int cnt3=0; + loop3: + do { + int alt3=2; + int LA3_0 = input.LA(1); + + if ( ((LA3_0 >= '0' && LA3_0 <= '9')) ) { + alt3=1; + } + + + switch (alt3) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g: + { + if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + } + break; + + default : + if ( cnt3 >= 1 ) break loop3; + EarlyExitException eee = + new EarlyExitException(3, input); + throw eee; + } + cnt3++; + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "INTEIRO" + + // $ANTLR start "REF" + public final void mREF() throws RecognitionException { + try { + int _type = REF; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:224:6: ( ( ID '/' )+ ( ID | INIT ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:224:9: ( ID '/' )+ ( ID | INIT ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:224:9: ( ID '/' )+ + int cnt4=0; + loop4: + do { + int alt4=2; + alt4 = dfa4.predict(input); + switch (alt4) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:224:10: ID '/' + { + mID(); + + + match('/'); + + } + break; + + default : + if ( cnt4 >= 1 ) break loop4; + EarlyExitException eee = + new EarlyExitException(4, input); + throw eee; + } + cnt4++; + } while (true); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:224:19: ( ID | INIT ) + int alt5=2; + int LA5_0 = input.LA(1); + + if ( ((LA5_0 >= 'A' && LA5_0 <= 'Z')||LA5_0=='_'||(LA5_0 >= 'a' && LA5_0 <= 'z')) ) { + alt5=1; + } + else if ( (LA5_0=='<') ) { + alt5=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 5, 0, input); + + throw nvae; + + } + switch (alt5) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:224:21: ID + { + mID(); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:224:26: INIT + { + mINIT(); + + + } + break; + + } + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "REF" + + // $ANTLR start "TIPO_REF" + public final void mTIPO_REF() throws RecognitionException { + try { + int _type = TIPO_REF; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:226:9: ( ( 'L' ID ( '/' ID )* ';' | INT )+ ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:226:11: ( 'L' ID ( '/' ID )* ';' | INT )+ + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:226:11: ( 'L' ID ( '/' ID )* ';' | INT )+ + int cnt7=0; + loop7: + do { + int alt7=3; + int LA7_0 = input.LA(1); + + if ( (LA7_0=='L') ) { + alt7=1; + } + else if ( (LA7_0=='I') ) { + alt7=2; + } + + + switch (alt7) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:226:12: 'L' ID ( '/' ID )* ';' + { + match('L'); + + mID(); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:226:18: ( '/' ID )* + loop6: + do { + int alt6=2; + int LA6_0 = input.LA(1); + + if ( (LA6_0=='/') ) { + alt6=1; + } + + + switch (alt6) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:226:19: '/' ID + { + match('/'); + + mID(); + + + } + break; + + default : + break loop6; + } + } while (true); + + + match(';'); + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:226:33: INT + { + mINT(); + + + } + break; + + default : + if ( cnt7 >= 1 ) break loop7; + EarlyExitException eee = + new EarlyExitException(7, input); + throw eee; + } + cnt7++; + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "TIPO_REF" + + // $ANTLR start "ID" + public final void mID() throws RecognitionException { + try { + int _type = ID; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:228:3: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' | '_' )* ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:228:5: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' | '_' )* + { + if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:228:33: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' | '_' )* + loop8: + do { + int alt8=2; + int LA8_0 = input.LA(1); + + if ( (LA8_0=='.'||(LA8_0 >= '0' && LA8_0 <= '9')||(LA8_0 >= 'A' && LA8_0 <= 'Z')||LA8_0=='_'||(LA8_0 >= 'a' && LA8_0 <= 'z')) ) { + alt8=1; + } + + + switch (alt8) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g: + { + if ( input.LA(1)=='.'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + } + break; + + default : + break loop8; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "ID" + + // $ANTLR start "NEWLINE" + public final void mNEWLINE() throws RecognitionException { + try { + int _type = NEWLINE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:230:9: ( ( '\\n' )+ ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:230:11: ( '\\n' )+ + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:230:11: ( '\\n' )+ + int cnt9=0; + loop9: + do { + int alt9=2; + int LA9_0 = input.LA(1); + + if ( (LA9_0=='\n') ) { + alt9=1; + } + + + switch (alt9) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:230:11: '\\n' + { + match('\n'); + + } + break; + + default : + if ( cnt9 >= 1 ) break loop9; + EarlyExitException eee = + new EarlyExitException(9, input); + throw eee; + } + cnt9++; + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "NEWLINE" + + // $ANTLR start "WS" + public final void mWS() throws RecognitionException { + try { + int _type = WS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:232:4: ( ( ' ' | '\\t' | '\\r' ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:232:6: ( ' ' | '\\t' | '\\r' ) + { + if ( input.LA(1)=='\t'||input.LA(1)=='\r'||input.LA(1)==' ' ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + _channel=HIDDEN; + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "WS" + + public void mTokens() throws RecognitionException { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:8: ( T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | T__94 | T__95 | T__96 | T__97 | T__98 | T__99 | T__100 | T__101 | T__102 | T__103 | T__104 | T__105 | T__106 | T__107 | T__108 | T__109 | T__110 | T__111 | INIT | INT | VOID | NULL | INTEIRO | REF | TIPO_REF | ID | NEWLINE | WS ) + int alt10=89; + alt10 = dfa10.predict(input); + switch (alt10) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:10: T__33 + { + mT__33(); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:16: T__34 + { + mT__34(); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:22: T__35 + { + mT__35(); + + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:28: T__36 + { + mT__36(); + + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:34: T__37 + { + mT__37(); + + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:40: T__38 + { + mT__38(); + + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:46: T__39 + { + mT__39(); + + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:52: T__40 + { + mT__40(); + + + } + break; + case 9 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:58: T__41 + { + mT__41(); + + + } + break; + case 10 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:64: T__42 + { + mT__42(); + + + } + break; + case 11 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:70: T__43 + { + mT__43(); + + + } + break; + case 12 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:76: T__44 + { + mT__44(); + + + } + break; + case 13 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:82: T__45 + { + mT__45(); + + + } + break; + case 14 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:88: T__46 + { + mT__46(); + + + } + break; + case 15 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:94: T__47 + { + mT__47(); + + + } + break; + case 16 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:100: T__48 + { + mT__48(); + + + } + break; + case 17 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:106: T__49 + { + mT__49(); + + + } + break; + case 18 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:112: T__50 + { + mT__50(); + + + } + break; + case 19 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:118: T__51 + { + mT__51(); + + + } + break; + case 20 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:124: T__52 + { + mT__52(); + + + } + break; + case 21 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:130: T__53 + { + mT__53(); + + + } + break; + case 22 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:136: T__54 + { + mT__54(); + + + } + break; + case 23 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:142: T__55 + { + mT__55(); + + + } + break; + case 24 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:148: T__56 + { + mT__56(); + + + } + break; + case 25 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:154: T__57 + { + mT__57(); + + + } + break; + case 26 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:160: T__58 + { + mT__58(); + + + } + break; + case 27 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:166: T__59 + { + mT__59(); + + + } + break; + case 28 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:172: T__60 + { + mT__60(); + + + } + break; + case 29 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:178: T__61 + { + mT__61(); + + + } + break; + case 30 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:184: T__62 + { + mT__62(); + + + } + break; + case 31 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:190: T__63 + { + mT__63(); + + + } + break; + case 32 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:196: T__64 + { + mT__64(); + + + } + break; + case 33 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:202: T__65 + { + mT__65(); + + + } + break; + case 34 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:208: T__66 + { + mT__66(); + + + } + break; + case 35 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:214: T__67 + { + mT__67(); + + + } + break; + case 36 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:220: T__68 + { + mT__68(); + + + } + break; + case 37 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:226: T__69 + { + mT__69(); + + + } + break; + case 38 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:232: T__70 + { + mT__70(); + + + } + break; + case 39 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:238: T__71 + { + mT__71(); + + + } + break; + case 40 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:244: T__72 + { + mT__72(); + + + } + break; + case 41 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:250: T__73 + { + mT__73(); + + + } + break; + case 42 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:256: T__74 + { + mT__74(); + + + } + break; + case 43 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:262: T__75 + { + mT__75(); + + + } + break; + case 44 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:268: T__76 + { + mT__76(); + + + } + break; + case 45 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:274: T__77 + { + mT__77(); + + + } + break; + case 46 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:280: T__78 + { + mT__78(); + + + } + break; + case 47 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:286: T__79 + { + mT__79(); + + + } + break; + case 48 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:292: T__80 + { + mT__80(); + + + } + break; + case 49 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:298: T__81 + { + mT__81(); + + + } + break; + case 50 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:304: T__82 + { + mT__82(); + + + } + break; + case 51 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:310: T__83 + { + mT__83(); + + + } + break; + case 52 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:316: T__84 + { + mT__84(); + + + } + break; + case 53 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:322: T__85 + { + mT__85(); + + + } + break; + case 54 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:328: T__86 + { + mT__86(); + + + } + break; + case 55 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:334: T__87 + { + mT__87(); + + + } + break; + case 56 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:340: T__88 + { + mT__88(); + + + } + break; + case 57 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:346: T__89 + { + mT__89(); + + + } + break; + case 58 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:352: T__90 + { + mT__90(); + + + } + break; + case 59 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:358: T__91 + { + mT__91(); + + + } + break; + case 60 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:364: T__92 + { + mT__92(); + + + } + break; + case 61 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:370: T__93 + { + mT__93(); + + + } + break; + case 62 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:376: T__94 + { + mT__94(); + + + } + break; + case 63 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:382: T__95 + { + mT__95(); + + + } + break; + case 64 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:388: T__96 + { + mT__96(); + + + } + break; + case 65 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:394: T__97 + { + mT__97(); + + + } + break; + case 66 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:400: T__98 + { + mT__98(); + + + } + break; + case 67 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:406: T__99 + { + mT__99(); + + + } + break; + case 68 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:412: T__100 + { + mT__100(); + + + } + break; + case 69 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:419: T__101 + { + mT__101(); + + + } + break; + case 70 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:426: T__102 + { + mT__102(); + + + } + break; + case 71 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:433: T__103 + { + mT__103(); + + + } + break; + case 72 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:440: T__104 + { + mT__104(); + + + } + break; + case 73 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:447: T__105 + { + mT__105(); + + + } + break; + case 74 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:454: T__106 + { + mT__106(); + + + } + break; + case 75 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:461: T__107 + { + mT__107(); + + + } + break; + case 76 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:468: T__108 + { + mT__108(); + + + } + break; + case 77 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:475: T__109 + { + mT__109(); + + + } + break; + case 78 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:482: T__110 + { + mT__110(); + + + } + break; + case 79 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:489: T__111 + { + mT__111(); + + + } + break; + case 80 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:496: INIT + { + mINIT(); + + + } + break; + case 81 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:501: INT + { + mINT(); + + + } + break; + case 82 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:505: VOID + { + mVOID(); + + + } + break; + case 83 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:510: NULL + { + mNULL(); + + + } + break; + case 84 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:515: INTEIRO + { + mINTEIRO(); + + + } + break; + case 85 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:523: REF + { + mREF(); + + + } + break; + case 86 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:527: TIPO_REF + { + mTIPO_REF(); + + + } + break; + case 87 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:536: ID + { + mID(); + + + } + break; + case 88 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:539: NEWLINE + { + mNEWLINE(); + + + } + break; + case 89 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:1:547: WS + { + mWS(); + + + } + break; + + } + + } + + + protected DFA4 dfa4 = new DFA4(this); + protected DFA10 dfa10 = new DFA10(this); + static final String DFA4_eotS = + "\1\uffff\1\2\1\uffff\1\2\1\uffff"; + static final String DFA4_eofS = + "\5\uffff"; + static final String DFA4_minS = + "\1\74\1\56\1\uffff\1\56\1\uffff"; + static final String DFA4_maxS = + "\2\172\1\uffff\1\172\1\uffff"; + static final String DFA4_acceptS = + "\2\uffff\1\2\1\uffff\1\1"; + static final String DFA4_specialS = + "\5\uffff}>"; + static final String[] DFA4_transitionS = { + "\1\2\4\uffff\32\1\4\uffff\1\1\1\uffff\32\1", + "\1\3\1\4\12\3\7\uffff\32\3\4\uffff\1\3\1\uffff\32\3", + "", + "\1\3\1\4\12\3\7\uffff\32\3\4\uffff\1\3\1\uffff\32\3", + "" + }; + + static final short[] DFA4_eot = DFA.unpackEncodedString(DFA4_eotS); + static final short[] DFA4_eof = DFA.unpackEncodedString(DFA4_eofS); + static final char[] DFA4_min = DFA.unpackEncodedStringToUnsignedChars(DFA4_minS); + static final char[] DFA4_max = DFA.unpackEncodedStringToUnsignedChars(DFA4_maxS); + static final short[] DFA4_accept = DFA.unpackEncodedString(DFA4_acceptS); + static final short[] DFA4_special = DFA.unpackEncodedString(DFA4_specialS); + static final short[][] DFA4_transition; + + static { + int numStates = DFA4_transitionS.length; + DFA4_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA10_transitionS = { + "\1\26\1\25\2\uffff\1\26\22\uffff\1\26\7\uffff\1\1\1\2\3\uffff"+ + "\1\22\1\3\1\uffff\12\22\1\4\1\uffff\1\16\4\uffff\10\24\1\17"+ + "\2\24\1\23\1\24\1\21\7\24\1\20\4\24\4\uffff\1\24\1\uffff\1\5"+ + "\2\24\1\6\2\24\1\7\1\24\1\10\2\24\1\11\1\24\1\12\1\24\1\13\1"+ + "\24\1\14\1\15\7\24", + "\1\27", + "", + "\1\31\1\uffff\1\32\1\33\5\uffff\1\34\1\35\5\uffff\1\36", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\37\10\43\1\40\5\43\1\41\1\42\7\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\24\43\1"+ + "\46\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\47\11\43\1\50\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\51\1"+ + "\43\1\52\1\53\1\43\1\54\2\43\1\55\2\43\1\56\1\57\1\60\1\61\2"+ + "\43\1\62\1\63\4\43\1\64\2\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\65\26\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\66\11\43\1\67\5\43\1\70\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\71\5\43\1\72\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\73\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\74\6\43", + "", + "\1\43\1\45\12\43\7\uffff\10\43\1\77\2\43\1\76\16\43\4\uffff"+ + "\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\24\43\1\101\5\43\4\uffff\1\43\1\uffff"+ + "\32\43", + "", + "\1\43\1\45\12\43\7\uffff\32\102\4\uffff\1\102\1\uffff\32\102", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "", + "", + "", + "", + "", + "\1\103", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\104\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\105\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\106\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\107\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\17\43\1"+ + "\110\12\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\111\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\112\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\113\11\43\1\114\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\115\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\116\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\117\1\uffff\4\43\1"+ + "\120\1\43\1\121\4\43\1\122\1\43\1\123\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\15\43\1"+ + "\124\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\125\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\24\43\1"+ + "\126\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\127\20\43\1\130\4\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\131\10\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\132\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\133\1\134\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\135\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\136\27\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\26\43\1"+ + "\137\3\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\17\43\1"+ + "\140\12\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\141\16\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\17\43\1"+ + "\142\12\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\143\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\144\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\145\31"+ + "\43", + "", + "\1\43\1\45\12\43\7\uffff\32\102\4\uffff\1\102\1\uffff\32\102", + "\1\43\1\45\12\43\7\uffff\10\43\1\77\2\43\1\76\16\43\4\uffff"+ + "\1\43\1\uffff\32\43", + "", + "\1\43\1\45\12\43\7\uffff\13\43\1\147\16\43\4\uffff\1\43\1\uffff"+ + "\32\43", + "\1\151\1\150\12\151\1\uffff\1\146\5\uffff\32\151\4\uffff\1"+ + "\151\1\uffff\32\151", + "\1\152", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\15\43\1"+ + "\153\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\154\31"+ + "\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\155\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\156\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\5\43\1"+ + "\160\14\43\1\161\7\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\162\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\163\26\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\164\26\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\15\43\1"+ + "\165\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\25\43\1"+ + "\166\4\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\167\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\20\43\1"+ + "\170\11\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\171\16\43\1\172\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\173\16\43\1\174\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\175\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\176\27\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\177\31"+ + "\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u0080\16\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\6\43\1"+ + "\u0081\23\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\u0082\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\14\43\1"+ + "\u0084\6\43\1\u0085\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\16\43\1"+ + "\u0086\13\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\43\1"+ + "\u0087\30\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\u0088\10\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u008c\16\43", + "\1\43\1\45\2\43\1\u008d\7\43\7\uffff\32\43\4\uffff\1\43\1\uffff"+ + "\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\5\43\1"+ + "\u008f\14\43\1\u0090\7\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\24\43\1"+ + "\u0091\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u0092\6\43", + "", + "\1\43\1\45\12\43\7\uffff\13\43\1\u0093\16\43\4\uffff\1\43\1"+ + "\uffff\32\43", + "\1\45\4\uffff\32\u0094\4\uffff\1\u0094\1\uffff\32\u0094", + "\1\151\1\150\12\151\1\uffff\1\146\5\uffff\32\151\4\uffff\1"+ + "\151\1\uffff\32\151", + "\1\u0095", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\22\43\1"+ + "\u0096\7\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\u0097\26\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\24\43\1"+ + "\u0098\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\u0099\10\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u009a\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u009b\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\22\43\1"+ + "\u009f\7\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\u00a1\27\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\u00a9\26\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\12\43\1"+ + "\u00ac\17\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\24\43\1"+ + "\u00ae\5\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\u00af\10\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u00b4\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u00b5\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\u00b6\10\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u00b7\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\u00b8\1\150\12\u00b8\1\uffff\1\146\5\uffff\32\u00b8\4\uffff"+ + "\1\u00b8\1\uffff\32\u00b8", + "\1\u00b9\11\uffff\1\u00ba", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u00bb\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\u00bc\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\u00be\10\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u00bf\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u00c0\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\u00c1"+ + "\31\43", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u00c2\6\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\14\43\1"+ + "\u00c3\15\43", + "", + "", + "", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\u00c4\1\uffff\32\43", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u00c6\25\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\u00c7\10\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u00c8\25\43", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u00c9\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\u00ca"+ + "\31\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\15\43\1"+ + "\u00cb\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\u00cc\27\43", + "\1\u00b8\1\150\12\u00b8\1\uffff\1\146\5\uffff\32\u00b8\4\uffff"+ + "\1\u00b8\1\uffff\32\u00b8", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\u00cd\1\uffff\32\43", + "\1\43\1\45\1\u00ce\1\u00cf\1\u00d0\1\u00d1\6\43\7\uffff\32"+ + "\43\4\uffff\1\43\1\uffff\32\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\15\43\1"+ + "\u00d2\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\u00d3\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u00d5\16\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u00d6\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\u00d7\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\17\43\1"+ + "\u00d8\12\43", + "\1\43\1\45\1\u00d9\1\u00da\1\u00db\1\u00dc\6\43\7\uffff\32"+ + "\43\4\uffff\1\43\1\uffff\32\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\22\43\1"+ + "\u00dd\2\43\1\u00de\4\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\15\43\1"+ + "\u00df\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\u00e0\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u00e2\16\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u00e3\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\15\43\1"+ + "\u00e6\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\1\u00ec\1\u00ed\1\u00ee\1\u00ef\6\43\7\uffff\32"+ + "\43\4\uffff\1\43\1\uffff\32\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\u00f0\26\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u00f1\21\43", + "\1\43\1\45\1\u00f2\1\u00f3\1\u00f4\1\u00f5\1\u00f6\1\u00f7"+ + "\4\43\7\uffff\32\43\4\uffff\1\43\1\uffff\14\43\1\u00f8\15\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u00f9\1\43\1\u00fa\4\43\1\u00fb\1\43\1\u00fc\14\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\17\43\1"+ + "\u0101\3\43\1\u0102\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u0103\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\1\u0105\1\u0106\1\u0107\1\u0108\6\43\7\uffff\32"+ + "\43\4\uffff\1\43\1\uffff\32\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\3\43\1"+ + "\u0109\26\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u010a\21\43", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\24\43\1"+ + "\u010b\5\43", + "", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\u0111\27\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\1\43\1\u0118\10\43\7\uffff\32\43\4\uffff\1\43\1"+ + "\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\20\43\1"+ + "\u0119\11\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u011a\16\43\1\u011b\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u011c\16\43\1\u011d\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u011e\25\43", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\4\43\1"+ + "\u011f\25\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\u0120"+ + "\31\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\21\43\1"+ + "\u0121\10\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\u0127\27\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u0128\16\43", + "", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "", + "", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\u0131\27\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u0132\6\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\23\43\1"+ + "\u0133\6\43", + "", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u0135\16\43", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u0136\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\10\43\1"+ + "\u0137\21\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\24\43\1"+ + "\u0138\5\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\u013a"+ + "\31\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\2\43\1"+ + "\u013b\27\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\1\u013c"+ + "\31\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u013d\16\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\13\43\1"+ + "\u013f\16\43", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "", + "\1\43\1\45\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43", + "", + "" + }; + + static final short[] DFA10_eot = DFA.unpackEncodedString(DFA10_eotS); + static final short[] DFA10_eof = DFA.unpackEncodedString(DFA10_eofS); + static final char[] DFA10_min = DFA.unpackEncodedStringToUnsignedChars(DFA10_minS); + static final char[] DFA10_max = DFA.unpackEncodedStringToUnsignedChars(DFA10_maxS); + static final short[] DFA10_accept = DFA.unpackEncodedString(DFA10_acceptS); + static final short[] DFA10_special = DFA.unpackEncodedString(DFA10_specialS); + static final short[][] DFA10_transition; + + static { + int numStates = DFA10_transitionS.length; + DFA10_transition = new short[numStates][]; + for (int i=0; i", "", "", "", "ARGS", "ARITMETICA", "BODY", "CONSTR_DECL", "DESVIO", "EXTENDS", "FIELD_DECL", "ID", "INIT", "INT", "INTEIRO", "LABEL", "LIMIT", "LOAD", "LOGICA", "MEMBRO_CLASSE", "METHOD_CALL", "METHOD_DECL", "NEW", "NEWLINE", "NULL", "PARAMS", "PILHA", "REF", "RETURN", "STORE", "TIPO_REF", "VOID", "WS", "'('", "'()'", "')'", "'.class'", "'.end class'", "'.end method'", "'.field'", "'.limit locals'", "'.method'", "'.super'", "':'", "'aconst_null'", "'aload'", "'aload_0'", "'aload_1'", "'aload_2'", "'aload_3'", "'areturn'", "'astore'", "'astore_0'", "'astore_1'", "'astore_2'", "'astore_3'", "'dup'", "'getfield'", "'getstatic'", "'goto'", "'iadd'", "'iand'", "'iconst_0'", "'iconst_1'", "'iconst_2'", "'iconst_3'", "'iconst_4'", "'iconst_5'", "'iconst_m1'", "'idiv'", "'if_icmpeq'", "'if_icmpge'", "'if_icmpgt'", "'if_icmple'", "'if_icmplt'", "'if_icmpne'", "'ifeq'", "'ifge'", "'ifgt'", "'ifle'", "'iflt'", "'ifne'", "'iinc'", "'iload'", "'iload_0'", "'iload_1'", "'iload_2'", "'iload_3'", "'imul'", "'ineg'", "'invokespecial'", "'invokestatic'", "'invokevirtual'", "'ior'", "'irem'", "'ireturn'", "'istore'", "'istore_0'", "'istore_1'", "'istore_2'", "'istore_3'", "'isub'", "'ixor'", "'ldc'", "'new'", "'nop'", "'pop'", "'pop2'", "'putfield'", "'putstatic'", "'return'", "'static'" + }; + + public static final int EOF=-1; + public static final int T__33=33; + public static final int T__34=34; + public static final int T__35=35; + public static final int T__36=36; + public static final int T__37=37; + public static final int T__38=38; + public static final int T__39=39; + public static final int T__40=40; + public static final int T__41=41; + public static final int T__42=42; + public static final int T__43=43; + public static final int T__44=44; + public static final int T__45=45; + public static final int T__46=46; + public static final int T__47=47; + public static final int T__48=48; + public static final int T__49=49; + public static final int T__50=50; + public static final int T__51=51; + public static final int T__52=52; + public static final int T__53=53; + public static final int T__54=54; + public static final int T__55=55; + public static final int T__56=56; + public static final int T__57=57; + public static final int T__58=58; + public static final int T__59=59; + public static final int T__60=60; + public static final int T__61=61; + public static final int T__62=62; + public static final int T__63=63; + public static final int T__64=64; + public static final int T__65=65; + public static final int T__66=66; + public static final int T__67=67; + public static final int T__68=68; + public static final int T__69=69; + public static final int T__70=70; + public static final int T__71=71; + public static final int T__72=72; + public static final int T__73=73; + public static final int T__74=74; + public static final int T__75=75; + public static final int T__76=76; + public static final int T__77=77; + public static final int T__78=78; + public static final int T__79=79; + public static final int T__80=80; + public static final int T__81=81; + public static final int T__82=82; + public static final int T__83=83; + public static final int T__84=84; + public static final int T__85=85; + public static final int T__86=86; + public static final int T__87=87; + public static final int T__88=88; + public static final int T__89=89; + public static final int T__90=90; + public static final int T__91=91; + public static final int T__92=92; + public static final int T__93=93; + public static final int T__94=94; + public static final int T__95=95; + public static final int T__96=96; + public static final int T__97=97; + public static final int T__98=98; + public static final int T__99=99; + public static final int T__100=100; + public static final int T__101=101; + public static final int T__102=102; + public static final int T__103=103; + public static final int T__104=104; + public static final int T__105=105; + public static final int T__106=106; + public static final int T__107=107; + public static final int T__108=108; + public static final int T__109=109; + public static final int T__110=110; + public static final int T__111=111; + public static final int ARGS=4; + public static final int ARITMETICA=5; + public static final int BODY=6; + public static final int CONSTR_DECL=7; + public static final int DESVIO=8; + public static final int EXTENDS=9; + public static final int FIELD_DECL=10; + public static final int ID=11; + public static final int INIT=12; + public static final int INT=13; + public static final int INTEIRO=14; + public static final int LABEL=15; + public static final int LIMIT=16; + public static final int LOAD=17; + public static final int LOGICA=18; + public static final int MEMBRO_CLASSE=19; + public static final int METHOD_CALL=20; + public static final int METHOD_DECL=21; + public static final int NEW=22; + public static final int NEWLINE=23; + public static final int NULL=24; + public static final int PARAMS=25; + public static final int PILHA=26; + public static final int REF=27; + public static final int RETURN=28; + public static final int STORE=29; + public static final int TIPO_REF=30; + public static final int VOID=31; + public static final int WS=32; + + // delegates + public Parser[] getDelegates() { + return new Parser[] {}; + } + + // delegators + + + public AssemblerParser(TokenStream input) { + this(input, new RecognizerSharedState()); + } + public AssemblerParser(TokenStream input, RecognizerSharedState state) { + super(input, state); + } + +protected TreeAdaptor adaptor = new CommonTreeAdaptor(); + +public void setTreeAdaptor(TreeAdaptor adaptor) { + this.adaptor = adaptor; +} +public TreeAdaptor getTreeAdaptor() { + return adaptor; +} + public String[] getTokenNames() { return AssemblerParser.tokenNames; } + public String getGrammarFileName() { return "C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g"; } + + + + public abstract void escreverOpcode(String nomeInstrucao); + public abstract void escreverOpcode(Token opc, Token op) throws LabelException; + public abstract void verificarAumentoMemoriaGlobal(Token opc) throws AcessoIndevidoMemoriaException; + public abstract void verificarAumentoMemoriaGlobal(Token opc, Token op) throws AcessoIndevidoMemoriaException, LabelException; + + + + public static class programa_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "programa" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:51:1: programa : ( instrucao )* ; + public final AssemblerParser.programa_return programa() throws RecognitionException { + AssemblerParser.programa_return retval = new AssemblerParser.programa_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + AssemblerParser.instrucao_return instrucao1 =null; + + + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:51:10: ( ( instrucao )* ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:51:12: ( instrucao )* + { + root_0 = (BytecodesAST)adaptor.nil(); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:51:12: ( instrucao )* + loop1: + do { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( (LA1_0==ID||LA1_0==NEWLINE||LA1_0==36||(LA1_0 >= 44 && LA1_0 <= 110)) ) { + alt1=1; + } + + + switch (alt1) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:51:12: instrucao + { + pushFollow(FOLLOW_instrucao_in_programa152); + instrucao1=instrucao(); + + state._fsp--; + + adaptor.addChild(root_0, instrucao1.getTree()); + + } + break; + + default : + break loop1; + } + } while (true); + + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "programa" + + + public static class instrucao_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "instrucao" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:54:1: instrucao : ( operacao | definicaoClasse ( '.end class' )? ); + public final AssemblerParser.instrucao_return instrucao() throws RecognitionException { + AssemblerParser.instrucao_return retval = new AssemblerParser.instrucao_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token string_literal4=null; + AssemblerParser.operacao_return operacao2 =null; + + AssemblerParser.definicaoClasse_return definicaoClasse3 =null; + + + BytecodesAST string_literal4_tree=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:54:11: ( operacao | definicaoClasse ( '.end class' )? ) + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0==ID||LA3_0==NEWLINE||(LA3_0 >= 44 && LA3_0 <= 110)) ) { + alt3=1; + } + else if ( (LA3_0==36) ) { + alt3=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 3, 0, input); + + throw nvae; + + } + switch (alt3) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:54:13: operacao + { + root_0 = (BytecodesAST)adaptor.nil(); + + + pushFollow(FOLLOW_operacao_in_instrucao180); + operacao2=operacao(); + + state._fsp--; + + adaptor.addChild(root_0, operacao2.getTree()); + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:55:13: definicaoClasse ( '.end class' )? + { + root_0 = (BytecodesAST)adaptor.nil(); + + + pushFollow(FOLLOW_definicaoClasse_in_instrucao194); + definicaoClasse3=definicaoClasse(); + + state._fsp--; + + adaptor.addChild(root_0, definicaoClasse3.getTree()); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:55:29: ( '.end class' )? + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0==37) ) { + alt2=1; + } + switch (alt2) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:55:30: '.end class' + { + string_literal4=(Token)match(input,37,FOLLOW_37_in_instrucao197); + string_literal4_tree = + (BytecodesAST)adaptor.create(string_literal4) + ; + adaptor.addChild(root_0, string_literal4_tree); + + + } + break; + + } + + + } + break; + + } + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "instrucao" + + + public static class operacao_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "operacao" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:1: operacao : ( label comando | comando ) ; + public final AssemblerParser.operacao_return operacao() throws RecognitionException { + AssemblerParser.operacao_return retval = new AssemblerParser.operacao_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + AssemblerParser.label_return label5 =null; + + AssemblerParser.comando_return comando6 =null; + + AssemblerParser.comando_return comando7 =null; + + + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:10: ( ( label comando | comando ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:12: ( label comando | comando ) + { + root_0 = (BytecodesAST)adaptor.nil(); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:12: ( label comando | comando ) + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==ID) ) { + alt4=1; + } + else if ( (LA4_0==NEWLINE||(LA4_0 >= 44 && LA4_0 <= 110)) ) { + alt4=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 4, 0, input); + + throw nvae; + + } + switch (alt4) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:13: label comando + { + pushFollow(FOLLOW_label_in_operacao219); + label5=label(); + + state._fsp--; + + adaptor.addChild(root_0, label5.getTree()); + + pushFollow(FOLLOW_comando_in_operacao221); + comando6=comando(); + + state._fsp--; + + adaptor.addChild(root_0, comando6.getTree()); + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:58:29: comando + { + pushFollow(FOLLOW_comando_in_operacao225); + comando7=comando(); + + state._fsp--; + + adaptor.addChild(root_0, comando7.getTree()); + + } + break; + + } + + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "operacao" + + + public static class label_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "label" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:60:1: label : a= ID ':' -> ^( LABEL $a) ; + public final AssemblerParser.label_return label() throws RecognitionException { + AssemblerParser.label_return retval = new AssemblerParser.label_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + Token char_literal8=null; + + BytecodesAST a_tree=null; + BytecodesAST char_literal8_tree=null; + RewriteRuleTokenStream stream_43=new RewriteRuleTokenStream(adaptor,"token 43"); + RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:60:7: (a= ID ':' -> ^( LABEL $a) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:60:9: a= ID ':' + { + a=(Token)match(input,ID,FOLLOW_ID_in_label247); + stream_ID.add(a); + + + char_literal8=(Token)match(input,43,FOLLOW_43_in_label249); + stream_43.add(char_literal8); + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 60:20: -> ^( LABEL $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:60:23: ^( LABEL $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(LABEL, "LABEL") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "label" + + + public static class comando_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "comando" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:62:1: comando : ( manipulacaoObjetos | aritmetica | load | loadint | store | storeint | desvio | logica | pilha | retorno | 'nop' )? NEWLINE ; + public final AssemblerParser.comando_return comando() throws RecognitionException { + AssemblerParser.comando_return retval = new AssemblerParser.comando_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token string_literal19=null; + Token NEWLINE20=null; + AssemblerParser.manipulacaoObjetos_return manipulacaoObjetos9 =null; + + AssemblerParser.aritmetica_return aritmetica10 =null; + + AssemblerParser.load_return load11 =null; + + AssemblerParser.loadint_return loadint12 =null; + + AssemblerParser.store_return store13 =null; + + AssemblerParser.storeint_return storeint14 =null; + + AssemblerParser.desvio_return desvio15 =null; + + AssemblerParser.logica_return logica16 =null; + + AssemblerParser.pilha_return pilha17 =null; + + AssemblerParser.retorno_return retorno18 =null; + + + BytecodesAST string_literal19_tree=null; + BytecodesAST NEWLINE20_tree=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:62:8: ( ( manipulacaoObjetos | aritmetica | load | loadint | store | storeint | desvio | logica | pilha | retorno | 'nop' )? NEWLINE ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:62:10: ( manipulacaoObjetos | aritmetica | load | loadint | store | storeint | desvio | logica | pilha | retorno | 'nop' )? NEWLINE + { + root_0 = (BytecodesAST)adaptor.nil(); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:62:10: ( manipulacaoObjetos | aritmetica | load | loadint | store | storeint | desvio | logica | pilha | retorno | 'nop' )? + int alt5=12; + switch ( input.LA(1) ) { + case 57: + case 58: + case 90: + case 91: + case 92: + case 104: + case 108: + case 109: + { + alt5=1; + } + break; + case 60: + case 69: + case 82: + case 88: + case 89: + case 94: + case 101: + { + alt5=2; + } + break; + case 44: + case 46: + case 47: + case 48: + case 49: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 84: + case 85: + case 86: + case 87: + { + alt5=3; + } + break; + case 45: + case 83: + case 103: + { + alt5=4; + } + break; + case 52: + case 53: + case 54: + case 55: + case 97: + case 98: + case 99: + case 100: + { + alt5=5; + } + break; + case 51: + case 96: + { + alt5=6; + } + break; + case 59: + case 70: + case 71: + case 72: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + case 81: + { + alt5=7; + } + break; + case 61: + case 93: + case 102: + { + alt5=8; + } + break; + case 56: + case 106: + case 107: + { + alt5=9; + } + break; + case 50: + case 95: + case 110: + { + alt5=10; + } + break; + case 105: + { + alt5=11; + } + break; + } + + switch (alt5) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:62:12: manipulacaoObjetos + { + pushFollow(FOLLOW_manipulacaoObjetos_in_comando267); + manipulacaoObjetos9=manipulacaoObjetos(); + + state._fsp--; + + adaptor.addChild(root_0, manipulacaoObjetos9.getTree()); + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:63:17: aritmetica + { + pushFollow(FOLLOW_aritmetica_in_comando285); + aritmetica10=aritmetica(); + + state._fsp--; + + adaptor.addChild(root_0, aritmetica10.getTree()); + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:64:17: load + { + pushFollow(FOLLOW_load_in_comando303); + load11=load(); + + state._fsp--; + + adaptor.addChild(root_0, load11.getTree()); + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:65:17: loadint + { + pushFollow(FOLLOW_loadint_in_comando321); + loadint12=loadint(); + + state._fsp--; + + adaptor.addChild(root_0, loadint12.getTree()); + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:66:17: store + { + pushFollow(FOLLOW_store_in_comando339); + store13=store(); + + state._fsp--; + + adaptor.addChild(root_0, store13.getTree()); + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:67:17: storeint + { + pushFollow(FOLLOW_storeint_in_comando357); + storeint14=storeint(); + + state._fsp--; + + adaptor.addChild(root_0, storeint14.getTree()); + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:68:17: desvio + { + pushFollow(FOLLOW_desvio_in_comando375); + desvio15=desvio(); + + state._fsp--; + + adaptor.addChild(root_0, desvio15.getTree()); + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:69:17: logica + { + pushFollow(FOLLOW_logica_in_comando393); + logica16=logica(); + + state._fsp--; + + adaptor.addChild(root_0, logica16.getTree()); + + } + break; + case 9 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:70:17: pilha + { + pushFollow(FOLLOW_pilha_in_comando411); + pilha17=pilha(); + + state._fsp--; + + adaptor.addChild(root_0, pilha17.getTree()); + + } + break; + case 10 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:71:17: retorno + { + pushFollow(FOLLOW_retorno_in_comando429); + retorno18=retorno(); + + state._fsp--; + + adaptor.addChild(root_0, retorno18.getTree()); + + } + break; + case 11 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:72:17: 'nop' + { + string_literal19=(Token)match(input,105,FOLLOW_105_in_comando447); + string_literal19_tree = + (BytecodesAST)adaptor.create(string_literal19) + ; + adaptor.addChild(root_0, string_literal19_tree); + + + } + break; + + } + + + NEWLINE20=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_comando463); + NEWLINE20_tree = + (BytecodesAST)adaptor.create(NEWLINE20) + ; + adaptor.addChild(root_0, NEWLINE20_tree); + + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "comando" + + + public static class definicaoClasse_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "definicaoClasse" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:75:1: definicaoClasse : '.class' ID NEWLINE ( superClasse NEWLINE )? ( membroClasse NEWLINE )+ -> ^( '.class' ID ( superClasse )? ^( MEMBRO_CLASSE ( membroClasse )+ ) ) ; + public final AssemblerParser.definicaoClasse_return definicaoClasse() throws RecognitionException { + AssemblerParser.definicaoClasse_return retval = new AssemblerParser.definicaoClasse_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token string_literal21=null; + Token ID22=null; + Token NEWLINE23=null; + Token NEWLINE25=null; + Token NEWLINE27=null; + AssemblerParser.superClasse_return superClasse24 =null; + + AssemblerParser.membroClasse_return membroClasse26 =null; + + + BytecodesAST string_literal21_tree=null; + BytecodesAST ID22_tree=null; + BytecodesAST NEWLINE23_tree=null; + BytecodesAST NEWLINE25_tree=null; + BytecodesAST NEWLINE27_tree=null; + RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE"); + RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); + RewriteRuleTokenStream stream_36=new RewriteRuleTokenStream(adaptor,"token 36"); + RewriteRuleSubtreeStream stream_membroClasse=new RewriteRuleSubtreeStream(adaptor,"rule membroClasse"); + RewriteRuleSubtreeStream stream_superClasse=new RewriteRuleSubtreeStream(adaptor,"rule superClasse"); + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:5: ( '.class' ID NEWLINE ( superClasse NEWLINE )? ( membroClasse NEWLINE )+ -> ^( '.class' ID ( superClasse )? ^( MEMBRO_CLASSE ( membroClasse )+ ) ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:7: '.class' ID NEWLINE ( superClasse NEWLINE )? ( membroClasse NEWLINE )+ + { + string_literal21=(Token)match(input,36,FOLLOW_36_in_definicaoClasse486); + stream_36.add(string_literal21); + + + ID22=(Token)match(input,ID,FOLLOW_ID_in_definicaoClasse488); + stream_ID.add(ID22); + + + NEWLINE23=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_definicaoClasse490); + stream_NEWLINE.add(NEWLINE23); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:27: ( superClasse NEWLINE )? + int alt6=2; + int LA6_0 = input.LA(1); + + if ( (LA6_0==42) ) { + alt6=1; + } + switch (alt6) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:28: superClasse NEWLINE + { + pushFollow(FOLLOW_superClasse_in_definicaoClasse493); + superClasse24=superClasse(); + + state._fsp--; + + stream_superClasse.add(superClasse24.getTree()); + + NEWLINE25=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_definicaoClasse495); + stream_NEWLINE.add(NEWLINE25); + + + } + break; + + } + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:50: ( membroClasse NEWLINE )+ + int cnt7=0; + loop7: + do { + int alt7=2; + int LA7_0 = input.LA(1); + + if ( (LA7_0==39||LA7_0==41) ) { + alt7=1; + } + + + switch (alt7) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:76:51: membroClasse NEWLINE + { + pushFollow(FOLLOW_membroClasse_in_definicaoClasse500); + membroClasse26=membroClasse(); + + state._fsp--; + + stream_membroClasse.add(membroClasse26.getTree()); + + NEWLINE27=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_definicaoClasse502); + stream_NEWLINE.add(NEWLINE27); + + + } + break; + + default : + if ( cnt7 >= 1 ) break loop7; + EarlyExitException eee = + new EarlyExitException(7, input); + throw eee; + } + cnt7++; + } while (true); + + + // AST REWRITE + // elements: 36, ID, superClasse, membroClasse + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 77:12: -> ^( '.class' ID ( superClasse )? ^( MEMBRO_CLASSE ( membroClasse )+ ) ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:77:15: ^( '.class' ID ( superClasse )? ^( MEMBRO_CLASSE ( membroClasse )+ ) ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_36.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_ID.nextNode() + ); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:77:29: ( superClasse )? + if ( stream_superClasse.hasNext() ) { + adaptor.addChild(root_1, stream_superClasse.nextTree()); + + } + stream_superClasse.reset(); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:77:42: ^( MEMBRO_CLASSE ( membroClasse )+ ) + { + BytecodesAST root_2 = (BytecodesAST)adaptor.nil(); + root_2 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(MEMBRO_CLASSE, "MEMBRO_CLASSE") + , root_2); + + if ( !(stream_membroClasse.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_membroClasse.hasNext() ) { + adaptor.addChild(root_2, stream_membroClasse.nextTree()); + + } + stream_membroClasse.reset(); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "definicaoClasse" + + + public static class superClasse_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "superClasse" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:1: superClasse : '.super' (b= ID |b= REF ) -> ^( EXTENDS $b) ; + public final AssemblerParser.superClasse_return superClasse() throws RecognitionException { + AssemblerParser.superClasse_return retval = new AssemblerParser.superClasse_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token b=null; + Token string_literal28=null; + + BytecodesAST b_tree=null; + BytecodesAST string_literal28_tree=null; + RewriteRuleTokenStream stream_42=new RewriteRuleTokenStream(adaptor,"token 42"); + RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); + RewriteRuleTokenStream stream_REF=new RewriteRuleTokenStream(adaptor,"token REF"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:13: ( '.super' (b= ID |b= REF ) -> ^( EXTENDS $b) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:15: '.super' (b= ID |b= REF ) + { + string_literal28=(Token)match(input,42,FOLLOW_42_in_superClasse563); + stream_42.add(string_literal28); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:24: (b= ID |b= REF ) + int alt8=2; + int LA8_0 = input.LA(1); + + if ( (LA8_0==ID) ) { + alt8=1; + } + else if ( (LA8_0==REF) ) { + alt8=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 8, 0, input); + + throw nvae; + + } + switch (alt8) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:25: b= ID + { + b=(Token)match(input,ID,FOLLOW_ID_in_superClasse570); + stream_ID.add(b); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:34: b= REF + { + b=(Token)match(input,REF,FOLLOW_REF_in_superClasse578); + stream_REF.add(b); + + + } + break; + + } + + + // AST REWRITE + // elements: b + // token labels: b + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_b=new RewriteRuleTokenStream(adaptor,"token b",b); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 80:42: -> ^( EXTENDS $b) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:80:45: ^( EXTENDS $b) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(EXTENDS, "EXTENDS") + , root_1); + + adaptor.addChild(root_1, stream_b.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "superClasse" + + + public static class membroClasse_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "membroClasse" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:82:1: membroClasse : ( '.field' (st= 'static' )? ID tipo -> ^( FIELD_DECL ( $st)? ID tipo ) | '.method' INIT ( parametros | '(' parametros ')' ) ret= tipo NEWLINE ( limite NEWLINE )? ( operacao )* '.end method' -> ^( CONSTR_DECL INIT $ret parametros ( limite )? ^( BODY ( operacao )* ) ) | '.method' ( 'static' )? ID ( parametros | '(' parametros ')' ) ret= tipo NEWLINE ( limite NEWLINE )? ( operacao )* '.end method' -> ^( METHOD_DECL ID $ret parametros ( limite )? ^( BODY ( operacao )* ) ) ); + public final AssemblerParser.membroClasse_return membroClasse() throws RecognitionException { + AssemblerParser.membroClasse_return retval = new AssemblerParser.membroClasse_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token st=null; + Token string_literal29=null; + Token ID30=null; + Token string_literal32=null; + Token INIT33=null; + Token char_literal35=null; + Token char_literal37=null; + Token NEWLINE38=null; + Token NEWLINE40=null; + Token string_literal42=null; + Token string_literal43=null; + Token string_literal44=null; + Token ID45=null; + Token char_literal47=null; + Token char_literal49=null; + Token NEWLINE50=null; + Token NEWLINE52=null; + Token string_literal54=null; + AssemblerParser.tipo_return ret =null; + + AssemblerParser.tipo_return tipo31 =null; + + AssemblerParser.parametros_return parametros34 =null; + + AssemblerParser.parametros_return parametros36 =null; + + AssemblerParser.limite_return limite39 =null; + + AssemblerParser.operacao_return operacao41 =null; + + AssemblerParser.parametros_return parametros46 =null; + + AssemblerParser.parametros_return parametros48 =null; + + AssemblerParser.limite_return limite51 =null; + + AssemblerParser.operacao_return operacao53 =null; + + + BytecodesAST st_tree=null; + BytecodesAST string_literal29_tree=null; + BytecodesAST ID30_tree=null; + BytecodesAST string_literal32_tree=null; + BytecodesAST INIT33_tree=null; + BytecodesAST char_literal35_tree=null; + BytecodesAST char_literal37_tree=null; + BytecodesAST NEWLINE38_tree=null; + BytecodesAST NEWLINE40_tree=null; + BytecodesAST string_literal42_tree=null; + BytecodesAST string_literal43_tree=null; + BytecodesAST string_literal44_tree=null; + BytecodesAST ID45_tree=null; + BytecodesAST char_literal47_tree=null; + BytecodesAST char_literal49_tree=null; + BytecodesAST NEWLINE50_tree=null; + BytecodesAST NEWLINE52_tree=null; + BytecodesAST string_literal54_tree=null; + RewriteRuleTokenStream stream_41=new RewriteRuleTokenStream(adaptor,"token 41"); + RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE"); + RewriteRuleTokenStream stream_111=new RewriteRuleTokenStream(adaptor,"token 111"); + RewriteRuleTokenStream stream_35=new RewriteRuleTokenStream(adaptor,"token 35"); + RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); + RewriteRuleTokenStream stream_INIT=new RewriteRuleTokenStream(adaptor,"token INIT"); + RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33"); + RewriteRuleTokenStream stream_39=new RewriteRuleTokenStream(adaptor,"token 39"); + RewriteRuleTokenStream stream_38=new RewriteRuleTokenStream(adaptor,"token 38"); + RewriteRuleSubtreeStream stream_limite=new RewriteRuleSubtreeStream(adaptor,"rule limite"); + RewriteRuleSubtreeStream stream_parametros=new RewriteRuleSubtreeStream(adaptor,"rule parametros"); + RewriteRuleSubtreeStream stream_tipo=new RewriteRuleSubtreeStream(adaptor,"rule tipo"); + RewriteRuleSubtreeStream stream_operacao=new RewriteRuleSubtreeStream(adaptor,"rule operacao"); + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:5: ( '.field' (st= 'static' )? ID tipo -> ^( FIELD_DECL ( $st)? ID tipo ) | '.method' INIT ( parametros | '(' parametros ')' ) ret= tipo NEWLINE ( limite NEWLINE )? ( operacao )* '.end method' -> ^( CONSTR_DECL INIT $ret parametros ( limite )? ^( BODY ( operacao )* ) ) | '.method' ( 'static' )? ID ( parametros | '(' parametros ')' ) ret= tipo NEWLINE ( limite NEWLINE )? ( operacao )* '.end method' -> ^( METHOD_DECL ID $ret parametros ( limite )? ^( BODY ( operacao )* ) ) ) + int alt17=3; + int LA17_0 = input.LA(1); + + if ( (LA17_0==39) ) { + alt17=1; + } + else if ( (LA17_0==41) ) { + int LA17_2 = input.LA(2); + + if ( (LA17_2==INIT) ) { + alt17=2; + } + else if ( (LA17_2==ID||LA17_2==111) ) { + alt17=3; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 17, 2, input); + + throw nvae; + + } + } + else { + NoViableAltException nvae = + new NoViableAltException("", 17, 0, input); + + throw nvae; + + } + switch (alt17) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:7: '.field' (st= 'static' )? ID tipo + { + string_literal29=(Token)match(input,39,FOLLOW_39_in_membroClasse600); + stream_39.add(string_literal29); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:19: (st= 'static' )? + int alt9=2; + int LA9_0 = input.LA(1); + + if ( (LA9_0==111) ) { + alt9=1; + } + switch (alt9) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:19: st= 'static' + { + st=(Token)match(input,111,FOLLOW_111_in_membroClasse606); + stream_111.add(st); + + + } + break; + + } + + + ID30=(Token)match(input,ID,FOLLOW_ID_in_membroClasse609); + stream_ID.add(ID30); + + + pushFollow(FOLLOW_tipo_in_membroClasse611); + tipo31=tipo(); + + state._fsp--; + + stream_tipo.add(tipo31.getTree()); + + // AST REWRITE + // elements: tipo, ID, st + // token labels: st + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_st=new RewriteRuleTokenStream(adaptor,"token st",st); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 83:39: -> ^( FIELD_DECL ( $st)? ID tipo ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:42: ^( FIELD_DECL ( $st)? ID tipo ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(FIELD_DECL, "FIELD_DECL") + , root_1); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:83:56: ( $st)? + if ( stream_st.hasNext() ) { + adaptor.addChild(root_1, stream_st.nextNode()); + + } + stream_st.reset(); + + adaptor.addChild(root_1, + stream_ID.nextNode() + ); + + adaptor.addChild(root_1, stream_tipo.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:7: '.method' INIT ( parametros | '(' parametros ')' ) ret= tipo NEWLINE ( limite NEWLINE )? ( operacao )* '.end method' + { + string_literal32=(Token)match(input,41,FOLLOW_41_in_membroClasse633); + stream_41.add(string_literal32); + + + INIT33=(Token)match(input,INIT,FOLLOW_INIT_in_membroClasse635); + stream_INIT.add(INIT33); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:22: ( parametros | '(' parametros ')' ) + int alt10=2; + int LA10_0 = input.LA(1); + + if ( (LA10_0==INT||LA10_0==TIPO_REF||LA10_0==34) ) { + alt10=1; + } + else if ( (LA10_0==33) ) { + alt10=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 10, 0, input); + + throw nvae; + + } + switch (alt10) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:23: parametros + { + pushFollow(FOLLOW_parametros_in_membroClasse638); + parametros34=parametros(); + + state._fsp--; + + stream_parametros.add(parametros34.getTree()); + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:36: '(' parametros ')' + { + char_literal35=(Token)match(input,33,FOLLOW_33_in_membroClasse642); + stream_33.add(char_literal35); + + + pushFollow(FOLLOW_parametros_in_membroClasse644); + parametros36=parametros(); + + state._fsp--; + + stream_parametros.add(parametros36.getTree()); + + char_literal37=(Token)match(input,35,FOLLOW_35_in_membroClasse646); + stream_35.add(char_literal37); + + + } + break; + + } + + + pushFollow(FOLLOW_tipo_in_membroClasse653); + ret=tipo(); + + state._fsp--; + + stream_tipo.add(ret.getTree()); + + NEWLINE38=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_membroClasse655); + stream_NEWLINE.add(NEWLINE38); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:75: ( limite NEWLINE )? + int alt11=2; + int LA11_0 = input.LA(1); + + if ( (LA11_0==40) ) { + alt11=1; + } + switch (alt11) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:76: limite NEWLINE + { + pushFollow(FOLLOW_limite_in_membroClasse658); + limite39=limite(); + + state._fsp--; + + stream_limite.add(limite39.getTree()); + + NEWLINE40=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_membroClasse660); + stream_NEWLINE.add(NEWLINE40); + + + } + break; + + } + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:93: ( operacao )* + loop12: + do { + int alt12=2; + int LA12_0 = input.LA(1); + + if ( (LA12_0==ID||LA12_0==NEWLINE||(LA12_0 >= 44 && LA12_0 <= 110)) ) { + alt12=1; + } + + + switch (alt12) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:84:93: operacao + { + pushFollow(FOLLOW_operacao_in_membroClasse664); + operacao41=operacao(); + + state._fsp--; + + stream_operacao.add(operacao41.getTree()); + + } + break; + + default : + break loop12; + } + } while (true); + + + string_literal42=(Token)match(input,38,FOLLOW_38_in_membroClasse667); + stream_38.add(string_literal42); + + + // AST REWRITE + // elements: ret, INIT, parametros, limite, operacao + // token labels: + // rule labels: ret, retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_ret=new RewriteRuleSubtreeStream(adaptor,"rule ret",ret!=null?ret.tree:null); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 85:2: -> ^( CONSTR_DECL INIT $ret parametros ( limite )? ^( BODY ( operacao )* ) ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:85:5: ^( CONSTR_DECL INIT $ret parametros ( limite )? ^( BODY ( operacao )* ) ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(CONSTR_DECL, "CONSTR_DECL") + , root_1); + + adaptor.addChild(root_1, + stream_INIT.nextNode() + ); + + adaptor.addChild(root_1, stream_ret.nextTree()); + + adaptor.addChild(root_1, stream_parametros.nextTree()); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:85:40: ( limite )? + if ( stream_limite.hasNext() ) { + adaptor.addChild(root_1, stream_limite.nextTree()); + + } + stream_limite.reset(); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:85:48: ^( BODY ( operacao )* ) + { + BytecodesAST root_2 = (BytecodesAST)adaptor.nil(); + root_2 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(BODY, "BODY") + , root_2); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:85:55: ( operacao )* + while ( stream_operacao.hasNext() ) { + adaptor.addChild(root_2, stream_operacao.nextTree()); + + } + stream_operacao.reset(); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:7: '.method' ( 'static' )? ID ( parametros | '(' parametros ')' ) ret= tipo NEWLINE ( limite NEWLINE )? ( operacao )* '.end method' + { + string_literal43=(Token)match(input,41,FOLLOW_41_in_membroClasse699); + stream_41.add(string_literal43); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:17: ( 'static' )? + int alt13=2; + int LA13_0 = input.LA(1); + + if ( (LA13_0==111) ) { + alt13=1; + } + switch (alt13) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:17: 'static' + { + string_literal44=(Token)match(input,111,FOLLOW_111_in_membroClasse701); + stream_111.add(string_literal44); + + + } + break; + + } + + + ID45=(Token)match(input,ID,FOLLOW_ID_in_membroClasse704); + stream_ID.add(ID45); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:30: ( parametros | '(' parametros ')' ) + int alt14=2; + int LA14_0 = input.LA(1); + + if ( (LA14_0==INT||LA14_0==TIPO_REF||LA14_0==34) ) { + alt14=1; + } + else if ( (LA14_0==33) ) { + alt14=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 14, 0, input); + + throw nvae; + + } + switch (alt14) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:31: parametros + { + pushFollow(FOLLOW_parametros_in_membroClasse707); + parametros46=parametros(); + + state._fsp--; + + stream_parametros.add(parametros46.getTree()); + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:44: '(' parametros ')' + { + char_literal47=(Token)match(input,33,FOLLOW_33_in_membroClasse711); + stream_33.add(char_literal47); + + + pushFollow(FOLLOW_parametros_in_membroClasse713); + parametros48=parametros(); + + state._fsp--; + + stream_parametros.add(parametros48.getTree()); + + char_literal49=(Token)match(input,35,FOLLOW_35_in_membroClasse715); + stream_35.add(char_literal49); + + + } + break; + + } + + + pushFollow(FOLLOW_tipo_in_membroClasse722); + ret=tipo(); + + state._fsp--; + + stream_tipo.add(ret.getTree()); + + NEWLINE50=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_membroClasse724); + stream_NEWLINE.add(NEWLINE50); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:83: ( limite NEWLINE )? + int alt15=2; + int LA15_0 = input.LA(1); + + if ( (LA15_0==40) ) { + alt15=1; + } + switch (alt15) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:84: limite NEWLINE + { + pushFollow(FOLLOW_limite_in_membroClasse727); + limite51=limite(); + + state._fsp--; + + stream_limite.add(limite51.getTree()); + + NEWLINE52=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_membroClasse729); + stream_NEWLINE.add(NEWLINE52); + + + } + break; + + } + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:101: ( operacao )* + loop16: + do { + int alt16=2; + int LA16_0 = input.LA(1); + + if ( (LA16_0==ID||LA16_0==NEWLINE||(LA16_0 >= 44 && LA16_0 <= 110)) ) { + alt16=1; + } + + + switch (alt16) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:86:101: operacao + { + pushFollow(FOLLOW_operacao_in_membroClasse733); + operacao53=operacao(); + + state._fsp--; + + stream_operacao.add(operacao53.getTree()); + + } + break; + + default : + break loop16; + } + } while (true); + + + string_literal54=(Token)match(input,38,FOLLOW_38_in_membroClasse736); + stream_38.add(string_literal54); + + + // AST REWRITE + // elements: operacao, parametros, ret, ID, limite + // token labels: + // rule labels: ret, retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_ret=new RewriteRuleSubtreeStream(adaptor,"rule ret",ret!=null?ret.tree:null); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 87:9: -> ^( METHOD_DECL ID $ret parametros ( limite )? ^( BODY ( operacao )* ) ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:87:12: ^( METHOD_DECL ID $ret parametros ( limite )? ^( BODY ( operacao )* ) ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(METHOD_DECL, "METHOD_DECL") + , root_1); + + adaptor.addChild(root_1, + stream_ID.nextNode() + ); + + adaptor.addChild(root_1, stream_ret.nextTree()); + + adaptor.addChild(root_1, stream_parametros.nextTree()); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:87:45: ( limite )? + if ( stream_limite.hasNext() ) { + adaptor.addChild(root_1, stream_limite.nextTree()); + + } + stream_limite.reset(); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:87:53: ^( BODY ( operacao )* ) + { + BytecodesAST root_2 = (BytecodesAST)adaptor.nil(); + root_2 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(BODY, "BODY") + , root_2); + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:87:60: ( operacao )* + while ( stream_operacao.hasNext() ) { + adaptor.addChild(root_2, stream_operacao.nextTree()); + + } + stream_operacao.reset(); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + + } + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "membroClasse" + + + public static class limite_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "limite" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:90:1: limite : '.limit locals' INTEIRO -> ^( LIMIT INTEIRO ) ; + public final AssemblerParser.limite_return limite() throws RecognitionException { + AssemblerParser.limite_return retval = new AssemblerParser.limite_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token string_literal55=null; + Token INTEIRO56=null; + + BytecodesAST string_literal55_tree=null; + BytecodesAST INTEIRO56_tree=null; + RewriteRuleTokenStream stream_40=new RewriteRuleTokenStream(adaptor,"token 40"); + RewriteRuleTokenStream stream_INTEIRO=new RewriteRuleTokenStream(adaptor,"token INTEIRO"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:90:8: ( '.limit locals' INTEIRO -> ^( LIMIT INTEIRO ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:90:11: '.limit locals' INTEIRO + { + string_literal55=(Token)match(input,40,FOLLOW_40_in_limite785); + stream_40.add(string_literal55); + + + INTEIRO56=(Token)match(input,INTEIRO,FOLLOW_INTEIRO_in_limite787); + stream_INTEIRO.add(INTEIRO56); + + + // AST REWRITE + // elements: INTEIRO + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 90:35: -> ^( LIMIT INTEIRO ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:90:38: ^( LIMIT INTEIRO ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(LIMIT, "LIMIT") + , root_1); + + adaptor.addChild(root_1, + stream_INTEIRO.nextNode() + ); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "limite" + + + public static class parametros_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "parametros" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:92:1: parametros : ( '()' -> ^( PARAMS VOID ) | (a= INT |a= TIPO_REF ) -> ^( PARAMS $a) ); + public final AssemblerParser.parametros_return parametros() throws RecognitionException { + AssemblerParser.parametros_return retval = new AssemblerParser.parametros_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + Token string_literal57=null; + + BytecodesAST a_tree=null; + BytecodesAST string_literal57_tree=null; + RewriteRuleTokenStream stream_INT=new RewriteRuleTokenStream(adaptor,"token INT"); + RewriteRuleTokenStream stream_TIPO_REF=new RewriteRuleTokenStream(adaptor,"token TIPO_REF"); + RewriteRuleTokenStream stream_34=new RewriteRuleTokenStream(adaptor,"token 34"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:93:2: ( '()' -> ^( PARAMS VOID ) | (a= INT |a= TIPO_REF ) -> ^( PARAMS $a) ) + int alt19=2; + int LA19_0 = input.LA(1); + + if ( (LA19_0==34) ) { + alt19=1; + } + else if ( (LA19_0==INT||LA19_0==TIPO_REF) ) { + alt19=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 19, 0, input); + + throw nvae; + + } + switch (alt19) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:93:4: '()' + { + string_literal57=(Token)match(input,34,FOLLOW_34_in_parametros809); + stream_34.add(string_literal57); + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 93:9: -> ^( PARAMS VOID ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:93:12: ^( PARAMS VOID ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(PARAMS, "PARAMS") + , root_1); + + adaptor.addChild(root_1, + (BytecodesAST)adaptor.create(VOID, "VOID") + ); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:94:4: (a= INT |a= TIPO_REF ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:94:4: (a= INT |a= TIPO_REF ) + int alt18=2; + int LA18_0 = input.LA(1); + + if ( (LA18_0==INT) ) { + alt18=1; + } + else if ( (LA18_0==TIPO_REF) ) { + alt18=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 18, 0, input); + + throw nvae; + + } + switch (alt18) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:94:6: a= INT + { + a=(Token)match(input,INT,FOLLOW_INT_in_parametros828); + stream_INT.add(a); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:94:16: a= TIPO_REF + { + a=(Token)match(input,TIPO_REF,FOLLOW_TIPO_REF_in_parametros836); + stream_TIPO_REF.add(a); + + + } + break; + + } + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 95:4: -> ^( PARAMS $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:95:7: ^( PARAMS $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(PARAMS, "PARAMS") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + + } + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "parametros" + + + public static class retorno_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "retorno" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:98:1: retorno : (a= 'areturn' |a= 'ireturn' |a= 'return' ) -> ^( RETURN $a) ; + public final AssemblerParser.retorno_return retorno() throws RecognitionException { + AssemblerParser.retorno_return retval = new AssemblerParser.retorno_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + + BytecodesAST a_tree=null; + RewriteRuleTokenStream stream_95=new RewriteRuleTokenStream(adaptor,"token 95"); + RewriteRuleTokenStream stream_110=new RewriteRuleTokenStream(adaptor,"token 110"); + RewriteRuleTokenStream stream_50=new RewriteRuleTokenStream(adaptor,"token 50"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:98:9: ( (a= 'areturn' |a= 'ireturn' |a= 'return' ) -> ^( RETURN $a) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:99:9: (a= 'areturn' |a= 'ireturn' |a= 'return' ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:99:9: (a= 'areturn' |a= 'ireturn' |a= 'return' ) + int alt20=3; + switch ( input.LA(1) ) { + case 50: + { + alt20=1; + } + break; + case 95: + { + alt20=2; + } + break; + case 110: + { + alt20=3; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 20, 0, input); + + throw nvae; + + } + + switch (alt20) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:99:13: a= 'areturn' + { + a=(Token)match(input,50,FOLLOW_50_in_retorno876); + stream_50.add(a); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:100:13: a= 'ireturn' + { + a=(Token)match(input,95,FOLLOW_95_in_retorno894); + stream_95.add(a); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:101:13: a= 'return' + { + a=(Token)match(input,110,FOLLOW_110_in_retorno912); + stream_110.add(a); + + + } + break; + + } + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 103:10: -> ^( RETURN $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:103:13: ^( RETURN $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(RETURN, "RETURN") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "retorno" + + + public static class manipulacaoObjetos_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "manipulacaoObjetos" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:106:1: manipulacaoObjetos : (a= 'getfield' REF tipo -> ^( 'getfield' REF tipo ) |a= 'getstatic' REF tipo -> ^( 'getstatic' REF tipo ) |a= 'putfield' REF tipo -> ^( 'putfield' REF tipo ) |a= 'putstatic' REF tipo -> ^( 'putstatic' REF tipo ) |a= 'invokespecial' REF d= parametrosRetorno -> ^( 'invokespecial' REF $d) |a= 'invokestatic' REF d= parametrosRetorno -> ^( 'invokestatic' REF $d) |a= 'invokevirtual' REF d= parametrosRetorno -> ^( 'invokevirtual' REF $d) |a= 'new' (b= ID |b= REF ) -> ^( NEW $b) ); + public final AssemblerParser.manipulacaoObjetos_return manipulacaoObjetos() throws RecognitionException { + AssemblerParser.manipulacaoObjetos_return retval = new AssemblerParser.manipulacaoObjetos_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + Token b=null; + Token REF58=null; + Token REF60=null; + Token REF62=null; + Token REF64=null; + Token REF66=null; + Token REF67=null; + Token REF68=null; + AssemblerParser.parametrosRetorno_return d =null; + + AssemblerParser.tipo_return tipo59 =null; + + AssemblerParser.tipo_return tipo61 =null; + + AssemblerParser.tipo_return tipo63 =null; + + AssemblerParser.tipo_return tipo65 =null; + + + BytecodesAST a_tree=null; + BytecodesAST b_tree=null; + BytecodesAST REF58_tree=null; + BytecodesAST REF60_tree=null; + BytecodesAST REF62_tree=null; + BytecodesAST REF64_tree=null; + BytecodesAST REF66_tree=null; + BytecodesAST REF67_tree=null; + BytecodesAST REF68_tree=null; + RewriteRuleTokenStream stream_58=new RewriteRuleTokenStream(adaptor,"token 58"); + RewriteRuleTokenStream stream_109=new RewriteRuleTokenStream(adaptor,"token 109"); + RewriteRuleTokenStream stream_57=new RewriteRuleTokenStream(adaptor,"token 57"); + RewriteRuleTokenStream stream_92=new RewriteRuleTokenStream(adaptor,"token 92"); + RewriteRuleTokenStream stream_108=new RewriteRuleTokenStream(adaptor,"token 108"); + RewriteRuleTokenStream stream_91=new RewriteRuleTokenStream(adaptor,"token 91"); + RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); + RewriteRuleTokenStream stream_90=new RewriteRuleTokenStream(adaptor,"token 90"); + RewriteRuleTokenStream stream_104=new RewriteRuleTokenStream(adaptor,"token 104"); + RewriteRuleTokenStream stream_REF=new RewriteRuleTokenStream(adaptor,"token REF"); + RewriteRuleSubtreeStream stream_tipo=new RewriteRuleSubtreeStream(adaptor,"rule tipo"); + RewriteRuleSubtreeStream stream_parametrosRetorno=new RewriteRuleSubtreeStream(adaptor,"rule parametrosRetorno"); + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:106:20: (a= 'getfield' REF tipo -> ^( 'getfield' REF tipo ) |a= 'getstatic' REF tipo -> ^( 'getstatic' REF tipo ) |a= 'putfield' REF tipo -> ^( 'putfield' REF tipo ) |a= 'putstatic' REF tipo -> ^( 'putstatic' REF tipo ) |a= 'invokespecial' REF d= parametrosRetorno -> ^( 'invokespecial' REF $d) |a= 'invokestatic' REF d= parametrosRetorno -> ^( 'invokestatic' REF $d) |a= 'invokevirtual' REF d= parametrosRetorno -> ^( 'invokevirtual' REF $d) |a= 'new' (b= ID |b= REF ) -> ^( NEW $b) ) + int alt22=8; + switch ( input.LA(1) ) { + case 57: + { + alt22=1; + } + break; + case 58: + { + alt22=2; + } + break; + case 108: + { + alt22=3; + } + break; + case 109: + { + alt22=4; + } + break; + case 90: + { + alt22=5; + } + break; + case 91: + { + alt22=6; + } + break; + case 92: + { + alt22=7; + } + break; + case 104: + { + alt22=8; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 22, 0, input); + + throw nvae; + + } + + switch (alt22) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:106:22: a= 'getfield' REF tipo + { + a=(Token)match(input,57,FOLLOW_57_in_manipulacaoObjetos991); + stream_57.add(a); + + + REF58=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos993); + stream_REF.add(REF58); + + + pushFollow(FOLLOW_tipo_in_manipulacaoObjetos995); + tipo59=tipo(); + + state._fsp--; + + stream_tipo.add(tipo59.getTree()); + + // AST REWRITE + // elements: 57, tipo, REF + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 106:46: -> ^( 'getfield' REF tipo ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:106:49: ^( 'getfield' REF tipo ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_57.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_REF.nextNode() + ); + + adaptor.addChild(root_1, stream_tipo.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:107:8: a= 'getstatic' REF tipo + { + a=(Token)match(input,58,FOLLOW_58_in_manipulacaoObjetos1018); + stream_58.add(a); + + + REF60=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos1020); + stream_REF.add(REF60); + + + pushFollow(FOLLOW_tipo_in_manipulacaoObjetos1022); + tipo61=tipo(); + + state._fsp--; + + stream_tipo.add(tipo61.getTree()); + + // AST REWRITE + // elements: tipo, 58, REF + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 107:33: -> ^( 'getstatic' REF tipo ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:107:36: ^( 'getstatic' REF tipo ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_58.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_REF.nextNode() + ); + + adaptor.addChild(root_1, stream_tipo.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:108:22: a= 'putfield' REF tipo + { + a=(Token)match(input,108,FOLLOW_108_in_manipulacaoObjetos1059); + stream_108.add(a); + + + REF62=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos1061); + stream_REF.add(REF62); + + + pushFollow(FOLLOW_tipo_in_manipulacaoObjetos1063); + tipo63=tipo(); + + state._fsp--; + + stream_tipo.add(tipo63.getTree()); + + // AST REWRITE + // elements: 108, REF, tipo + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 108:46: -> ^( 'putfield' REF tipo ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:108:49: ^( 'putfield' REF tipo ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_108.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_REF.nextNode() + ); + + adaptor.addChild(root_1, stream_tipo.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:109:22: a= 'putstatic' REF tipo + { + a=(Token)match(input,109,FOLLOW_109_in_manipulacaoObjetos1100); + stream_109.add(a); + + + REF64=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos1102); + stream_REF.add(REF64); + + + pushFollow(FOLLOW_tipo_in_manipulacaoObjetos1104); + tipo65=tipo(); + + state._fsp--; + + stream_tipo.add(tipo65.getTree()); + + // AST REWRITE + // elements: tipo, 109, REF + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 109:47: -> ^( 'putstatic' REF tipo ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:109:50: ^( 'putstatic' REF tipo ) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_109.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_REF.nextNode() + ); + + adaptor.addChild(root_1, stream_tipo.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:110:22: a= 'invokespecial' REF d= parametrosRetorno + { + a=(Token)match(input,90,FOLLOW_90_in_manipulacaoObjetos1141); + stream_90.add(a); + + + REF66=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos1143); + stream_REF.add(REF66); + + + pushFollow(FOLLOW_parametrosRetorno_in_manipulacaoObjetos1149); + d=parametrosRetorno(); + + state._fsp--; + + stream_parametrosRetorno.add(d.getTree()); + + // AST REWRITE + // elements: d, REF, 90 + // token labels: + // rule labels: retval, d + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 111:23: -> ^( 'invokespecial' REF $d) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:111:26: ^( 'invokespecial' REF $d) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_90.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_REF.nextNode() + ); + + adaptor.addChild(root_1, stream_d.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:112:22: a= 'invokestatic' REF d= parametrosRetorno + { + a=(Token)match(input,91,FOLLOW_91_in_manipulacaoObjetos1209); + stream_91.add(a); + + + REF67=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos1211); + stream_REF.add(REF67); + + + pushFollow(FOLLOW_parametrosRetorno_in_manipulacaoObjetos1217); + d=parametrosRetorno(); + + state._fsp--; + + stream_parametrosRetorno.add(d.getTree()); + + // AST REWRITE + // elements: d, 91, REF + // token labels: + // rule labels: retval, d + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 113:23: -> ^( 'invokestatic' REF $d) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:113:26: ^( 'invokestatic' REF $d) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_91.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_REF.nextNode() + ); + + adaptor.addChild(root_1, stream_d.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:114:23: a= 'invokevirtual' REF d= parametrosRetorno + { + a=(Token)match(input,92,FOLLOW_92_in_manipulacaoObjetos1278); + stream_92.add(a); + + + REF68=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos1280); + stream_REF.add(REF68); + + + pushFollow(FOLLOW_parametrosRetorno_in_manipulacaoObjetos1286); + d=parametrosRetorno(); + + state._fsp--; + + stream_parametrosRetorno.add(d.getTree()); + + // AST REWRITE + // elements: d, REF, 92 + // token labels: + // rule labels: retval, d + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 115:23: -> ^( 'invokevirtual' REF $d) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:115:26: ^( 'invokevirtual' REF $d) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + stream_92.nextNode() + , root_1); + + adaptor.addChild(root_1, + stream_REF.nextNode() + ); + + adaptor.addChild(root_1, stream_d.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:116:22: a= 'new' (b= ID |b= REF ) + { + a=(Token)match(input,104,FOLLOW_104_in_manipulacaoObjetos1346); + stream_104.add(a); + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:116:32: (b= ID |b= REF ) + int alt21=2; + int LA21_0 = input.LA(1); + + if ( (LA21_0==ID) ) { + alt21=1; + } + else if ( (LA21_0==REF) ) { + alt21=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 21, 0, input); + + throw nvae; + + } + switch (alt21) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:116:33: b= ID + { + b=(Token)match(input,ID,FOLLOW_ID_in_manipulacaoObjetos1353); + stream_ID.add(b); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:116:42: b= REF + { + b=(Token)match(input,REF,FOLLOW_REF_in_manipulacaoObjetos1361); + stream_REF.add(b); + + + } + break; + + } + + + // AST REWRITE + // elements: b + // token labels: b + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_b=new RewriteRuleTokenStream(adaptor,"token b",b); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 116:51: -> ^( NEW $b) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:116:54: ^( NEW $b) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(NEW, "NEW") + , root_1); + + adaptor.addChild(root_1, stream_b.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + break; + + } + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "manipulacaoObjetos" + + + public static class tipo_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "tipo" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:120:1: tipo : ( INT | VOID | TIPO_REF ); + public final AssemblerParser.tipo_return tipo() throws RecognitionException { + AssemblerParser.tipo_return retval = new AssemblerParser.tipo_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token set69=null; + + BytecodesAST set69_tree=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:120:6: ( INT | VOID | TIPO_REF ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g: + { + root_0 = (BytecodesAST)adaptor.nil(); + + + set69=(Token)input.LT(1); + + if ( input.LA(1)==INT||(input.LA(1) >= TIPO_REF && input.LA(1) <= VOID) ) { + input.consume(); + adaptor.addChild(root_0, + (BytecodesAST)adaptor.create(set69) + ); + state.errorRecovery=false; + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "tipo" + + + public static class aritmetica_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "aritmetica" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:122:1: aritmetica : (a= 'iadd' |a= 'isub' |a= 'imul' |a= 'idiv' |a= 'irem' |a= 'iinc' |a= 'ineg' ) -> ^( ARITMETICA $a) ; + public final AssemblerParser.aritmetica_return aritmetica() throws RecognitionException { + AssemblerParser.aritmetica_return retval = new AssemblerParser.aritmetica_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + + BytecodesAST a_tree=null; + RewriteRuleTokenStream stream_69=new RewriteRuleTokenStream(adaptor,"token 69"); + RewriteRuleTokenStream stream_94=new RewriteRuleTokenStream(adaptor,"token 94"); + RewriteRuleTokenStream stream_82=new RewriteRuleTokenStream(adaptor,"token 82"); + RewriteRuleTokenStream stream_60=new RewriteRuleTokenStream(adaptor,"token 60"); + RewriteRuleTokenStream stream_101=new RewriteRuleTokenStream(adaptor,"token 101"); + RewriteRuleTokenStream stream_88=new RewriteRuleTokenStream(adaptor,"token 88"); + RewriteRuleTokenStream stream_89=new RewriteRuleTokenStream(adaptor,"token 89"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:122:12: ( (a= 'iadd' |a= 'isub' |a= 'imul' |a= 'idiv' |a= 'irem' |a= 'iinc' |a= 'ineg' ) -> ^( ARITMETICA $a) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:122:14: (a= 'iadd' |a= 'isub' |a= 'imul' |a= 'idiv' |a= 'irem' |a= 'iinc' |a= 'ineg' ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:122:14: (a= 'iadd' |a= 'isub' |a= 'imul' |a= 'idiv' |a= 'irem' |a= 'iinc' |a= 'ineg' ) + int alt23=7; + switch ( input.LA(1) ) { + case 60: + { + alt23=1; + } + break; + case 101: + { + alt23=2; + } + break; + case 88: + { + alt23=3; + } + break; + case 69: + { + alt23=4; + } + break; + case 94: + { + alt23=5; + } + break; + case 82: + { + alt23=6; + } + break; + case 89: + { + alt23=7; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 23, 0, input); + + throw nvae; + + } + + switch (alt23) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:122:16: a= 'iadd' + { + a=(Token)match(input,60,FOLLOW_60_in_aritmetica1440); + stream_60.add(a); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:123:19: a= 'isub' + { + a=(Token)match(input,101,FOLLOW_101_in_aritmetica1464); + stream_101.add(a); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:124:19: a= 'imul' + { + a=(Token)match(input,88,FOLLOW_88_in_aritmetica1488); + stream_88.add(a); + + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:125:19: a= 'idiv' + { + a=(Token)match(input,69,FOLLOW_69_in_aritmetica1512); + stream_69.add(a); + + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:126:19: a= 'irem' + { + a=(Token)match(input,94,FOLLOW_94_in_aritmetica1536); + stream_94.add(a); + + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:127:19: a= 'iinc' + { + a=(Token)match(input,82,FOLLOW_82_in_aritmetica1560); + stream_82.add(a); + + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:128:19: a= 'ineg' + { + a=(Token)match(input,89,FOLLOW_89_in_aritmetica1584); + stream_89.add(a); + + + } + break; + + } + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 130:14: -> ^( ARITMETICA $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:130:17: ^( ARITMETICA $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(ARITMETICA, "ARITMETICA") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "aritmetica" + + + public static class load_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "load" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:133:1: load : (a= 'iconst_m1' |a= 'iconst_0' |a= 'iconst_1' |a= 'iconst_2' |a= 'iconst_3' |a= 'iconst_4' |a= 'iconst_5' |a= 'aconst_null' |a= 'iload_0' |a= 'iload_1' |a= 'iload_2' |a= 'iload_3' |a= 'aload_0' |a= 'aload_1' |a= 'aload_2' |a= 'aload_3' ) -> ^( LOAD $a) ; + public final AssemblerParser.load_return load() throws RecognitionException { + AssemblerParser.load_return retval = new AssemblerParser.load_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + + BytecodesAST a_tree=null; + RewriteRuleTokenStream stream_49=new RewriteRuleTokenStream(adaptor,"token 49"); + RewriteRuleTokenStream stream_67=new RewriteRuleTokenStream(adaptor,"token 67"); + RewriteRuleTokenStream stream_48=new RewriteRuleTokenStream(adaptor,"token 48"); + RewriteRuleTokenStream stream_66=new RewriteRuleTokenStream(adaptor,"token 66"); + RewriteRuleTokenStream stream_68=new RewriteRuleTokenStream(adaptor,"token 68"); + RewriteRuleTokenStream stream_44=new RewriteRuleTokenStream(adaptor,"token 44"); + RewriteRuleTokenStream stream_47=new RewriteRuleTokenStream(adaptor,"token 47"); + RewriteRuleTokenStream stream_46=new RewriteRuleTokenStream(adaptor,"token 46"); + RewriteRuleTokenStream stream_64=new RewriteRuleTokenStream(adaptor,"token 64"); + RewriteRuleTokenStream stream_65=new RewriteRuleTokenStream(adaptor,"token 65"); + RewriteRuleTokenStream stream_62=new RewriteRuleTokenStream(adaptor,"token 62"); + RewriteRuleTokenStream stream_63=new RewriteRuleTokenStream(adaptor,"token 63"); + RewriteRuleTokenStream stream_86=new RewriteRuleTokenStream(adaptor,"token 86"); + RewriteRuleTokenStream stream_87=new RewriteRuleTokenStream(adaptor,"token 87"); + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_85=new RewriteRuleTokenStream(adaptor,"token 85"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:133:6: ( (a= 'iconst_m1' |a= 'iconst_0' |a= 'iconst_1' |a= 'iconst_2' |a= 'iconst_3' |a= 'iconst_4' |a= 'iconst_5' |a= 'aconst_null' |a= 'iload_0' |a= 'iload_1' |a= 'iload_2' |a= 'iload_3' |a= 'aload_0' |a= 'aload_1' |a= 'aload_2' |a= 'aload_3' ) -> ^( LOAD $a) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:133:8: (a= 'iconst_m1' |a= 'iconst_0' |a= 'iconst_1' |a= 'iconst_2' |a= 'iconst_3' |a= 'iconst_4' |a= 'iconst_5' |a= 'aconst_null' |a= 'iload_0' |a= 'iload_1' |a= 'iload_2' |a= 'iload_3' |a= 'aload_0' |a= 'aload_1' |a= 'aload_2' |a= 'aload_3' ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:133:8: (a= 'iconst_m1' |a= 'iconst_0' |a= 'iconst_1' |a= 'iconst_2' |a= 'iconst_3' |a= 'iconst_4' |a= 'iconst_5' |a= 'aconst_null' |a= 'iload_0' |a= 'iload_1' |a= 'iload_2' |a= 'iload_3' |a= 'aload_0' |a= 'aload_1' |a= 'aload_2' |a= 'aload_3' ) + int alt24=16; + switch ( input.LA(1) ) { + case 68: + { + alt24=1; + } + break; + case 62: + { + alt24=2; + } + break; + case 63: + { + alt24=3; + } + break; + case 64: + { + alt24=4; + } + break; + case 65: + { + alt24=5; + } + break; + case 66: + { + alt24=6; + } + break; + case 67: + { + alt24=7; + } + break; + case 44: + { + alt24=8; + } + break; + case 84: + { + alt24=9; + } + break; + case 85: + { + alt24=10; + } + break; + case 86: + { + alt24=11; + } + break; + case 87: + { + alt24=12; + } + break; + case 46: + { + alt24=13; + } + break; + case 47: + { + alt24=14; + } + break; + case 48: + { + alt24=15; + } + break; + case 49: + { + alt24=16; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 24, 0, input); + + throw nvae; + + } + + switch (alt24) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:133:10: a= 'iconst_m1' + { + a=(Token)match(input,68,FOLLOW_68_in_load1658); + stream_68.add(a); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:134:13: a= 'iconst_0' + { + a=(Token)match(input,62,FOLLOW_62_in_load1676); + stream_62.add(a); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:135:13: a= 'iconst_1' + { + a=(Token)match(input,63,FOLLOW_63_in_load1694); + stream_63.add(a); + + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:136:13: a= 'iconst_2' + { + a=(Token)match(input,64,FOLLOW_64_in_load1712); + stream_64.add(a); + + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:137:13: a= 'iconst_3' + { + a=(Token)match(input,65,FOLLOW_65_in_load1730); + stream_65.add(a); + + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:138:13: a= 'iconst_4' + { + a=(Token)match(input,66,FOLLOW_66_in_load1748); + stream_66.add(a); + + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:139:13: a= 'iconst_5' + { + a=(Token)match(input,67,FOLLOW_67_in_load1766); + stream_67.add(a); + + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:140:13: a= 'aconst_null' + { + a=(Token)match(input,44,FOLLOW_44_in_load1784); + stream_44.add(a); + + + } + break; + case 9 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:141:13: a= 'iload_0' + { + a=(Token)match(input,84,FOLLOW_84_in_load1802); + stream_84.add(a); + + + } + break; + case 10 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:142:13: a= 'iload_1' + { + a=(Token)match(input,85,FOLLOW_85_in_load1820); + stream_85.add(a); + + + } + break; + case 11 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:143:13: a= 'iload_2' + { + a=(Token)match(input,86,FOLLOW_86_in_load1838); + stream_86.add(a); + + + } + break; + case 12 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:144:13: a= 'iload_3' + { + a=(Token)match(input,87,FOLLOW_87_in_load1856); + stream_87.add(a); + + + } + break; + case 13 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:145:13: a= 'aload_0' + { + a=(Token)match(input,46,FOLLOW_46_in_load1874); + stream_46.add(a); + + + } + break; + case 14 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:146:13: a= 'aload_1' + { + a=(Token)match(input,47,FOLLOW_47_in_load1892); + stream_47.add(a); + + + } + break; + case 15 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:147:13: a= 'aload_2' + { + a=(Token)match(input,48,FOLLOW_48_in_load1910); + stream_48.add(a); + + + } + break; + case 16 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:148:13: a= 'aload_3' + { + a=(Token)match(input,49,FOLLOW_49_in_load1928); + stream_49.add(a); + + + } + break; + + } + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 150:8: -> ^( LOAD $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:150:11: ^( LOAD $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(LOAD, "LOAD") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "load" + + + public static class loadint_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "loadint" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:153:1: loadint : (a= 'iload' b= INTEIRO |a= 'ldc' b= INTEIRO |a= 'aload' b= INTEIRO ) -> ^( LOAD $a $b) ; + public final AssemblerParser.loadint_return loadint() throws RecognitionException { + AssemblerParser.loadint_return retval = new AssemblerParser.loadint_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + Token b=null; + + BytecodesAST a_tree=null; + BytecodesAST b_tree=null; + RewriteRuleTokenStream stream_45=new RewriteRuleTokenStream(adaptor,"token 45"); + RewriteRuleTokenStream stream_83=new RewriteRuleTokenStream(adaptor,"token 83"); + RewriteRuleTokenStream stream_INTEIRO=new RewriteRuleTokenStream(adaptor,"token INTEIRO"); + RewriteRuleTokenStream stream_103=new RewriteRuleTokenStream(adaptor,"token 103"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:153:9: ( (a= 'iload' b= INTEIRO |a= 'ldc' b= INTEIRO |a= 'aload' b= INTEIRO ) -> ^( LOAD $a $b) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:153:11: (a= 'iload' b= INTEIRO |a= 'ldc' b= INTEIRO |a= 'aload' b= INTEIRO ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:153:11: (a= 'iload' b= INTEIRO |a= 'ldc' b= INTEIRO |a= 'aload' b= INTEIRO ) + int alt25=3; + switch ( input.LA(1) ) { + case 83: + { + alt25=1; + } + break; + case 103: + { + alt25=2; + } + break; + case 45: + { + alt25=3; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 25, 0, input); + + throw nvae; + + } + + switch (alt25) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:153:13: a= 'iload' b= INTEIRO + { + a=(Token)match(input,83,FOLLOW_83_in_loadint1978); + stream_83.add(a); + + + b=(Token)match(input,INTEIRO,FOLLOW_INTEIRO_in_loadint1984); + stream_INTEIRO.add(b); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:154:15: a= 'ldc' b= INTEIRO + { + a=(Token)match(input,103,FOLLOW_103_in_loadint2004); + stream_103.add(a); + + + b=(Token)match(input,INTEIRO,FOLLOW_INTEIRO_in_loadint2010); + stream_INTEIRO.add(b); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:155:15: a= 'aload' b= INTEIRO + { + a=(Token)match(input,45,FOLLOW_45_in_loadint2030); + stream_45.add(a); + + + b=(Token)match(input,INTEIRO,FOLLOW_INTEIRO_in_loadint2036); + stream_INTEIRO.add(b); + + + } + break; + + } + + + // AST REWRITE + // elements: b, a + // token labels: b, a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_b=new RewriteRuleTokenStream(adaptor,"token b",b); + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 157:11: -> ^( LOAD $a $b) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:157:14: ^( LOAD $a $b) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(LOAD, "LOAD") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_1, stream_b.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "loadint" + + + public static class store_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "store" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:160:1: store : (a= 'istore_0' |a= 'istore_1' |a= 'istore_2' |a= 'istore_3' |a= 'astore_0' |a= 'astore_1' |a= 'astore_2' |a= 'astore_3' ) -> ^( STORE $a) ; + public final AssemblerParser.store_return store() throws RecognitionException { + AssemblerParser.store_return retval = new AssemblerParser.store_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + + BytecodesAST a_tree=null; + RewriteRuleTokenStream stream_98=new RewriteRuleTokenStream(adaptor,"token 98"); + RewriteRuleTokenStream stream_97=new RewriteRuleTokenStream(adaptor,"token 97"); + RewriteRuleTokenStream stream_55=new RewriteRuleTokenStream(adaptor,"token 55"); + RewriteRuleTokenStream stream_52=new RewriteRuleTokenStream(adaptor,"token 52"); + RewriteRuleTokenStream stream_53=new RewriteRuleTokenStream(adaptor,"token 53"); + RewriteRuleTokenStream stream_54=new RewriteRuleTokenStream(adaptor,"token 54"); + RewriteRuleTokenStream stream_99=new RewriteRuleTokenStream(adaptor,"token 99"); + RewriteRuleTokenStream stream_100=new RewriteRuleTokenStream(adaptor,"token 100"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:160:7: ( (a= 'istore_0' |a= 'istore_1' |a= 'istore_2' |a= 'istore_3' |a= 'astore_0' |a= 'astore_1' |a= 'astore_2' |a= 'astore_3' ) -> ^( STORE $a) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:160:9: (a= 'istore_0' |a= 'istore_1' |a= 'istore_2' |a= 'istore_3' |a= 'astore_0' |a= 'astore_1' |a= 'astore_2' |a= 'astore_3' ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:160:9: (a= 'istore_0' |a= 'istore_1' |a= 'istore_2' |a= 'istore_3' |a= 'astore_0' |a= 'astore_1' |a= 'astore_2' |a= 'astore_3' ) + int alt26=8; + switch ( input.LA(1) ) { + case 97: + { + alt26=1; + } + break; + case 98: + { + alt26=2; + } + break; + case 99: + { + alt26=3; + } + break; + case 100: + { + alt26=4; + } + break; + case 52: + { + alt26=5; + } + break; + case 53: + { + alt26=6; + } + break; + case 54: + { + alt26=7; + } + break; + case 55: + { + alt26=8; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 26, 0, input); + + throw nvae; + + } + + switch (alt26) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:160:11: a= 'istore_0' + { + a=(Token)match(input,97,FOLLOW_97_in_store2098); + stream_97.add(a); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:161:13: a= 'istore_1' + { + a=(Token)match(input,98,FOLLOW_98_in_store2116); + stream_98.add(a); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:162:13: a= 'istore_2' + { + a=(Token)match(input,99,FOLLOW_99_in_store2134); + stream_99.add(a); + + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:163:13: a= 'istore_3' + { + a=(Token)match(input,100,FOLLOW_100_in_store2152); + stream_100.add(a); + + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:164:13: a= 'astore_0' + { + a=(Token)match(input,52,FOLLOW_52_in_store2170); + stream_52.add(a); + + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:165:13: a= 'astore_1' + { + a=(Token)match(input,53,FOLLOW_53_in_store2188); + stream_53.add(a); + + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:166:13: a= 'astore_2' + { + a=(Token)match(input,54,FOLLOW_54_in_store2206); + stream_54.add(a); + + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:167:13: a= 'astore_3' + { + a=(Token)match(input,55,FOLLOW_55_in_store2224); + stream_55.add(a); + + + } + break; + + } + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 169:9: -> ^( STORE $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:169:12: ^( STORE $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(STORE, "STORE") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "store" + + + public static class storeint_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "storeint" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:172:1: storeint : (a= 'istore' b= INTEIRO |a= 'astore' b= INTEIRO ) -> ^( STORE $a $b) ; + public final AssemblerParser.storeint_return storeint() throws RecognitionException { + AssemblerParser.storeint_return retval = new AssemblerParser.storeint_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + Token b=null; + + BytecodesAST a_tree=null; + BytecodesAST b_tree=null; + RewriteRuleTokenStream stream_96=new RewriteRuleTokenStream(adaptor,"token 96"); + RewriteRuleTokenStream stream_51=new RewriteRuleTokenStream(adaptor,"token 51"); + RewriteRuleTokenStream stream_INTEIRO=new RewriteRuleTokenStream(adaptor,"token INTEIRO"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:172:10: ( (a= 'istore' b= INTEIRO |a= 'astore' b= INTEIRO ) -> ^( STORE $a $b) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:172:12: (a= 'istore' b= INTEIRO |a= 'astore' b= INTEIRO ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:172:12: (a= 'istore' b= INTEIRO |a= 'astore' b= INTEIRO ) + int alt27=2; + int LA27_0 = input.LA(1); + + if ( (LA27_0==96) ) { + alt27=1; + } + else if ( (LA27_0==51) ) { + alt27=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 27, 0, input); + + throw nvae; + + } + switch (alt27) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:172:14: a= 'istore' b= INTEIRO + { + a=(Token)match(input,96,FOLLOW_96_in_storeint2278); + stream_96.add(a); + + + b=(Token)match(input,INTEIRO,FOLLOW_INTEIRO_in_storeint2284); + stream_INTEIRO.add(b); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:173:16: a= 'astore' b= INTEIRO + { + a=(Token)match(input,51,FOLLOW_51_in_storeint2305); + stream_51.add(a); + + + b=(Token)match(input,INTEIRO,FOLLOW_INTEIRO_in_storeint2311); + stream_INTEIRO.add(b); + + + } + break; + + } + + + // AST REWRITE + // elements: a, b + // token labels: b, a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_b=new RewriteRuleTokenStream(adaptor,"token b",b); + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 175:12: -> ^( STORE $a $b) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:175:15: ^( STORE $a $b) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(STORE, "STORE") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_1, stream_b.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "storeint" + + + public static class logica_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "logica" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:178:1: logica : (a= 'iand' |a= 'ior' |a= 'ixor' ) -> ^( LOGICA $a) ; + public final AssemblerParser.logica_return logica() throws RecognitionException { + AssemblerParser.logica_return retval = new AssemblerParser.logica_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + + BytecodesAST a_tree=null; + RewriteRuleTokenStream stream_93=new RewriteRuleTokenStream(adaptor,"token 93"); + RewriteRuleTokenStream stream_102=new RewriteRuleTokenStream(adaptor,"token 102"); + RewriteRuleTokenStream stream_61=new RewriteRuleTokenStream(adaptor,"token 61"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:178:8: ( (a= 'iand' |a= 'ior' |a= 'ixor' ) -> ^( LOGICA $a) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:178:10: (a= 'iand' |a= 'ior' |a= 'ixor' ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:178:10: (a= 'iand' |a= 'ior' |a= 'ixor' ) + int alt28=3; + switch ( input.LA(1) ) { + case 61: + { + alt28=1; + } + break; + case 93: + { + alt28=2; + } + break; + case 102: + { + alt28=3; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 28, 0, input); + + throw nvae; + + } + + switch (alt28) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:178:12: a= 'iand' + { + a=(Token)match(input,61,FOLLOW_61_in_logica2371); + stream_61.add(a); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:179:14: a= 'ior' + { + a=(Token)match(input,93,FOLLOW_93_in_logica2390); + stream_93.add(a); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:180:14: a= 'ixor' + { + a=(Token)match(input,102,FOLLOW_102_in_logica2409); + stream_102.add(a); + + + } + break; + + } + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 182:10: -> ^( LOGICA $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:182:13: ^( LOGICA $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(LOGICA, "LOGICA") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "logica" + + + public static class desvio_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "desvio" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:185:1: desvio : (a= 'ifeq' b= ID |a= 'ifne' b= ID |a= 'iflt' b= ID |a= 'ifge' b= ID |a= 'ifgt' b= ID |a= 'ifle' b= ID |a= 'if_icmpeq' b= ID |a= 'if_icmpne' b= ID |a= 'if_icmplt' b= ID |a= 'if_icmpge' b= ID |a= 'if_icmpgt' b= ID |a= 'if_icmple' b= ID |a= 'goto' b= ID ) -> ^( DESVIO $a $b) ; + public final AssemblerParser.desvio_return desvio() throws RecognitionException { + AssemblerParser.desvio_return retval = new AssemblerParser.desvio_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + Token b=null; + + BytecodesAST a_tree=null; + BytecodesAST b_tree=null; + RewriteRuleTokenStream stream_79=new RewriteRuleTokenStream(adaptor,"token 79"); + RewriteRuleTokenStream stream_78=new RewriteRuleTokenStream(adaptor,"token 78"); + RewriteRuleTokenStream stream_59=new RewriteRuleTokenStream(adaptor,"token 59"); + RewriteRuleTokenStream stream_77=new RewriteRuleTokenStream(adaptor,"token 77"); + RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); + RewriteRuleTokenStream stream_70=new RewriteRuleTokenStream(adaptor,"token 70"); + RewriteRuleTokenStream stream_80=new RewriteRuleTokenStream(adaptor,"token 80"); + RewriteRuleTokenStream stream_71=new RewriteRuleTokenStream(adaptor,"token 71"); + RewriteRuleTokenStream stream_72=new RewriteRuleTokenStream(adaptor,"token 72"); + RewriteRuleTokenStream stream_81=new RewriteRuleTokenStream(adaptor,"token 81"); + RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73"); + RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74"); + RewriteRuleTokenStream stream_75=new RewriteRuleTokenStream(adaptor,"token 75"); + RewriteRuleTokenStream stream_76=new RewriteRuleTokenStream(adaptor,"token 76"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:185:8: ( (a= 'ifeq' b= ID |a= 'ifne' b= ID |a= 'iflt' b= ID |a= 'ifge' b= ID |a= 'ifgt' b= ID |a= 'ifle' b= ID |a= 'if_icmpeq' b= ID |a= 'if_icmpne' b= ID |a= 'if_icmplt' b= ID |a= 'if_icmpge' b= ID |a= 'if_icmpgt' b= ID |a= 'if_icmple' b= ID |a= 'goto' b= ID ) -> ^( DESVIO $a $b) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:185:10: (a= 'ifeq' b= ID |a= 'ifne' b= ID |a= 'iflt' b= ID |a= 'ifge' b= ID |a= 'ifgt' b= ID |a= 'ifle' b= ID |a= 'if_icmpeq' b= ID |a= 'if_icmpne' b= ID |a= 'if_icmplt' b= ID |a= 'if_icmpge' b= ID |a= 'if_icmpgt' b= ID |a= 'if_icmple' b= ID |a= 'goto' b= ID ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:185:10: (a= 'ifeq' b= ID |a= 'ifne' b= ID |a= 'iflt' b= ID |a= 'ifge' b= ID |a= 'ifgt' b= ID |a= 'ifle' b= ID |a= 'if_icmpeq' b= ID |a= 'if_icmpne' b= ID |a= 'if_icmplt' b= ID |a= 'if_icmpge' b= ID |a= 'if_icmpgt' b= ID |a= 'if_icmple' b= ID |a= 'goto' b= ID ) + int alt29=13; + switch ( input.LA(1) ) { + case 76: + { + alt29=1; + } + break; + case 81: + { + alt29=2; + } + break; + case 80: + { + alt29=3; + } + break; + case 77: + { + alt29=4; + } + break; + case 78: + { + alt29=5; + } + break; + case 79: + { + alt29=6; + } + break; + case 70: + { + alt29=7; + } + break; + case 75: + { + alt29=8; + } + break; + case 74: + { + alt29=9; + } + break; + case 71: + { + alt29=10; + } + break; + case 72: + { + alt29=11; + } + break; + case 73: + { + alt29=12; + } + break; + case 59: + { + alt29=13; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 29, 0, input); + + throw nvae; + + } + + switch (alt29) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:185:12: a= 'ifeq' b= ID + { + a=(Token)match(input,76,FOLLOW_76_in_desvio2460); + stream_76.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2466); + stream_ID.add(b); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:186:14: a= 'ifne' b= ID + { + a=(Token)match(input,81,FOLLOW_81_in_desvio2485); + stream_81.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2491); + stream_ID.add(b); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:187:14: a= 'iflt' b= ID + { + a=(Token)match(input,80,FOLLOW_80_in_desvio2510); + stream_80.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2516); + stream_ID.add(b); + + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:188:14: a= 'ifge' b= ID + { + a=(Token)match(input,77,FOLLOW_77_in_desvio2535); + stream_77.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2541); + stream_ID.add(b); + + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:189:14: a= 'ifgt' b= ID + { + a=(Token)match(input,78,FOLLOW_78_in_desvio2560); + stream_78.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2566); + stream_ID.add(b); + + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:190:14: a= 'ifle' b= ID + { + a=(Token)match(input,79,FOLLOW_79_in_desvio2585); + stream_79.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2591); + stream_ID.add(b); + + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:191:14: a= 'if_icmpeq' b= ID + { + a=(Token)match(input,70,FOLLOW_70_in_desvio2610); + stream_70.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2616); + stream_ID.add(b); + + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:192:14: a= 'if_icmpne' b= ID + { + a=(Token)match(input,75,FOLLOW_75_in_desvio2635); + stream_75.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2641); + stream_ID.add(b); + + + } + break; + case 9 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:193:14: a= 'if_icmplt' b= ID + { + a=(Token)match(input,74,FOLLOW_74_in_desvio2660); + stream_74.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2666); + stream_ID.add(b); + + + } + break; + case 10 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:194:14: a= 'if_icmpge' b= ID + { + a=(Token)match(input,71,FOLLOW_71_in_desvio2685); + stream_71.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2691); + stream_ID.add(b); + + + } + break; + case 11 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:195:14: a= 'if_icmpgt' b= ID + { + a=(Token)match(input,72,FOLLOW_72_in_desvio2710); + stream_72.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2716); + stream_ID.add(b); + + + } + break; + case 12 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:196:14: a= 'if_icmple' b= ID + { + a=(Token)match(input,73,FOLLOW_73_in_desvio2735); + stream_73.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2741); + stream_ID.add(b); + + + } + break; + case 13 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:197:14: a= 'goto' b= ID + { + a=(Token)match(input,59,FOLLOW_59_in_desvio2760); + stream_59.add(a); + + + b=(Token)match(input,ID,FOLLOW_ID_in_desvio2766); + stream_ID.add(b); + + + } + break; + + } + + + // AST REWRITE + // elements: b, a + // token labels: b, a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_b=new RewriteRuleTokenStream(adaptor,"token b",b); + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 199:10: -> ^( DESVIO $a $b) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:199:13: ^( DESVIO $a $b) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(DESVIO, "DESVIO") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_1, stream_b.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "desvio" + + + public static class pilha_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "pilha" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:202:1: pilha : (a= 'pop' |a= 'pop2' |a= 'dup' ) -> ^( PILHA $a) ; + public final AssemblerParser.pilha_return pilha() throws RecognitionException { + AssemblerParser.pilha_return retval = new AssemblerParser.pilha_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token a=null; + + BytecodesAST a_tree=null; + RewriteRuleTokenStream stream_56=new RewriteRuleTokenStream(adaptor,"token 56"); + RewriteRuleTokenStream stream_107=new RewriteRuleTokenStream(adaptor,"token 107"); + RewriteRuleTokenStream stream_106=new RewriteRuleTokenStream(adaptor,"token 106"); + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:202:7: ( (a= 'pop' |a= 'pop2' |a= 'dup' ) -> ^( PILHA $a) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:202:9: (a= 'pop' |a= 'pop2' |a= 'dup' ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:202:9: (a= 'pop' |a= 'pop2' |a= 'dup' ) + int alt30=3; + switch ( input.LA(1) ) { + case 106: + { + alt30=1; + } + break; + case 107: + { + alt30=2; + } + break; + case 56: + { + alt30=3; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 30, 0, input); + + throw nvae; + + } + + switch (alt30) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:202:11: a= 'pop' + { + a=(Token)match(input,106,FOLLOW_106_in_pilha2827); + stream_106.add(a); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:203:13: a= 'pop2' + { + a=(Token)match(input,107,FOLLOW_107_in_pilha2845); + stream_107.add(a); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:204:13: a= 'dup' + { + a=(Token)match(input,56,FOLLOW_56_in_pilha2863); + stream_56.add(a); + + + } + break; + + } + + + // AST REWRITE + // elements: a + // token labels: a + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleTokenStream stream_a=new RewriteRuleTokenStream(adaptor,"token a",a); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 206:9: -> ^( PILHA $a) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:206:12: ^( PILHA $a) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(PILHA, "PILHA") + , root_1); + + adaptor.addChild(root_1, stream_a.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "pilha" + + + public static class parametrosRetorno_return extends ParserRuleReturnScope { + BytecodesAST tree; + public Object getTree() { return tree; } + }; + + + // $ANTLR start "parametrosRetorno" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:209:1: parametrosRetorno : ( parametros | '(' parametros ')' ) tip= tipo -> ^( METHOD_CALL parametros $tip) ; + public final AssemblerParser.parametrosRetorno_return parametrosRetorno() throws RecognitionException { + AssemblerParser.parametrosRetorno_return retval = new AssemblerParser.parametrosRetorno_return(); + retval.start = input.LT(1); + + + BytecodesAST root_0 = null; + + Token char_literal71=null; + Token char_literal73=null; + AssemblerParser.tipo_return tip =null; + + AssemblerParser.parametros_return parametros70 =null; + + AssemblerParser.parametros_return parametros72 =null; + + + BytecodesAST char_literal71_tree=null; + BytecodesAST char_literal73_tree=null; + RewriteRuleTokenStream stream_35=new RewriteRuleTokenStream(adaptor,"token 35"); + RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33"); + RewriteRuleSubtreeStream stream_parametros=new RewriteRuleSubtreeStream(adaptor,"rule parametros"); + RewriteRuleSubtreeStream stream_tipo=new RewriteRuleSubtreeStream(adaptor,"rule tipo"); + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:210:6: ( ( parametros | '(' parametros ')' ) tip= tipo -> ^( METHOD_CALL parametros $tip) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:210:10: ( parametros | '(' parametros ')' ) tip= tipo + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:210:10: ( parametros | '(' parametros ')' ) + int alt31=2; + int LA31_0 = input.LA(1); + + if ( (LA31_0==INT||LA31_0==TIPO_REF||LA31_0==34) ) { + alt31=1; + } + else if ( (LA31_0==33) ) { + alt31=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 31, 0, input); + + throw nvae; + + } + switch (alt31) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:210:11: parametros + { + pushFollow(FOLLOW_parametros_in_parametrosRetorno2918); + parametros70=parametros(); + + state._fsp--; + + stream_parametros.add(parametros70.getTree()); + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:210:24: '(' parametros ')' + { + char_literal71=(Token)match(input,33,FOLLOW_33_in_parametrosRetorno2922); + stream_33.add(char_literal71); + + + pushFollow(FOLLOW_parametros_in_parametrosRetorno2924); + parametros72=parametros(); + + state._fsp--; + + stream_parametros.add(parametros72.getTree()); + + char_literal73=(Token)match(input,35,FOLLOW_35_in_parametrosRetorno2926); + stream_35.add(char_literal73); + + + } + break; + + } + + + pushFollow(FOLLOW_tipo_in_parametrosRetorno2934); + tip=tipo(); + + state._fsp--; + + stream_tipo.add(tip.getTree()); + + // AST REWRITE + // elements: tip, parametros + // token labels: + // rule labels: retval, tip + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + RewriteRuleSubtreeStream stream_tip=new RewriteRuleSubtreeStream(adaptor,"rule tip",tip!=null?tip.tree:null); + + root_0 = (BytecodesAST)adaptor.nil(); + // 211:12: -> ^( METHOD_CALL parametros $tip) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Assembler.g:211:15: ^( METHOD_CALL parametros $tip) + { + BytecodesAST root_1 = (BytecodesAST)adaptor.nil(); + root_1 = (BytecodesAST)adaptor.becomeRoot( + (BytecodesAST)adaptor.create(METHOD_CALL, "METHOD_CALL") + , root_1); + + adaptor.addChild(root_1, stream_parametros.nextTree()); + + adaptor.addChild(root_1, stream_tip.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + + retval.tree = root_0; + + } + + retval.stop = input.LT(-1); + + + retval.tree = (BytecodesAST)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (BytecodesAST)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "parametrosRetorno" + + // Delegated rules + + + + + public static final BitSet FOLLOW_instrucao_in_programa152 = new BitSet(new long[]{0xFFFFF01000800802L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_operacao_in_instrucao180 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_definicaoClasse_in_instrucao194 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_37_in_instrucao197 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_label_in_operacao219 = new BitSet(new long[]{0xFFFFF00000800000L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_comando_in_operacao221 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_comando_in_operacao225 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_label247 = new BitSet(new long[]{0x0000080000000000L}); + public static final BitSet FOLLOW_43_in_label249 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_manipulacaoObjetos_in_comando267 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_aritmetica_in_comando285 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_load_in_comando303 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_loadint_in_comando321 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_store_in_comando339 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_storeint_in_comando357 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_desvio_in_comando375 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_logica_in_comando393 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_pilha_in_comando411 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_retorno_in_comando429 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_105_in_comando447 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_comando463 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_36_in_definicaoClasse486 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_definicaoClasse488 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_definicaoClasse490 = new BitSet(new long[]{0x0000068000000000L}); + public static final BitSet FOLLOW_superClasse_in_definicaoClasse493 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_definicaoClasse495 = new BitSet(new long[]{0x0000028000000000L}); + public static final BitSet FOLLOW_membroClasse_in_definicaoClasse500 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_definicaoClasse502 = new BitSet(new long[]{0x0000028000000002L}); + public static final BitSet FOLLOW_42_in_superClasse563 = new BitSet(new long[]{0x0000000008000800L}); + public static final BitSet FOLLOW_ID_in_superClasse570 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_REF_in_superClasse578 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_39_in_membroClasse600 = new BitSet(new long[]{0x0000000000000800L,0x0000800000000000L}); + public static final BitSet FOLLOW_111_in_membroClasse606 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_membroClasse609 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_membroClasse611 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_41_in_membroClasse633 = new BitSet(new long[]{0x0000000000001000L}); + public static final BitSet FOLLOW_INIT_in_membroClasse635 = new BitSet(new long[]{0x0000000640002000L}); + public static final BitSet FOLLOW_parametros_in_membroClasse638 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_33_in_membroClasse642 = new BitSet(new long[]{0x0000000440002000L}); + public static final BitSet FOLLOW_parametros_in_membroClasse644 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_35_in_membroClasse646 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_membroClasse653 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_membroClasse655 = new BitSet(new long[]{0xFFFFF14000800800L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_limite_in_membroClasse658 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_membroClasse660 = new BitSet(new long[]{0xFFFFF04000800800L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_operacao_in_membroClasse664 = new BitSet(new long[]{0xFFFFF04000800800L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_38_in_membroClasse667 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_41_in_membroClasse699 = new BitSet(new long[]{0x0000000000000800L,0x0000800000000000L}); + public static final BitSet FOLLOW_111_in_membroClasse701 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_membroClasse704 = new BitSet(new long[]{0x0000000640002000L}); + public static final BitSet FOLLOW_parametros_in_membroClasse707 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_33_in_membroClasse711 = new BitSet(new long[]{0x0000000440002000L}); + public static final BitSet FOLLOW_parametros_in_membroClasse713 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_35_in_membroClasse715 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_membroClasse722 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_membroClasse724 = new BitSet(new long[]{0xFFFFF14000800800L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_limite_in_membroClasse727 = new BitSet(new long[]{0x0000000000800000L}); + public static final BitSet FOLLOW_NEWLINE_in_membroClasse729 = new BitSet(new long[]{0xFFFFF04000800800L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_operacao_in_membroClasse733 = new BitSet(new long[]{0xFFFFF04000800800L,0x00007FFFFFFFFFFFL}); + public static final BitSet FOLLOW_38_in_membroClasse736 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_40_in_limite785 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_INTEIRO_in_limite787 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_34_in_parametros809 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INT_in_parametros828 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TIPO_REF_in_parametros836 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_50_in_retorno876 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_95_in_retorno894 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_110_in_retorno912 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_57_in_manipulacaoObjetos991 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos993 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_manipulacaoObjetos995 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_58_in_manipulacaoObjetos1018 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos1020 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_manipulacaoObjetos1022 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_108_in_manipulacaoObjetos1059 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos1061 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_manipulacaoObjetos1063 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_109_in_manipulacaoObjetos1100 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos1102 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_manipulacaoObjetos1104 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_90_in_manipulacaoObjetos1141 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos1143 = new BitSet(new long[]{0x0000000640002000L}); + public static final BitSet FOLLOW_parametrosRetorno_in_manipulacaoObjetos1149 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_91_in_manipulacaoObjetos1209 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos1211 = new BitSet(new long[]{0x0000000640002000L}); + public static final BitSet FOLLOW_parametrosRetorno_in_manipulacaoObjetos1217 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_92_in_manipulacaoObjetos1278 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos1280 = new BitSet(new long[]{0x0000000640002000L}); + public static final BitSet FOLLOW_parametrosRetorno_in_manipulacaoObjetos1286 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_104_in_manipulacaoObjetos1346 = new BitSet(new long[]{0x0000000008000800L}); + public static final BitSet FOLLOW_ID_in_manipulacaoObjetos1353 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_REF_in_manipulacaoObjetos1361 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_60_in_aritmetica1440 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_101_in_aritmetica1464 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_88_in_aritmetica1488 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_69_in_aritmetica1512 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_94_in_aritmetica1536 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_82_in_aritmetica1560 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_89_in_aritmetica1584 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_68_in_load1658 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_62_in_load1676 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_63_in_load1694 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_64_in_load1712 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_65_in_load1730 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_66_in_load1748 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_67_in_load1766 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_44_in_load1784 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_84_in_load1802 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_85_in_load1820 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_86_in_load1838 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_87_in_load1856 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_46_in_load1874 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_47_in_load1892 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_48_in_load1910 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_49_in_load1928 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_83_in_loadint1978 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_INTEIRO_in_loadint1984 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_103_in_loadint2004 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_INTEIRO_in_loadint2010 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_45_in_loadint2030 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_INTEIRO_in_loadint2036 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_97_in_store2098 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_98_in_store2116 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_99_in_store2134 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_100_in_store2152 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_52_in_store2170 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_53_in_store2188 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_54_in_store2206 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_55_in_store2224 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_96_in_storeint2278 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_INTEIRO_in_storeint2284 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_51_in_storeint2305 = new BitSet(new long[]{0x0000000000004000L}); + public static final BitSet FOLLOW_INTEIRO_in_storeint2311 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_61_in_logica2371 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_93_in_logica2390 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_102_in_logica2409 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_76_in_desvio2460 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2466 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_81_in_desvio2485 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2491 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_80_in_desvio2510 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2516 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_77_in_desvio2535 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2541 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_78_in_desvio2560 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2566 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_79_in_desvio2585 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2591 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_70_in_desvio2610 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2616 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_75_in_desvio2635 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2641 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_74_in_desvio2660 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2666 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_71_in_desvio2685 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2691 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_72_in_desvio2710 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2716 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_73_in_desvio2735 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2741 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_59_in_desvio2760 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_ID_in_desvio2766 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_106_in_pilha2827 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_107_in_pilha2845 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_56_in_pilha2863 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parametros_in_parametrosRetorno2918 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_33_in_parametrosRetorno2922 = new BitSet(new long[]{0x0000000440002000L}); + public static final BitSet FOLLOW_parametros_in_parametrosRetorno2924 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_35_in_parametrosRetorno2926 = new BitSet(new long[]{0x00000000C0002000L}); + public static final BitSet FOLLOW_tipo_in_parametrosRetorno2934 = new BitSet(new long[]{0x0000000000000002L}); + +} \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/parser/Def.java b/src/br/ufpb/iged/interpretador/parser/Def.java new file mode 100644 index 0000000..0c65a2e --- /dev/null +++ b/src/br/ufpb/iged/interpretador/parser/Def.java @@ -0,0 +1,1381 @@ +// $ANTLR 3.4 C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g 2012-09-29 22:01:23 + + package br.ufpb.iged.interpretador.parser; + + import br.ufpb.iged.interpretador.excecoes.LabelException; +import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; +import br.ufpb.iged.interpretador.symboltable.classes.Escopo; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloVariavel; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; +import br.ufpb.iged.interpretador.symboltable.classes.TabelaSimbolos; +import br.ufpb.iged.interpretador.symboltable.classes.EscopoLocal; + + +import org.antlr.runtime.*; +import org.antlr.runtime.tree.*; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; + +@SuppressWarnings({"all", "warnings", "unchecked"}) +public class Def extends TreeFilter { + public static final String[] tokenNames = new String[] { + "", "", "", "", "ARGS", "ARITMETICA", "BODY", "CONSTR_DECL", "DESVIO", "EXTENDS", "FIELD_DECL", "ID", "INIT", "INT", "INTEIRO", "LABEL", "LIMIT", "LOAD", "LOGICA", "MEMBRO_CLASSE", "METHOD_CALL", "METHOD_DECL", "NEW", "NEWLINE", "NULL", "PARAMS", "PILHA", "REF", "RETURN", "STORE", "TIPO_REF", "VOID", "WS", "'('", "'()'", "')'", "'.class'", "'.end class'", "'.end method'", "'.field'", "'.limit locals'", "'.method'", "'.super'", "':'", "'aconst_null'", "'aload'", "'aload_0'", "'aload_1'", "'aload_2'", "'aload_3'", "'areturn'", "'astore'", "'astore_0'", "'astore_1'", "'astore_2'", "'astore_3'", "'dup'", "'getfield'", "'getstatic'", "'goto'", "'iadd'", "'iand'", "'iconst_0'", "'iconst_1'", "'iconst_2'", "'iconst_3'", "'iconst_4'", "'iconst_5'", "'iconst_m1'", "'idiv'", "'if_icmpeq'", "'if_icmpge'", "'if_icmpgt'", "'if_icmple'", "'if_icmplt'", "'if_icmpne'", "'ifeq'", "'ifge'", "'ifgt'", "'ifle'", "'iflt'", "'ifne'", "'iinc'", "'iload'", "'iload_0'", "'iload_1'", "'iload_2'", "'iload_3'", "'imul'", "'ineg'", "'invokespecial'", "'invokestatic'", "'invokevirtual'", "'ior'", "'irem'", "'ireturn'", "'istore'", "'istore_0'", "'istore_1'", "'istore_2'", "'istore_3'", "'isub'", "'ixor'", "'ldc'", "'new'", "'nop'", "'pop'", "'pop2'", "'putfield'", "'putstatic'", "'return'", "'static'" + }; + + public static final int EOF=-1; + public static final int T__33=33; + public static final int T__34=34; + public static final int T__35=35; + public static final int T__36=36; + public static final int T__37=37; + public static final int T__38=38; + public static final int T__39=39; + public static final int T__40=40; + public static final int T__41=41; + public static final int T__42=42; + public static final int T__43=43; + public static final int T__44=44; + public static final int T__45=45; + public static final int T__46=46; + public static final int T__47=47; + public static final int T__48=48; + public static final int T__49=49; + public static final int T__50=50; + public static final int T__51=51; + public static final int T__52=52; + public static final int T__53=53; + public static final int T__54=54; + public static final int T__55=55; + public static final int T__56=56; + public static final int T__57=57; + public static final int T__58=58; + public static final int T__59=59; + public static final int T__60=60; + public static final int T__61=61; + public static final int T__62=62; + public static final int T__63=63; + public static final int T__64=64; + public static final int T__65=65; + public static final int T__66=66; + public static final int T__67=67; + public static final int T__68=68; + public static final int T__69=69; + public static final int T__70=70; + public static final int T__71=71; + public static final int T__72=72; + public static final int T__73=73; + public static final int T__74=74; + public static final int T__75=75; + public static final int T__76=76; + public static final int T__77=77; + public static final int T__78=78; + public static final int T__79=79; + public static final int T__80=80; + public static final int T__81=81; + public static final int T__82=82; + public static final int T__83=83; + public static final int T__84=84; + public static final int T__85=85; + public static final int T__86=86; + public static final int T__87=87; + public static final int T__88=88; + public static final int T__89=89; + public static final int T__90=90; + public static final int T__91=91; + public static final int T__92=92; + public static final int T__93=93; + public static final int T__94=94; + public static final int T__95=95; + public static final int T__96=96; + public static final int T__97=97; + public static final int T__98=98; + public static final int T__99=99; + public static final int T__100=100; + public static final int T__101=101; + public static final int T__102=102; + public static final int T__103=103; + public static final int T__104=104; + public static final int T__105=105; + public static final int T__106=106; + public static final int T__107=107; + public static final int T__108=108; + public static final int T__109=109; + public static final int T__110=110; + public static final int T__111=111; + public static final int ARGS=4; + public static final int ARITMETICA=5; + public static final int BODY=6; + public static final int CONSTR_DECL=7; + public static final int DESVIO=8; + public static final int EXTENDS=9; + public static final int FIELD_DECL=10; + public static final int ID=11; + public static final int INIT=12; + public static final int INT=13; + public static final int INTEIRO=14; + public static final int LABEL=15; + public static final int LIMIT=16; + public static final int LOAD=17; + public static final int LOGICA=18; + public static final int MEMBRO_CLASSE=19; + public static final int METHOD_CALL=20; + public static final int METHOD_DECL=21; + public static final int NEW=22; + public static final int NEWLINE=23; + public static final int NULL=24; + public static final int PARAMS=25; + public static final int PILHA=26; + public static final int REF=27; + public static final int RETURN=28; + public static final int STORE=29; + public static final int TIPO_REF=30; + public static final int VOID=31; + public static final int WS=32; + + // delegates + public TreeFilter[] getDelegates() { + return new TreeFilter[] {}; + } + + // delegators + + + public Def(TreeNodeStream input) { + this(input, new RecognizerSharedState()); + } + public Def(TreeNodeStream input, RecognizerSharedState state) { + super(input, state); + } + + public String[] getTokenNames() { return Def.tokenNames; } + public String getGrammarFileName() { return "C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g"; } + + + TabelaSimbolos tabelaSimbolos; + Escopo escopoAtual; + int contador; + public Def(TreeNodeStream input, TabelaSimbolos tabelaSimbolos) { + this(input); + this.tabelaSimbolos = tabelaSimbolos; + escopoAtual = tabelaSimbolos.global; + } + + + + // $ANTLR start "topdown" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:32:1: topdown : ( entraNoCorpoMetodo | entraNoConstrutor | entraNoMetodo | entraNaClasse | declaracaoVariavel | field | invoke | nenhumoperando | umoperando | label ); + public final void topdown() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:32:9: ( entraNoCorpoMetodo | entraNoConstrutor | entraNoMetodo | entraNaClasse | declaracaoVariavel | field | invoke | nenhumoperando | umoperando | label ) + int alt1=10; + alt1 = dfa1.predict(input); + switch (alt1) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:32:11: entraNoCorpoMetodo + { + pushFollow(FOLLOW_entraNoCorpoMetodo_in_topdown49); + entraNoCorpoMetodo(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:33:11: entraNoConstrutor + { + pushFollow(FOLLOW_entraNoConstrutor_in_topdown61); + entraNoConstrutor(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:34:11: entraNoMetodo + { + pushFollow(FOLLOW_entraNoMetodo_in_topdown73); + entraNoMetodo(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:35:11: entraNaClasse + { + pushFollow(FOLLOW_entraNaClasse_in_topdown85); + entraNaClasse(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:37:11: declaracaoVariavel + { + pushFollow(FOLLOW_declaracaoVariavel_in_topdown106); + declaracaoVariavel(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:38:11: field + { + pushFollow(FOLLOW_field_in_topdown118); + field(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:39:11: invoke + { + pushFollow(FOLLOW_invoke_in_topdown130); + invoke(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:40:11: nenhumoperando + { + pushFollow(FOLLOW_nenhumoperando_in_topdown142); + nenhumoperando(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 9 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:41:11: umoperando + { + pushFollow(FOLLOW_umoperando_in_topdown154); + umoperando(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 10 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:42:11: label + { + pushFollow(FOLLOW_label_in_topdown166); + label(); + + state._fsp--; + if (state.failed) return ; + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } catch (LabelException e) { + System.out.println(e.getMessage()); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "topdown" + + + + // $ANTLR start "bottomup" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:45:1: bottomup : ( saiDoCorpoMetodo | saiDoMetodo | saiDoConstrutor | saiDaClasse ); + public final void bottomup() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:45:10: ( saiDoCorpoMetodo | saiDoMetodo | saiDoConstrutor | saiDaClasse ) + int alt2=4; + switch ( input.LA(1) ) { + case BODY: + { + alt2=1; + } + break; + case METHOD_DECL: + { + alt2=2; + } + break; + case CONSTR_DECL: + { + alt2=3; + } + break; + case 36: + { + alt2=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return ;} + NoViableAltException nvae = + new NoViableAltException("", 2, 0, input); + + throw nvae; + + } + + switch (alt2) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:45:12: saiDoCorpoMetodo + { + pushFollow(FOLLOW_saiDoCorpoMetodo_in_bottomup183); + saiDoCorpoMetodo(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:46:12: saiDoMetodo + { + pushFollow(FOLLOW_saiDoMetodo_in_bottomup196); + saiDoMetodo(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:47:12: saiDoConstrutor + { + pushFollow(FOLLOW_saiDoConstrutor_in_bottomup209); + saiDoConstrutor(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:48:12: saiDaClasse + { + pushFollow(FOLLOW_saiDaClasse_in_bottomup222); + saiDaClasse(); + + state._fsp--; + if (state.failed) return ; + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "bottomup" + + + + // $ANTLR start "entraNaClasse" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:51:1: entraNaClasse : ^( '.class' nome= ID ( ^( EXTENDS sup= . ) )? . ) ; + public final void entraNaClasse() throws RecognitionException { + BytecodesAST nome=null; + BytecodesAST sup=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:52:5: ( ^( '.class' nome= ID ( ^( EXTENDS sup= . ) )? . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:52:7: ^( '.class' nome= ID ( ^( EXTENDS sup= . ) )? . ) + { + match(input,36,FOLLOW_36_in_entraNaClasse254); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + nome=(BytecodesAST)match(input,ID,FOLLOW_ID_in_entraNaClasse258); if (state.failed) return ; + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:52:26: ( ^( EXTENDS sup= . ) )? + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0==EXTENDS) ) { + int LA3_1 = input.LA(2); + + if ( (LA3_1==DOWN) ) { + int LA3_3 = input.LA(3); + + if ( ((LA3_3 >= ARGS && LA3_3 <= 111)) ) { + int LA3_4 = input.LA(4); + + if ( (LA3_4==DOWN) ) { + alt3=1; + } + else if ( (LA3_4==UP) ) { + int LA3_6 = input.LA(5); + + if ( ((LA3_6 >= ARGS && LA3_6 <= 111)) ) { + alt3=1; + } + } + } + } + } + switch (alt3) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:52:27: ^( EXTENDS sup= . ) + { + match(input,EXTENDS,FOLLOW_EXTENDS_in_entraNaClasse262); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + sup=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + } + break; + + } + + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + System.out.println("linha "+nome.getLine()+ + ": def class "+(nome!=null?nome.getText():null)); + if ( sup!=null ) + sup.escopo = escopoAtual; + SimboloClasse classe = new SimboloClasse("L" + (nome!=null?nome.getText():null),escopoAtual,null); + classe.def = nome; + nome.simbolo = classe; + escopoAtual.definir(classe); + escopoAtual = classe; + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "entraNaClasse" + + + public static class declaracaoVariavel_return extends TreeRuleReturnScope { + }; + + + // $ANTLR start "declaracaoVariavel" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:66:1: declaracaoVariavel : ^( FIELD_DECL (st= . )? ID tipo= . ) ; + public final Def.declaracaoVariavel_return declaracaoVariavel() throws RecognitionException { + Def.declaracaoVariavel_return retval = new Def.declaracaoVariavel_return(); + retval.start = input.LT(1); + + + BytecodesAST ID1=null; + BytecodesAST st=null; + BytecodesAST tipo=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:67:5: ( ^( FIELD_DECL (st= . )? ID tipo= . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:67:7: ^( FIELD_DECL (st= . )? ID tipo= . ) + { + match(input,FIELD_DECL,FOLLOW_FIELD_DECL_in_declaracaoVariavel302); if (state.failed) return retval; + + match(input, Token.DOWN, null); if (state.failed) return retval; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:67:20: (st= . )? + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==ID) ) { + int LA4_1 = input.LA(2); + + if ( (LA4_1==DOWN) ) { + alt4=1; + } + else if ( (LA4_1==ID) ) { + int LA4_3 = input.LA(3); + + if ( ((LA4_3 >= ARGS && LA4_3 <= 111)) ) { + alt4=1; + } + } + } + else if ( ((LA4_0 >= ARGS && LA4_0 <= FIELD_DECL)||(LA4_0 >= INIT && LA4_0 <= 111)) ) { + alt4=1; + } + switch (alt4) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:67:21: st= . + { + st=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return retval; + + } + break; + + } + + + ID1=(BytecodesAST)match(input,ID,FOLLOW_ID_in_declaracaoVariavel312); if (state.failed) return retval; + + tipo=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return retval; + + match(input, Token.UP, null); if (state.failed) return retval; + + + if ( state.backtracking==1 ) { + System.out.println("linha "+ID1.getLine()+": def "+(ID1!=null?ID1.getText():null)); + tipo.escopo = escopoAtual; + boolean estatico = st != null; + SimboloVariavel variavel = new SimboloVariavel((ID1!=null?ID1.getText():null),null,estatico); + variavel.def = ID1; + ID1.simbolo = variavel; + escopoAtual.definir(variavel); + ((SimboloClasse)escopoAtual).getConstantPool().add(variavel); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return retval; + } + // $ANTLR end "declaracaoVariavel" + + + + // $ANTLR start "entraNoConstrutor" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:80:1: entraNoConstrutor : ^( CONSTR_DECL INIT tipoRet= . ^( PARAMS a= . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ; + public final void entraNoConstrutor() throws RecognitionException { + BytecodesAST lim=null; + BytecodesAST INIT2=null; + BytecodesAST tipoRet=null; + BytecodesAST a=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:81:2: ( ^( CONSTR_DECL INIT tipoRet= . ^( PARAMS a= . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:81:4: ^( CONSTR_DECL INIT tipoRet= . ^( PARAMS a= . ) ( ^( LIMIT lim= INTEIRO ) )? . ) + { + match(input,CONSTR_DECL,FOLLOW_CONSTR_DECL_in_entraNoConstrutor347); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + INIT2=(BytecodesAST)match(input,INIT,FOLLOW_INIT_in_entraNoConstrutor349); if (state.failed) return ; + + tipoRet=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input,PARAMS,FOLLOW_PARAMS_in_entraNoConstrutor357); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + a=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:81:49: ( ^( LIMIT lim= INTEIRO ) )? + int alt5=2; + int LA5_0 = input.LA(1); + + if ( (LA5_0==LIMIT) ) { + int LA5_1 = input.LA(2); + + if ( (LA5_1==DOWN) ) { + int LA5_3 = input.LA(3); + + if ( (LA5_3==INTEIRO) ) { + int LA5_4 = input.LA(4); + + if ( (LA5_4==UP) ) { + int LA5_5 = input.LA(5); + + if ( ((LA5_5 >= ARGS && LA5_5 <= 111)) ) { + alt5=1; + } + } + } + } + } + switch (alt5) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:81:50: ^( LIMIT lim= INTEIRO ) + { + match(input,LIMIT,FOLLOW_LIMIT_in_entraNoConstrutor367); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + lim=(BytecodesAST)match(input,INTEIRO,FOLLOW_INTEIRO_in_entraNoConstrutor371); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + } + break; + + } + + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + System.out.println("linha "+INIT2.getLine()+ + ": def method init "); + SimboloMetodo metodo = new SimboloMetodo((INIT2!=null?INIT2.getText():null)+"("+a.getText()+")"+tipoRet.getText(), null, escopoAtual); + if (lim != null) + metodo.setTamanhoMemoriaLocal(new Integer(lim.getText())); + metodo.setRetorno(tipoRet.getText()); + metodo.def = INIT2; + INIT2.simbolo = metodo; + escopoAtual.definir(metodo); + escopoAtual = metodo; + contador = 0; + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "entraNoConstrutor" + + + + // $ANTLR start "entraNoMetodo" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:97:1: entraNoMetodo : ^( METHOD_DECL ID tipoRet= . ^( PARAMS a= . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ; + public final void entraNoMetodo() throws RecognitionException { + BytecodesAST lim=null; + BytecodesAST ID3=null; + BytecodesAST tipoRet=null; + BytecodesAST a=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:98:2: ( ^( METHOD_DECL ID tipoRet= . ^( PARAMS a= . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:98:4: ^( METHOD_DECL ID tipoRet= . ^( PARAMS a= . ) ( ^( LIMIT lim= INTEIRO ) )? . ) + { + match(input,METHOD_DECL,FOLLOW_METHOD_DECL_in_entraNoMetodo393); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + ID3=(BytecodesAST)match(input,ID,FOLLOW_ID_in_entraNoMetodo395); if (state.failed) return ; + + tipoRet=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input,PARAMS,FOLLOW_PARAMS_in_entraNoMetodo403); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + a=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:98:47: ( ^( LIMIT lim= INTEIRO ) )? + int alt6=2; + int LA6_0 = input.LA(1); + + if ( (LA6_0==LIMIT) ) { + int LA6_1 = input.LA(2); + + if ( (LA6_1==DOWN) ) { + int LA6_3 = input.LA(3); + + if ( (LA6_3==INTEIRO) ) { + int LA6_4 = input.LA(4); + + if ( (LA6_4==UP) ) { + int LA6_5 = input.LA(5); + + if ( ((LA6_5 >= ARGS && LA6_5 <= 111)) ) { + alt6=1; + } + } + } + } + } + switch (alt6) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:98:48: ^( LIMIT lim= INTEIRO ) + { + match(input,LIMIT,FOLLOW_LIMIT_in_entraNoMetodo413); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + lim=(BytecodesAST)match(input,INTEIRO,FOLLOW_INTEIRO_in_entraNoMetodo417); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + } + break; + + } + + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + System.out.println("linha "+ID3.getLine()+ + ": def method "+(ID3!=null?ID3.getText():null)); + SimboloMetodo metodo = new SimboloMetodo((ID3!=null?ID3.getText():null)+"("+a.getText()+")"+tipoRet.getText(), null, escopoAtual); + if (lim != null) + metodo.setTamanhoMemoriaLocal(new Integer(lim.getText())); + metodo.setRetorno(tipoRet.getText()); + metodo.def = ID3; + ID3.simbolo = metodo; + escopoAtual.definir(metodo); + escopoAtual = metodo; + contador = 0; + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "entraNoMetodo" + + + + // $ANTLR start "entraNoCorpoMetodo" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:114:1: entraNoCorpoMetodo : BODY ; + public final void entraNoCorpoMetodo() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:115:5: ( BODY ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:115:9: BODY + { + match(input,BODY,FOLLOW_BODY_in_entraNoCorpoMetodo444); if (state.failed) return ; + + if ( state.backtracking==1 ) {escopoAtual = new EscopoLocal(escopoAtual);} + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "entraNoCorpoMetodo" + + + + // $ANTLR start "saiDoCorpoMetodo" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:118:1: saiDoCorpoMetodo : BODY ; + public final void saiDoCorpoMetodo() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:119:5: ( BODY ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:119:9: BODY + { + match(input,BODY,FOLLOW_BODY_in_saiDoCorpoMetodo470); if (state.failed) return ; + + if ( state.backtracking==1 ) { + System.out.println("locals: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "saiDoCorpoMetodo" + + + + // $ANTLR start "saiDaClasse" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:126:1: saiDaClasse : '.class' ; + public final void saiDaClasse() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:126:13: ( '.class' ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:126:15: '.class' + { + match(input,36,FOLLOW_36_in_saiDaClasse497); if (state.failed) return ; + + if ( state.backtracking==1 ) { + System.out.println("Saindo da classe.. membros: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "saiDaClasse" + + + + // $ANTLR start "saiDoMetodo" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:133:1: saiDoMetodo : METHOD_DECL ; + public final void saiDoMetodo() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:134:2: ( METHOD_DECL ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:134:5: METHOD_DECL + { + match(input,METHOD_DECL,FOLLOW_METHOD_DECL_in_saiDoMetodo547); if (state.failed) return ; + + if ( state.backtracking==1 ) { + System.out.println("Saindo do metodo: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "saiDoMetodo" + + + + // $ANTLR start "saiDoConstrutor" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:142:1: saiDoConstrutor : CONSTR_DECL ; + public final void saiDoConstrutor() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:143:2: ( CONSTR_DECL ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:143:5: CONSTR_DECL + { + match(input,CONSTR_DECL,FOLLOW_CONSTR_DECL_in_saiDoConstrutor563); if (state.failed) return ; + + if ( state.backtracking==1 ) { + System.out.println("Saindo do construtor: "+escopoAtual); + escopoAtual = escopoAtual.obterEscopoEnvolvente(); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "saiDoConstrutor" + + + + // $ANTLR start "field" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:1: field : ^( (a= 'getfield' |a= 'getstatic' |a= 'putfield' |a= 'putstatic' ) . . ) ; + public final void field() throws RecognitionException { + BytecodesAST a=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:7: ( ^( (a= 'getfield' |a= 'getstatic' |a= 'putfield' |a= 'putstatic' ) . . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:9: ^( (a= 'getfield' |a= 'getstatic' |a= 'putfield' |a= 'putstatic' ) . . ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:11: (a= 'getfield' |a= 'getstatic' |a= 'putfield' |a= 'putstatic' ) + int alt7=4; + switch ( input.LA(1) ) { + case 57: + { + alt7=1; + } + break; + case 58: + { + alt7=2; + } + break; + case 108: + { + alt7=3; + } + break; + case 109: + { + alt7=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return ;} + NoViableAltException nvae = + new NoViableAltException("", 7, 0, input); + + throw nvae; + + } + + switch (alt7) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:12: a= 'getfield' + { + a=(BytecodesAST)match(input,57,FOLLOW_57_in_field585); if (state.failed) return ; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:29: a= 'getstatic' + { + a=(BytecodesAST)match(input,58,FOLLOW_58_in_field593); if (state.failed) return ; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:47: a= 'putfield' + { + a=(BytecodesAST)match(input,108,FOLLOW_108_in_field601); if (state.failed) return ; + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:151:64: a= 'putstatic' + { + a=(BytecodesAST)match(input,109,FOLLOW_109_in_field609); if (state.failed) return ; + + } + break; + + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + matchAny(input); if (state.failed) return ; + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + if (a.equals("getstatic") || a.equals("putstatic")) + contador += 9; + else + contador += 5; + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "field" + + + + // $ANTLR start "invoke" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:160:1: invoke : ^( ( 'invokespecial' | 'invokestatic' | 'invokevirtual' ) . ^( METHOD_CALL ^( PARAMS . ) . ) ) ; + public final void invoke() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:160:9: ( ^( ( 'invokespecial' | 'invokestatic' | 'invokevirtual' ) . ^( METHOD_CALL ^( PARAMS . ) . ) ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:160:11: ^( ( 'invokespecial' | 'invokestatic' | 'invokevirtual' ) . ^( METHOD_CALL ^( PARAMS . ) . ) ) + { + if ( (input.LA(1) >= 90 && input.LA(1) <= 92) ) { + input.consume(); + state.errorRecovery=false; + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + matchAny(input); if (state.failed) return ; + + match(input,METHOD_CALL,FOLLOW_METHOD_CALL_in_invoke667); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + match(input,PARAMS,FOLLOW_PARAMS_in_invoke670); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + contador += 9; + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "invoke" + + + + // $ANTLR start "nenhumoperando" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:166:1: nenhumoperando : ^( ( RETURN | ARITMETICA | NEW | LOAD | STORE | LOGICA | PILHA ) . ) ; + public final void nenhumoperando() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:167:2: ( ^( ( RETURN | ARITMETICA | NEW | LOAD | STORE | LOGICA | PILHA ) . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:167:4: ^( ( RETURN | ARITMETICA | NEW | LOAD | STORE | LOGICA | PILHA ) . ) + { + if ( input.LA(1)==ARITMETICA||(input.LA(1) >= LOAD && input.LA(1) <= LOGICA)||input.LA(1)==NEW||input.LA(1)==PILHA||(input.LA(1) >= RETURN && input.LA(1) <= STORE) ) { + input.consume(); + state.errorRecovery=false; + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + contador++; + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "nenhumoperando" + + + + // $ANTLR start "umoperando" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:173:1: umoperando : ^( ( DESVIO | LOAD | STORE ) . . ) ; + public final void umoperando() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:174:9: ( ^( ( DESVIO | LOAD | STORE ) . . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:174:11: ^( ( DESVIO | LOAD | STORE ) . . ) + { + if ( input.LA(1)==DESVIO||input.LA(1)==LOAD||input.LA(1)==STORE ) { + input.consume(); + state.errorRecovery=false; + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + matchAny(input); if (state.failed) return ; + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + contador += 5; + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "umoperando" + + + + // $ANTLR start "label" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:179:1: label : ^( LABEL id= . ) ; + public final void label() throws RecognitionException, LabelException { + BytecodesAST id=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:180:4: ( ^( LABEL id= . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Def.g:180:6: ^( LABEL id= . ) + { + match(input,LABEL,FOLLOW_LABEL_in_label821); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + id=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + System.out.println("Definindo label "+id.getText()+" no endereço "+contador); + SimboloMetodo metodo = (SimboloMetodo) escopoAtual.obterEscopoEnvolvente(); + metodo.definirLabel(id.token, contador); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "label" + + // Delegated rules + + + protected DFA1 dfa1 = new DFA1(this); + static final String DFA1_eotS = + "\21\uffff"; + static final String DFA1_eofS = + "\21\uffff"; + static final String DFA1_minS = + "\1\5\7\uffff\1\2\3\uffff\1\4\1\2\1\4\2\3"; + static final String DFA1_maxS = + "\1\155\7\uffff\1\2\3\uffff\5\157"; + static final String DFA1_acceptS = + "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\uffff\1\10\1\11\1\12\5\uffff"; + static final String DFA1_specialS = + "\21\uffff}>"; + static final String[] DFA1_transitionS = { + "\1\11\1\1\1\2\1\12\1\uffff\1\5\4\uffff\1\13\1\uffff\1\10\1\11"+ + "\2\uffff\1\3\1\11\3\uffff\1\11\1\uffff\1\11\1\10\6\uffff\1\4"+ + "\24\uffff\2\6\37\uffff\3\7\17\uffff\2\6", + "", + "", + "", + "", + "", + "", + "", + "\1\14", + "", + "", + "", + "\154\15", + "\1\16\1\11\154\12", + "\154\17", + "\1\20\154\17", + "\1\11\154\12" + }; + + static final short[] DFA1_eot = DFA.unpackEncodedString(DFA1_eotS); + static final short[] DFA1_eof = DFA.unpackEncodedString(DFA1_eofS); + static final char[] DFA1_min = DFA.unpackEncodedStringToUnsignedChars(DFA1_minS); + static final char[] DFA1_max = DFA.unpackEncodedStringToUnsignedChars(DFA1_maxS); + static final short[] DFA1_accept = DFA.unpackEncodedString(DFA1_acceptS); + static final short[] DFA1_special = DFA.unpackEncodedString(DFA1_specialS); + static final short[][] DFA1_transition; + + static { + int numStates = DFA1_transitionS.length; + DFA1_transition = new short[numStates][]; + for (int i=0; i", "", "", "", "ARGS", "ARITMETICA", "BODY", "CONSTR_DECL", "DESVIO", "EXTENDS", "FIELD_DECL", "ID", "INIT", "INT", "INTEIRO", "LABEL", "LIMIT", "LOAD", "LOGICA", "MEMBRO_CLASSE", "METHOD_CALL", "METHOD_DECL", "NEW", "NEWLINE", "NULL", "PARAMS", "PILHA", "REF", "RETURN", "STORE", "TIPO_REF", "VOID", "WS", "'('", "'()'", "')'", "'.class'", "'.end class'", "'.end method'", "'.field'", "'.limit locals'", "'.method'", "'.super'", "':'", "'aconst_null'", "'aload'", "'aload_0'", "'aload_1'", "'aload_2'", "'aload_3'", "'areturn'", "'astore'", "'astore_0'", "'astore_1'", "'astore_2'", "'astore_3'", "'dup'", "'getfield'", "'getstatic'", "'goto'", "'iadd'", "'iand'", "'iconst_0'", "'iconst_1'", "'iconst_2'", "'iconst_3'", "'iconst_4'", "'iconst_5'", "'iconst_m1'", "'idiv'", "'if_icmpeq'", "'if_icmpge'", "'if_icmpgt'", "'if_icmple'", "'if_icmplt'", "'if_icmpne'", "'ifeq'", "'ifge'", "'ifgt'", "'ifle'", "'iflt'", "'ifne'", "'iinc'", "'iload'", "'iload_0'", "'iload_1'", "'iload_2'", "'iload_3'", "'imul'", "'ineg'", "'invokespecial'", "'invokestatic'", "'invokevirtual'", "'ior'", "'irem'", "'ireturn'", "'istore'", "'istore_0'", "'istore_1'", "'istore_2'", "'istore_3'", "'isub'", "'ixor'", "'ldc'", "'new'", "'nop'", "'pop'", "'pop2'", "'putfield'", "'putstatic'", "'return'", "'static'" + }; + + public static final int EOF=-1; + public static final int T__33=33; + public static final int T__34=34; + public static final int T__35=35; + public static final int T__36=36; + public static final int T__37=37; + public static final int T__38=38; + public static final int T__39=39; + public static final int T__40=40; + public static final int T__41=41; + public static final int T__42=42; + public static final int T__43=43; + public static final int T__44=44; + public static final int T__45=45; + public static final int T__46=46; + public static final int T__47=47; + public static final int T__48=48; + public static final int T__49=49; + public static final int T__50=50; + public static final int T__51=51; + public static final int T__52=52; + public static final int T__53=53; + public static final int T__54=54; + public static final int T__55=55; + public static final int T__56=56; + public static final int T__57=57; + public static final int T__58=58; + public static final int T__59=59; + public static final int T__60=60; + public static final int T__61=61; + public static final int T__62=62; + public static final int T__63=63; + public static final int T__64=64; + public static final int T__65=65; + public static final int T__66=66; + public static final int T__67=67; + public static final int T__68=68; + public static final int T__69=69; + public static final int T__70=70; + public static final int T__71=71; + public static final int T__72=72; + public static final int T__73=73; + public static final int T__74=74; + public static final int T__75=75; + public static final int T__76=76; + public static final int T__77=77; + public static final int T__78=78; + public static final int T__79=79; + public static final int T__80=80; + public static final int T__81=81; + public static final int T__82=82; + public static final int T__83=83; + public static final int T__84=84; + public static final int T__85=85; + public static final int T__86=86; + public static final int T__87=87; + public static final int T__88=88; + public static final int T__89=89; + public static final int T__90=90; + public static final int T__91=91; + public static final int T__92=92; + public static final int T__93=93; + public static final int T__94=94; + public static final int T__95=95; + public static final int T__96=96; + public static final int T__97=97; + public static final int T__98=98; + public static final int T__99=99; + public static final int T__100=100; + public static final int T__101=101; + public static final int T__102=102; + public static final int T__103=103; + public static final int T__104=104; + public static final int T__105=105; + public static final int T__106=106; + public static final int T__107=107; + public static final int T__108=108; + public static final int T__109=109; + public static final int T__110=110; + public static final int T__111=111; + public static final int ARGS=4; + public static final int ARITMETICA=5; + public static final int BODY=6; + public static final int CONSTR_DECL=7; + public static final int DESVIO=8; + public static final int EXTENDS=9; + public static final int FIELD_DECL=10; + public static final int ID=11; + public static final int INIT=12; + public static final int INT=13; + public static final int INTEIRO=14; + public static final int LABEL=15; + public static final int LIMIT=16; + public static final int LOAD=17; + public static final int LOGICA=18; + public static final int MEMBRO_CLASSE=19; + public static final int METHOD_CALL=20; + public static final int METHOD_DECL=21; + public static final int NEW=22; + public static final int NEWLINE=23; + public static final int NULL=24; + public static final int PARAMS=25; + public static final int PILHA=26; + public static final int REF=27; + public static final int RETURN=28; + public static final int STORE=29; + public static final int TIPO_REF=30; + public static final int VOID=31; + public static final int WS=32; + + // delegates + public TreeFilter[] getDelegates() { + return new TreeFilter[] {}; + } + + // delegators + + + public Ref(TreeNodeStream input) { + this(input, new RecognizerSharedState()); + } + public Ref(TreeNodeStream input, RecognizerSharedState state) { + super(input, state); + } + + public String[] getTokenNames() { return Ref.tokenNames; } + public String getGrammarFileName() { return "C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g"; } + + + + TabelaSimbolos tabelaSimbolos; + SimboloClasse simboloClasse; + BytecodeAssembler assembler; + Escopo escopoAtual; + public Ref(TreeNodeStream input, TabelaSimbolos tabelaSimbolos, + BytecodeAssembler assembler) { + this(input); + this.tabelaSimbolos = tabelaSimbolos; + this.assembler = assembler; + } + + private Tipo resolverTipo(String nomeTipo) { + + return (Tipo)simboloClasse.resolver(nomeTipo); + + } + + private void acessarCampo(String operacao, String nomeClasse, String nomeCampo) { + + assembler.escreverOpcode(operacao); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver(nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + SimboloVariavel simboloVariavel = + (SimboloVariavel) simboloClasse.resolver(nomeCampo); + + if (!simboloClasse.getConstantPool().contains(simboloVariavel)) + + simboloClasse.getConstantPool().add(simboloVariavel); + + if (operacao.equals("getstatic") || operacao.equals("putstatic")) + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + assembler.getConstantPool().indexOf(simboloClasse)); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + simboloClasse.obterIdentificadorVariavel(simboloVariavel)); + + } + + private void chamarMetodo(String instrucao, String nomeClasse, String nomeMetodo, String args, String tipoRetorno) { + + assembler.escreverOpcode(instrucao); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver(nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + SimboloMetodo simboloMetodo = + (SimboloMetodo) simboloClasse.resolver(nomeMetodo+"("+args+")"+tipoRetorno); + + if (!simboloClasse.getMethodArea().contains(simboloMetodo)) + + simboloClasse.getMethodArea().add(simboloMetodo); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + assembler.getConstantPool().indexOf(simboloClasse)); + + BytecodeAssembler.escreverInteiro( + BytecodeAssembler.codigo, BytecodeAssembler.ip, + simboloClasse.getMethodArea().indexOf(simboloMetodo)); + + } + + private void newClass(String nomeClasse) { + + assembler.escreverOpcode("new"); + + SimboloClasse simboloClasse = + (SimboloClasse)tabelaSimbolos.global.resolver( nomeClasse); + + if(!assembler.getConstantPool().contains(simboloClasse)) + + assembler.getConstantPool().add(simboloClasse); + + BytecodeAssembler.escreverInteiro(BytecodeAssembler.codigo, + BytecodeAssembler.ip, assembler.getConstantPool().indexOf(simboloClasse)); + + } + + + + + // $ANTLR start "topdown" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:118:1: topdown : ( entraNaClasse | entraNoMetodo | entraNoConstrutor | declaracaoVariavel | field | invoke | novaClasse | nenhumoperando | umoperando ); + public final void topdown() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:119:5: ( entraNaClasse | entraNoMetodo | entraNoConstrutor | declaracaoVariavel | field | invoke | novaClasse | nenhumoperando | umoperando ) + int alt1=9; + alt1 = dfa1.predict(input); + switch (alt1) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:119:9: entraNaClasse + { + pushFollow(FOLLOW_entraNaClasse_in_topdown61); + entraNaClasse(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:120:9: entraNoMetodo + { + pushFollow(FOLLOW_entraNoMetodo_in_topdown71); + entraNoMetodo(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:121:9: entraNoConstrutor + { + pushFollow(FOLLOW_entraNoConstrutor_in_topdown81); + entraNoConstrutor(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:122:9: declaracaoVariavel + { + pushFollow(FOLLOW_declaracaoVariavel_in_topdown91); + declaracaoVariavel(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 5 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:123:9: field + { + pushFollow(FOLLOW_field_in_topdown101); + field(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 6 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:124:9: invoke + { + pushFollow(FOLLOW_invoke_in_topdown111); + invoke(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 7 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:125:9: novaClasse + { + pushFollow(FOLLOW_novaClasse_in_topdown121); + novaClasse(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 8 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:126:9: nenhumoperando + { + pushFollow(FOLLOW_nenhumoperando_in_topdown131); + nenhumoperando(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 9 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:127:9: umoperando + { + pushFollow(FOLLOW_umoperando_in_topdown141); + umoperando(); + + state._fsp--; + if (state.failed) return ; + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } catch (LabelException e) { + System.out.println(e.getMessage()); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "topdown" + + + + // $ANTLR start "bottomup" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:130:1: bottomup : ( saiDoMetodo | saiDoConstrutor ); + public final void bottomup() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:131:3: ( saiDoMetodo | saiDoConstrutor ) + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0==METHOD_DECL) ) { + alt2=1; + } + else if ( (LA2_0==CONSTR_DECL) ) { + alt2=2; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + NoViableAltException nvae = + new NoViableAltException("", 2, 0, input); + + throw nvae; + + } + switch (alt2) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:131:7: saiDoMetodo + { + pushFollow(FOLLOW_saiDoMetodo_in_bottomup162); + saiDoMetodo(); + + state._fsp--; + if (state.failed) return ; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:132:7: saiDoConstrutor + { + pushFollow(FOLLOW_saiDoConstrutor_in_bottomup170); + saiDoConstrutor(); + + state._fsp--; + if (state.failed) return ; + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "bottomup" + + + + // $ANTLR start "entraNaClasse" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:136:1: entraNaClasse : ^( '.class' nome= ID ( ^( EXTENDS sup= . ) )? . ) ; + public final void entraNaClasse() throws RecognitionException { + BytecodesAST nome=null; + BytecodesAST sup=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:137:5: ( ^( '.class' nome= ID ( ^( EXTENDS sup= . ) )? . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:137:7: ^( '.class' nome= ID ( ^( EXTENDS sup= . ) )? . ) + { + match(input,36,FOLLOW_36_in_entraNaClasse193); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + nome=(BytecodesAST)match(input,ID,FOLLOW_ID_in_entraNaClasse197); if (state.failed) return ; + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:137:26: ( ^( EXTENDS sup= . ) )? + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0==EXTENDS) ) { + int LA3_1 = input.LA(2); + + if ( (LA3_1==DOWN) ) { + int LA3_3 = input.LA(3); + + if ( ((LA3_3 >= ARGS && LA3_3 <= 111)) ) { + int LA3_4 = input.LA(4); + + if ( (LA3_4==DOWN) ) { + alt3=1; + } + else if ( (LA3_4==UP) ) { + int LA3_6 = input.LA(5); + + if ( ((LA3_6 >= ARGS && LA3_6 <= 111)) ) { + alt3=1; + } + } + } + } + } + switch (alt3) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:137:27: ^( EXTENDS sup= . ) + { + match(input,EXTENDS,FOLLOW_EXTENDS_in_entraNaClasse201); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + sup=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + } + break; + + } + + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + + simboloClasse =(SimboloClasse)tabelaSimbolos.global.resolver("L" + nome.getText()); + if(!assembler.getConstantPool().contains(simboloClasse)) + assembler.getConstantPool().add(simboloClasse); + if ( sup!=null ) { + sup.simbolo = sup.escopo.resolver("L"+sup.getText()); + simboloClasse.superClasse = + (SimboloClasse)sup.simbolo; + System.out.println("linha "+nome.getLine()+": set "+(nome!=null?nome.getText():null)+ + " super to "+((SimboloClasse)nome.simbolo).superClasse.nome); + } + else { + System.out.println("linha "+nome.getLine()+": set "+(nome!=null?nome.getText():null)); + } + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "entraNaClasse" + + + + // $ANTLR start "declaracaoVariavel" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:156:1: declaracaoVariavel : ^( FIELD_DECL ( . )? ID tip= . ) ; + public final void declaracaoVariavel() throws RecognitionException { + BytecodesAST ID1=null; + BytecodesAST tip=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:157:5: ( ^( FIELD_DECL ( . )? ID tip= . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:157:7: ^( FIELD_DECL ( . )? ID tip= . ) + { + match(input,FIELD_DECL,FOLLOW_FIELD_DECL_in_declaracaoVariavel245); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:157:20: ( . )? + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==ID) ) { + int LA4_1 = input.LA(2); + + if ( (LA4_1==DOWN) ) { + alt4=1; + } + else if ( (LA4_1==ID) ) { + int LA4_3 = input.LA(3); + + if ( ((LA4_3 >= ARGS && LA4_3 <= 111)) ) { + alt4=1; + } + } + } + else if ( ((LA4_0 >= ARGS && LA4_0 <= FIELD_DECL)||(LA4_0 >= INIT && LA4_0 <= 111)) ) { + alt4=1; + } + switch (alt4) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:157:20: . + { + matchAny(input); if (state.failed) return ; + + } + break; + + } + + + ID1=(BytecodesAST)match(input,ID,FOLLOW_ID_in_declaracaoVariavel250); if (state.failed) return ; + + tip=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + if (tip.getText().startsWith("L")) + ID1.simbolo.tipo = resolverTipo(tip.getText().substring(0, tip.getText().length() - 1)); + else + ID1.simbolo.tipo = resolverTipo(tip.getText()); + System.out.println("linha "+ID1.getLine()+": set var type "+ID1.simbolo); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "declaracaoVariavel" + + + + // $ANTLR start "entraNoConstrutor" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:167:1: entraNoConstrutor : ^( CONSTR_DECL INIT . ^( PARAMS . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ; + public final void entraNoConstrutor() throws RecognitionException { + BytecodesAST lim=null; + BytecodesAST INIT2=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:168:2: ( ^( CONSTR_DECL INIT . ^( PARAMS . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:168:4: ^( CONSTR_DECL INIT . ^( PARAMS . ) ( ^( LIMIT lim= INTEIRO ) )? . ) + { + match(input,CONSTR_DECL,FOLLOW_CONSTR_DECL_in_entraNoConstrutor285); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + INIT2=(BytecodesAST)match(input,INIT,FOLLOW_INIT_in_entraNoConstrutor287); if (state.failed) return ; + + matchAny(input); if (state.failed) return ; + + match(input,PARAMS,FOLLOW_PARAMS_in_entraNoConstrutor292); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:168:37: ( ^( LIMIT lim= INTEIRO ) )? + int alt5=2; + int LA5_0 = input.LA(1); + + if ( (LA5_0==LIMIT) ) { + int LA5_1 = input.LA(2); + + if ( (LA5_1==DOWN) ) { + int LA5_3 = input.LA(3); + + if ( (LA5_3==INTEIRO) ) { + int LA5_4 = input.LA(4); + + if ( (LA5_4==UP) ) { + int LA5_5 = input.LA(5); + + if ( ((LA5_5 >= ARGS && LA5_5 <= 111)) ) { + alt5=1; + } + } + } + } + } + switch (alt5) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:168:38: ^( LIMIT lim= INTEIRO ) + { + match(input,LIMIT,FOLLOW_LIMIT_in_entraNoConstrutor299); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + lim=(BytecodesAST)match(input,INTEIRO,FOLLOW_INTEIRO_in_entraNoConstrutor303); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + } + break; + + } + + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + System.out.println("Ref: Entrou no construtor "+(INIT2!=null?INIT2.getText():null)); + escopoAtual = (SimboloMetodo)INIT2.simbolo; + BytecodeAssembler.codigo = new byte[BytecodeAssembler.TAMANHO_INICIAL_MEMORIA_CODIGO]; + BytecodeAssembler.ip = 0; + assembler.setMetodoAtual((SimboloMetodo)escopoAtual); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "entraNoConstrutor" + + + + // $ANTLR start "entraNoMetodo" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:178:1: entraNoMetodo : ^( METHOD_DECL ID . ^( PARAMS . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ; + public final void entraNoMetodo() throws RecognitionException { + BytecodesAST lim=null; + BytecodesAST ID3=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:179:2: ( ^( METHOD_DECL ID . ^( PARAMS . ) ( ^( LIMIT lim= INTEIRO ) )? . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:179:4: ^( METHOD_DECL ID . ^( PARAMS . ) ( ^( LIMIT lim= INTEIRO ) )? . ) + { + match(input,METHOD_DECL,FOLLOW_METHOD_DECL_in_entraNoMetodo328); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + ID3=(BytecodesAST)match(input,ID,FOLLOW_ID_in_entraNoMetodo330); if (state.failed) return ; + + matchAny(input); if (state.failed) return ; + + match(input,PARAMS,FOLLOW_PARAMS_in_entraNoMetodo335); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:179:35: ( ^( LIMIT lim= INTEIRO ) )? + int alt6=2; + int LA6_0 = input.LA(1); + + if ( (LA6_0==LIMIT) ) { + int LA6_1 = input.LA(2); + + if ( (LA6_1==DOWN) ) { + int LA6_3 = input.LA(3); + + if ( (LA6_3==INTEIRO) ) { + int LA6_4 = input.LA(4); + + if ( (LA6_4==UP) ) { + int LA6_5 = input.LA(5); + + if ( ((LA6_5 >= ARGS && LA6_5 <= 111)) ) { + alt6=1; + } + } + } + } + } + switch (alt6) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:179:36: ^( LIMIT lim= INTEIRO ) + { + match(input,LIMIT,FOLLOW_LIMIT_in_entraNoMetodo342); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + lim=(BytecodesAST)match(input,INTEIRO,FOLLOW_INTEIRO_in_entraNoMetodo346); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + } + break; + + } + + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + System.out.println("Ref: Entrou no metodo "+(ID3!=null?ID3.getText():null)); + escopoAtual = (SimboloMetodo)ID3.simbolo; + BytecodeAssembler.codigo = new byte[BytecodeAssembler.TAMANHO_INICIAL_MEMORIA_CODIGO]; + BytecodeAssembler.ip = 0; + assembler.setMetodoAtual((SimboloMetodo)escopoAtual); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "entraNoMetodo" + + + + // $ANTLR start "saiDoMetodo" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:189:1: saiDoMetodo : METHOD_DECL ; + public final void saiDoMetodo() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:190:2: ( METHOD_DECL ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:190:5: METHOD_DECL + { + match(input,METHOD_DECL,FOLLOW_METHOD_DECL_in_saiDoMetodo368); if (state.failed) return ; + + if ( state.backtracking==1 ) { + System.out.println("Ref: Saindo do metodo... "); + ((SimboloMetodo)escopoAtual).setCodigo(assembler.obterCodigoMaquina()); + ((SimboloMetodo)escopoAtual).setTamanhoMemoriaLocal(assembler.obterTamanhoMemoriaCodigo()); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "saiDoMetodo" + + + + // $ANTLR start "saiDoConstrutor" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:198:1: saiDoConstrutor : CONSTR_DECL ; + public final void saiDoConstrutor() throws RecognitionException { + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:199:2: ( CONSTR_DECL ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:199:5: CONSTR_DECL + { + match(input,CONSTR_DECL,FOLLOW_CONSTR_DECL_in_saiDoConstrutor384); if (state.failed) return ; + + if ( state.backtracking==1 ) { + System.out.println("Ref: Saindo do construtor... "); + ((SimboloMetodo)escopoAtual).setCodigo(assembler.obterCodigoMaquina()); + ((SimboloMetodo)escopoAtual).setTamanhoMemoriaLocal(assembler.obterTamanhoMemoriaCodigo()); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "saiDoConstrutor" + + + + // $ANTLR start "field" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:1: field : ^( (op= 'getfield' |op= 'getstatic' |op= 'putfield' |op= 'putstatic' ) ref= . tipo= . ) ; + public final void field() throws RecognitionException { + BytecodesAST op=null; + BytecodesAST ref=null; + BytecodesAST tipo=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:8: ( ^( (op= 'getfield' |op= 'getstatic' |op= 'putfield' |op= 'putstatic' ) ref= . tipo= . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:10: ^( (op= 'getfield' |op= 'getstatic' |op= 'putfield' |op= 'putstatic' ) ref= . tipo= . ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:12: (op= 'getfield' |op= 'getstatic' |op= 'putfield' |op= 'putstatic' ) + int alt7=4; + switch ( input.LA(1) ) { + case 57: + { + alt7=1; + } + break; + case 58: + { + alt7=2; + } + break; + case 108: + { + alt7=3; + } + break; + case 109: + { + alt7=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return ;} + NoViableAltException nvae = + new NoViableAltException("", 7, 0, input); + + throw nvae; + + } + + switch (alt7) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:13: op= 'getfield' + { + op=(BytecodesAST)match(input,57,FOLLOW_57_in_field405); if (state.failed) return ; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:31: op= 'getstatic' + { + op=(BytecodesAST)match(input,58,FOLLOW_58_in_field413); if (state.failed) return ; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:50: op= 'putfield' + { + op=(BytecodesAST)match(input,108,FOLLOW_108_in_field421); if (state.failed) return ; + + } + break; + case 4 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:207:68: op= 'putstatic' + { + op=(BytecodesAST)match(input,109,FOLLOW_109_in_field429); if (state.failed) return ; + + } + break; + + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + ref=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + tipo=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + String[] tokens = ref.getText().split("/"); + String campo = tokens[tokens.length - 1]; + String classe = "L"; + + int i; + + for (i = 0; i < tokens.length - 1; i++){ + if (i == tokens.length - 2) + classe += tokens[i]; + else + classe += tokens[i]+"/"; + } + + acessarCampo(op.getText(), classe, campo); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "field" + + + + // $ANTLR start "invoke" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:226:1: invoke : ^( (op= 'invokespecial' |op= 'invokestatic' |op= 'invokevirtual' ) ref= . ^( METHOD_CALL ^( PARAMS a= . ) tipoRet= . ) ) ; + public final void invoke() throws RecognitionException { + BytecodesAST op=null; + BytecodesAST ref=null; + BytecodesAST a=null; + BytecodesAST tipoRet=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:226:9: ( ^( (op= 'invokespecial' |op= 'invokestatic' |op= 'invokevirtual' ) ref= . ^( METHOD_CALL ^( PARAMS a= . ) tipoRet= . ) ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:226:12: ^( (op= 'invokespecial' |op= 'invokestatic' |op= 'invokevirtual' ) ref= . ^( METHOD_CALL ^( PARAMS a= . ) tipoRet= . ) ) + { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:226:14: (op= 'invokespecial' |op= 'invokestatic' |op= 'invokevirtual' ) + int alt8=3; + switch ( input.LA(1) ) { + case 90: + { + alt8=1; + } + break; + case 91: + { + alt8=2; + } + break; + case 92: + { + alt8=3; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return ;} + NoViableAltException nvae = + new NoViableAltException("", 8, 0, input); + + throw nvae; + + } + + switch (alt8) { + case 1 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:226:15: op= 'invokespecial' + { + op=(BytecodesAST)match(input,90,FOLLOW_90_in_invoke486); if (state.failed) return ; + + } + break; + case 2 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:226:38: op= 'invokestatic' + { + op=(BytecodesAST)match(input,91,FOLLOW_91_in_invoke494); if (state.failed) return ; + + } + break; + case 3 : + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:226:60: op= 'invokevirtual' + { + op=(BytecodesAST)match(input,92,FOLLOW_92_in_invoke502); if (state.failed) return ; + + } + break; + + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + ref=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input,METHOD_CALL,FOLLOW_METHOD_CALL_in_invoke512); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + match(input,PARAMS,FOLLOW_PARAMS_in_invoke515); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + a=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + tipoRet=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + + String[] tokens = ref.getText().split("/"); + String nomeMetodo = tokens[tokens.length - 1]; + String classe = "L"; + + int i; + + for (i = 0; i < tokens.length - 1; i++){ + if (i == tokens.length - 2) + classe += tokens[i]; + else + classe += tokens[i]+"/"; + } + + System.out.println("chamando metodo "+nomeMetodo+"("+a.getText()+")"+tipoRet.getText()); + chamarMetodo(op.getText(), classe, nomeMetodo, a.getText(), tipoRet.getText()); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "invoke" + + + + // $ANTLR start "novaClasse" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:247:1: novaClasse : ^( NEW classe= . ) ; + public final void novaClasse() throws RecognitionException { + BytecodesAST classe=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:248:3: ( ^( NEW classe= . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:248:5: ^( NEW classe= . ) + { + match(input,NEW,FOLLOW_NEW_in_novaClasse564); if (state.failed) return ; + + match(input, Token.DOWN, null); if (state.failed) return ; + classe=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + newClass("L"+classe.getText()); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "novaClasse" + + + + // $ANTLR start "nenhumoperando" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:254:1: nenhumoperando : ^( ( RETURN | ARITMETICA | LOAD | STORE | LOGICA | PILHA ) operacao= . ) ; + public final void nenhumoperando() throws RecognitionException { + BytecodesAST operacao=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:255:2: ( ^( ( RETURN | ARITMETICA | LOAD | STORE | LOGICA | PILHA ) operacao= . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:255:4: ^( ( RETURN | ARITMETICA | LOAD | STORE | LOGICA | PILHA ) operacao= . ) + { + if ( input.LA(1)==ARITMETICA||(input.LA(1) >= LOAD && input.LA(1) <= LOGICA)||input.LA(1)==PILHA||(input.LA(1) >= RETURN && input.LA(1) <= STORE) ) { + input.consume(); + state.errorRecovery=false; + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + operacao=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + assembler.escreverOpcode(operacao.getText()); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "nenhumoperando" + + + + // $ANTLR start "umoperando" + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:261:1: umoperando : ^( ( DESVIO | LOAD | STORE ) operacao= . operando= . ) ; + public final void umoperando() throws RecognitionException, LabelException { + BytecodesAST operacao=null; + BytecodesAST operando=null; + + try { + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:262:9: ( ^( ( DESVIO | LOAD | STORE ) operacao= . operando= . ) ) + // C:\\Users\\Tiago\\Git\\IGED\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Ref.g:262:11: ^( ( DESVIO | LOAD | STORE ) operacao= . operando= . ) + { + if ( input.LA(1)==DESVIO||input.LA(1)==LOAD||input.LA(1)==STORE ) { + input.consume(); + state.errorRecovery=false; + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + match(input, Token.DOWN, null); if (state.failed) return ; + operacao=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + operando=(BytecodesAST)input.LT(1); + + matchAny(input); if (state.failed) return ; + + match(input, Token.UP, null); if (state.failed) return ; + + + if ( state.backtracking==1 ) { + assembler.escreverOpcode(operacao.token, operando.token); + } + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "umoperando" + + // Delegated rules + + + protected DFA1 dfa1 = new DFA1(this); + static final String DFA1_eotS = + "\20\uffff"; + static final String DFA1_eofS = + "\20\uffff"; + static final String DFA1_minS = + "\1\5\7\uffff\1\2\2\uffff\1\4\1\2\1\4\2\3"; + static final String DFA1_maxS = + "\1\155\7\uffff\1\2\2\uffff\5\157"; + static final String DFA1_acceptS = + "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\uffff\1\10\1\11\5\uffff"; + static final String DFA1_specialS = + "\20\uffff}>"; + static final String[] DFA1_transitionS = { + "\1\11\1\uffff\1\3\1\12\1\uffff\1\4\6\uffff\1\10\1\11\2\uffff"+ + "\1\2\1\7\3\uffff\1\11\1\uffff\1\11\1\10\6\uffff\1\1\24\uffff"+ + "\2\5\37\uffff\3\6\17\uffff\2\5", + "", + "", + "", + "", + "", + "", + "", + "\1\13", + "", + "", + "\154\14", + "\1\15\1\11\154\12", + "\154\16", + "\1\17\154\16", + "\1\11\154\12" + }; + + static final short[] DFA1_eot = DFA.unpackEncodedString(DFA1_eotS); + static final short[] DFA1_eof = DFA.unpackEncodedString(DFA1_eofS); + static final char[] DFA1_min = DFA.unpackEncodedStringToUnsignedChars(DFA1_minS); + static final char[] DFA1_max = DFA.unpackEncodedStringToUnsignedChars(DFA1_maxS); + static final short[] DFA1_accept = DFA.unpackEncodedString(DFA1_acceptS); + static final short[] DFA1_special = DFA.unpackEncodedString(DFA1_specialS); + static final short[][] DFA1_transition; + + static { + int numStates = DFA1_transitionS.length; + DFA1_transition = new short[numStates][]; + for (int i=0; i classes = Interpretador.getVm().getAreaClasses(); + + for(SimboloClasse classe: classes){ + + if (classe.nome.equals(nome)){ + classe.alocarMemoriaVariaveis(null, true); + return classe; + } + + + } + + throw new ClassNotFoundException("A classe "+nome+" não foi encontrada"); + + } + + public static SimboloClasse carregarClasse(int index) throws ClassNotFoundException { + + SimboloClasse classe = Interpretador.getVm().getAreaClasses().get(index); + + if (classe != null){ + classe.alocarMemoriaVariaveis(null, true); + return classe; + } + + throw new ClassNotFoundException("A classe referenciada não pôde ser encontrada"); + + } + + public static SimboloClasse carregarClasseMain() throws ClassNotFoundException{ + + List classes = Interpretador.getVm().getAreaClasses(); + + for(SimboloClasse classe: classes){ + + if (classe.possuiMetodo(METODO_MAIN)){ + classe.alocarMemoriaVariaveis(null, true); + return classe; + } + + } + + throw new ClassNotFoundException("Não foi encontrada nenhuma classe que possua um método main"); + + } + +} diff --git a/src/br/ufpb/iged/interpretador/principal/Interpretador.java b/src/br/ufpb/iged/interpretador/principal/Interpretador.java old mode 100644 new mode 100755 index fbaff25..30333a1 --- a/src/br/ufpb/iged/interpretador/principal/Interpretador.java +++ b/src/br/ufpb/iged/interpretador/principal/Interpretador.java @@ -1,786 +1,214 @@ -package br.ufpb.iged.interpretador.principal; - -import java.io.FileInputStream; -import java.io.InputStream; -import java.util.Scanner; - -import org.antlr.runtime.ANTLRInputStream; -import org.antlr.runtime.CommonTokenStream; - -import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; -import br.ufpb.iged.interpretador.bytecodeassembler.asm.Definicao; -import br.ufpb.iged.interpretador.bytecodeassembler.parser.AssemblerLexer; - -public class Interpretador { - - public static final String NOME_ARQUIVO_ENTRADA = "entrada.txt"; - - public static final int TAMANHO_INICIAL_PILHA_OPERANDOS = 100; - - int ip = 0; - - byte[] codigo; - - int tamanhoCodigo; - - Object[] memoriaGlobal; - - Object[] pilhaOperandos = new Object[TAMANHO_INICIAL_PILHA_OPERANDOS]; - - int sp = -1; - - public static void main(String[] args) throws Exception { - - InputStream entrada = new FileInputStream(NOME_ARQUIVO_ENTRADA); - - Interpretador interpretador = new Interpretador(); - if (carregar(interpretador, entrada)) - interpretador.cpu(); - - } - - public static boolean carregar(Interpretador interp, InputStream input) - throws Exception { - - try { - AssemblerLexer assemblerLexer = new AssemblerLexer( - new ANTLRInputStream(input)); - CommonTokenStream tokens = new CommonTokenStream(assemblerLexer); - BytecodeAssembler assembler = new BytecodeAssembler(tokens, - Definicao.instrucoes); - assembler.programa(); - if (assembler.getNumberOfSyntaxErrors() > 0) - return false; - interp.codigo = assembler.obterCodigoMaquina(); - interp.tamanhoCodigo = assembler.obterTamanhoMemoriaCodigo(); - interp.memoriaGlobal = new Object[assembler.getTamMemoriaGlobal()]; - - } finally { - input.close(); - } - return true; - - } - - protected void cpu() { - - int op1, op2; - - short opcode; - - boolean desvio; - - while (ip < tamanhoCodigo) { - - desvio = false; - - opcode = codigo[ip]; - - if (opcode < 0) - - opcode = recuperarValorOpcode(opcode); - - switch (opcode) { - - // nenhuma operação - - case Definicao.NOP: - ; - break; - - case Definicao.POP: - sp-- ; - break; - - case Definicao.POP2: - sp -= 2 ; - break; - - // operações aritméticas - - case Definicao.INEG: { - - op1 = (Integer) pilhaOperandos[sp]; - - pilhaOperandos[sp] = 0 - op1; - - }; - break; - - case Definicao.IADD: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - pilhaOperandos[sp] = op1 + op2; - - } - ; - break; - - case Definicao.ISUB: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - pilhaOperandos[sp] = op1 - op2; - - } - ; - break; - - case Definicao.IMUL: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - pilhaOperandos[sp] = op1 * op2; - - } - ; - break; - - case Definicao.IDIV: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - pilhaOperandos[sp] = op1 / op2; - - } - ; - break; - - case Definicao.IREM: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - pilhaOperandos[sp] = op1 % op2; - - } - ; - break; - - case Definicao.IINC: { - - op1 = (Integer) pilhaOperandos[sp]; - - pilhaOperandos[sp] = ++op1; - - } - ; - break; - - // operações de empilhamento de constantes - - case Definicao.ICONST0: { - - sp++; - - pilhaOperandos[sp] = 0; - - } - ; - break; - - case Definicao.ICONST1: { - - sp++; - - pilhaOperandos[sp] = 1; - - } - ; - break; - - case Definicao.ICONST2: { - - sp++; - - pilhaOperandos[sp] = 2; - - } - ; - break; - - case Definicao.ICONST3: { - - sp++; - - pilhaOperandos[sp] = 3; - - } - ; - break; - - case Definicao.ICONST4: { - - sp++; - - pilhaOperandos[sp] = 4; - - } - ; - break; - - case Definicao.ICONST5: { - - sp++; - - pilhaOperandos[sp] = 5; - - } - ; - break; - - case Definicao.ICONSTM1: { - - sp++; - - pilhaOperandos[sp] = -1; - - } - ; - break; - - case Definicao.LDC: { - - sp++; - - op1 = obterOperandoInteiro(); - - pilhaOperandos[sp] = op1; - - } - ; - break; - - // operações de load - - case Definicao.ILOAD0: { - - sp++; - - pilhaOperandos[sp] = memoriaGlobal[0]; - - } - ; - break; - - case Definicao.ILOAD1: { - - sp++; - - pilhaOperandos[sp] = memoriaGlobal[1]; - - } - ; - break; - - case Definicao.ILOAD2: { - - sp++; - - pilhaOperandos[sp] = memoriaGlobal[2]; - - } - ; - break; - - case Definicao.ILOAD3: { - - sp++; - - pilhaOperandos[sp] = memoriaGlobal[3]; - - } - ; - break; - - case Definicao.ILOAD: { - - sp++; - - op1 = obterOperandoInteiro(); - - pilhaOperandos[sp] = memoriaGlobal[op1]; - - } - ; - break; - - // operações de store - - case Definicao.ISTORE0: { - - memoriaGlobal[0] = pilhaOperandos[sp]; - - sp--; - - } - ; - break; - - case Definicao.ISTORE1: { - - memoriaGlobal[1] = pilhaOperandos[sp]; - - sp--; - - } - ; - break; - - case Definicao.ISTORE2: { - - memoriaGlobal[2] = pilhaOperandos[sp]; - - sp--; - - } - ; - break; - - case Definicao.ISTORE3: { - - memoriaGlobal[3] = pilhaOperandos[sp]; - - sp--; - - } - ; - break; - - case Definicao.ISTORE: { - - op1 = obterOperandoInteiro(); - - memoriaGlobal[op1] = pilhaOperandos[sp]; - - sp--; - - } - ; - break; - - // operações lógicas - - case Definicao.IAND: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - op1 = op1 & op2; - - sp--; - - } - ; - break; - - case Definicao.IOR: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - op1 = op1 | op2; - - sp--; - - } - ; - break; - - case Definicao.IXOR: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - op1 = op1 ^ op2; - - sp--; - - } - ; - break; - - // operações de desvio condicional - - case Definicao.IFEQ: { - - op1 = (Integer) pilhaOperandos[sp]; - - if (op1 == 0) { - - desviar(); - - desvio = true; - - } else - - pilhaOperandos[sp] = 0; - - } - ; - break; - - case Definicao.IFNE: { - - op1 = (Integer) pilhaOperandos[sp]; - - if (op1 != 0) { - - desviar(); - - desvio = true; - - } else - - pilhaOperandos[sp] = 0; - - } - ; - break; - - case Definicao.IFLT: { - - op1 = (Integer) pilhaOperandos[sp]; - - if (op1 > 0) { - - desviar(); - - desvio = true; - - } else - - pilhaOperandos[sp] = 0; - - } - ; - break; - - case Definicao.IFGE: { - - op1 = (Integer) pilhaOperandos[sp]; - - if (op1 >= 0) { - - desviar(); - - desvio = true; - - } else - - pilhaOperandos[sp] = 0; - - } - ; - break; - - case Definicao.IFGT: { - - op1 = (Integer) pilhaOperandos[sp]; - - if (op1 > 0) { - - desviar(); - - desvio = true; - - } else - - pilhaOperandos[sp] = 0; - - } - ; - break; - - case Definicao.IFLE: { - - op1 = (Integer) pilhaOperandos[sp]; - - if (op1 <= 0) { - - desviar(); - - desvio = true; - - } else - - pilhaOperandos[sp] = 0; - - } - ; - break; - - case Definicao.IF_ICMPEQ: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - if (op1 == op2) { - - desviar(); - - desvio = true; - - } else { - - pilhaOperandos[sp] = 0; - - ip += 4; - - } - - } - ; - break; - - case Definicao.IF_ICMPNE: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - if (op1 != op2) { - - desviar(); - - desvio = true; - - } else { - - pilhaOperandos[sp] = 0; - - ip += 4; - - } - - } - ; - break; - - case Definicao.IF_ICMPLT: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - if (op1 < op2) { - - desviar(); - - desvio = true; - - } else { - - pilhaOperandos[sp] = 0; - - ip += 4; - - } - - } - ; - break; - - case Definicao.IF_ICMPGE: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - if (op1 >= op2) { - - desviar(); - - desvio = true; - - } else { - - pilhaOperandos[sp] = 0; - - ip += 4; - - } - - } - ; - break; - - case Definicao.IF_ICMPGT: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - if (op1 > op2) { - - desviar(); - - desvio = true; - - } else { - - pilhaOperandos[sp] = 0; - - ip += 4; - - } - - } - ; - break; - - case Definicao.IF_ICMPLE: { - - op1 = (Integer) pilhaOperandos[sp - 1]; - - op2 = (Integer) pilhaOperandos[sp]; - - sp--; - - if (op1 <= op2) { - - desviar(); - - desvio = true; - - } else { - - pilhaOperandos[sp] = 0; - - ip += 4; - - } - - } - ; - break; - - // desvio incondicional - case Definicao.GOTO: { - - op1 = obterOperandoInteiro(); - - ip = op1; - - desvio = true; - - } - ; - break; - - } - - if (!desvio) - - ip++; - - // Para testes - exibirTela(); - - } - - } - - protected void desviar() { - - pilhaOperandos[sp] = 1; - - int op = obterOperandoInteiro(); - - ip = op; - - } - - protected int obterOperandoInteiro() { - - int op = BytecodeAssembler.obterInteiro(codigo, ip + 1); - - ip += 4; - - return op; - - } - - protected short recuperarValorOpcode(short a) { - - return (short) (128 + (128 + a)); - - } - - // Usado somente para testes - protected void exibirTela() { - - int i; - - System.out.println("IP: " + ip); - - System.out.println("SP: " + sp); - - System.out.print("Memória do código: "); - - for (i = 0; i < codigo.length; i++) - - System.out.print(codigo[i] + " "); - - System.out.print("\n"); - - System.out.print("Memória global das variáveis: "); - - for (i = 0; i < memoriaGlobal.length; i++) - - System.out.print(memoriaGlobal[i] + " "); - - System.out.print("\n"); - - System.out.print("Pilha: "); - - for (i = 0; i < pilhaOperandos.length; i++) - - System.out.print(pilhaOperandos[i] + " "); - - System.out.print("\n\n"); - - System.out - .print("Pressione qualquer tecla para ir para a próxima instrução: "); - - Scanner in = new Scanner(System.in); - - in.next(); - - } - -} +package br.ufpb.iged.interpretador.principal; + +import java.io.File; +import java.io.IOException; + +import org.antlr.runtime.ANTLRFileStream; +import org.antlr.runtime.ANTLRStringStream; +import org.antlr.runtime.CharStream; +import org.antlr.runtime.CommonTokenStream; +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.RuleReturnScope; +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; +import org.antlr.runtime.tree.CommonTree; +import org.antlr.runtime.tree.CommonTreeNodeStream; +import org.antlr.runtime.tree.TreeAdaptor; +import org.antlr.runtime.tree.CommonTreeAdaptor; + +import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; +import br.ufpb.iged.interpretador.bytecodeassembler.asm.Definicao; +import br.ufpb.iged.interpretador.parser.AssemblerLexer; +import br.ufpb.iged.interpretador.excecoes.AcessoIndevidoMemoriaException; +import br.ufpb.iged.interpretador.excecoes.ClassNotFoundException; +import br.ufpb.iged.interpretador.excecoes.LabelException; +import br.ufpb.iged.interpretador.symboltable.classes.BytecodesAST; +import br.ufpb.iged.interpretador.symboltable.classes.BytecodesErrorNode; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; +import br.ufpb.iged.interpretador.symboltable.classes.TabelaSimbolos; +import br.ufpb.iged.interpretador.parser.Def; +import br.ufpb.iged.interpretador.parser.Ref; + +public class Interpretador { + + private static final String DIRETORIO_FONTE = "./classes"; + + public static TabelaSimbolos tabelaSimbolos; + + private static StringBuffer entrada; + + private static BytecodeAssembler assembler; + + private static MaquinaVirtual vm; + + private static CommonTokenStream tokens = new CommonTokenStream(); + + private static CommonTree tree = new CommonTree(); + + public static TreeAdaptor bytecodesAdaptor = new CommonTreeAdaptor() { + + public Object create(Token token) { + return new BytecodesAST(token); + } + + public Object dupNode(Object t) { + if ( t==null ) { + return null; + } + return create(((BytecodesAST)t).token); + } + + public Object errorNode(TokenStream input, Token start, Token stop, + RecognitionException e) + { + BytecodesErrorNode t = new BytecodesErrorNode(input, start, stop, e); + return t; + } + + }; + + public static void main(String[] args) { + + try { + + carregar(); + + vm = new MaquinaVirtual(Interpretador.getAssembler().getConstantPool()); + + executarMain(); + + } catch (IOException ioe) { + + System.out.println(ioe.getMessage()); + + } catch (LabelException le) { + + System.out.println(le.getMessage()); + + } catch (AcessoIndevidoMemoriaException aime) { + + System.out.println(aime.getMessage()); + + } catch (ClassNotFoundException e) { + + System.out.println(e.getMessage()); + + } catch (RecognitionException e) { + + System.out.println(e.getMessage()); + + } + + + } + + public static void executarMain() throws ClassNotFoundException { + + SimboloClasse principal = ClassLoader.carregarClasseMain(); + SimboloMetodo main = (SimboloMetodo) principal.resolver("main(VOID)V"); + + vm.iniciarNovoMetodo(main, true); + vm.cpu(); + + } + + public static void carregar() + throws IOException, LabelException, + AcessoIndevidoMemoriaException, RecognitionException { + + entrada = new StringBuffer(); + + File file = new File(DIRETORIO_FONTE); + + String[] arquivos = file.list(); + + int i; + + for (i = 0; i < arquivos.length; i++){ + + if (arquivos[i].endsWith(".class")) { + + ANTLRFileStream input = + new ANTLRFileStream(DIRETORIO_FONTE+"/"+arquivos[i]); + + //entrada.append(input.toString()); + + + System.err.println("Analisando arquivo "+arquivos[i]); + + parse(input); + + + } + + } + + + tabelaSimbolos = new TabelaSimbolos(); + + montar(); + + } + + public static void parse(ANTLRFileStream input) throws RecognitionException{ + + StringBuffer entrada = new StringBuffer(); + entrada.append(input.toString()); + + CharStream inputChar = new ANTLRStringStream(entrada.toString()); + + AssemblerLexer lexer = new AssemblerLexer(inputChar); + CommonTokenStream toks = new CommonTokenStream(lexer); + BytecodeAssembler parser = new BytecodeAssembler(toks, Definicao.instrucoes); + parser.setTreeAdaptor(bytecodesAdaptor); + RuleReturnScope r = parser.programa(); + CommonTree arv = (CommonTree)r.getTree(); + tokens.getTokens().addAll(toks.getTokens()); + tree.addChild(arv); + + } + + public static void montar() throws LabelException, AcessoIndevidoMemoriaException { + + /*BytecodeAssembler parser = null; + + CharStream input = new ANTLRStringStream(entrada.toString()); + + AssemblerLexer lexer = new AssemblerLexer(input); + CommonTokenStream tokens = new CommonTokenStream(lexer); + parser = new BytecodeAssembler(tokens, Definicao.instrucoes); + parser.setTreeAdaptor(bytecodesAdaptor); + RuleReturnScope r = parser.programa(); + CommonTree tree = (CommonTree)r.getTree(); */ + + assembler = new BytecodeAssembler(tokens, Definicao.instrucoes); + + CommonTreeNodeStream nos = new CommonTreeNodeStream(bytecodesAdaptor, tree); + nos.setTokenStream(tokens); + Def def = new Def(nos, tabelaSimbolos); + def.downup(tree); + nos.reset(); + Ref ref = new Ref(nos, tabelaSimbolos, assembler); + ref.downup(tree); + + } + + public static BytecodeAssembler getAssembler() { + return assembler; + } + + public static void setAssembler(BytecodeAssembler assembler) { + Interpretador.assembler = assembler; + } + + public static MaquinaVirtual getVm() { + return vm; + } + + public static void setVm(MaquinaVirtual vm) { + Interpretador.vm = vm; + } + + +} diff --git a/src/br/ufpb/iged/interpretador/principal/MaquinaVirtual.java b/src/br/ufpb/iged/interpretador/principal/MaquinaVirtual.java new file mode 100644 index 0000000..486491f --- /dev/null +++ b/src/br/ufpb/iged/interpretador/principal/MaquinaVirtual.java @@ -0,0 +1,1149 @@ +package br.ufpb.iged.interpretador.principal; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +import br.ufpb.iged.interpretador.bytecodeassembler.asm.Definicao; +import br.ufpb.iged.interpretador.excecoes.ClassNotFoundException; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; + +public class MaquinaVirtual { + + public static final int TAMANHO_PILHA = 100; + + private StackFrame[] pilha = new StackFrame[TAMANHO_PILHA]; + + private StackFrame frameAtual; + + private int topoPilha = -1; + + public List heap = new ArrayList(); + + private List areaClasses = new ArrayList(); + + private int op1, op2; + + private short opcode; + + private boolean desvio = false; + + private int tamanhoCodigo; + + private Scanner in = new Scanner(System.in); + + public MaquinaVirtual(List areaClasses) { + + setAreaClasses(areaClasses); + + } + + public void cpu() throws ClassNotFoundException { + + + while (frameAtual.pc.getInstrucao() < tamanhoCodigo && topoPilha > -1) { + + if (!desvio) + + frameAtual.pc.incrementar(); + + executarInstrucao(); + + exibirTela(frameAtual); + + } + + + } + + public void executarInstrucao() throws ClassNotFoundException { + + desvio = false; + + opcode = frameAtual.pc.obterOpcode(); + + if (opcode < 0) + + opcode = valorEmByte(opcode); + + switch (opcode) { + + // operações de pilha + + case Definicao.NOP: + ; + break; + + case Definicao.POP: + frameAtual.sp-- ; + break; + + case Definicao.POP2: + frameAtual.sp -= 2 ; + break; + + case Definicao.DUP: { + + Object valor = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.pilhaOperandos[++frameAtual.sp] = null; + + frameAtual.pilhaOperandos[frameAtual.sp] = valor; + + } + ; + break; + + // operações aritméticas + + case Definicao.INEG: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.pilhaOperandos[frameAtual.sp] = 0 - op1; + + }; + break; + + case Definicao.IADD: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + frameAtual.pilhaOperandos[frameAtual.sp] = op1 + op2; + + } + ; + break; + + case Definicao.ISUB: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + frameAtual.pilhaOperandos[frameAtual.sp] = op1 - op2; + + } + ; + break; + + case Definicao.IMUL: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + frameAtual.pilhaOperandos[frameAtual.sp] = op1 * op2; + + } + ; + break; + + case Definicao.IDIV: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + frameAtual.pilhaOperandos[frameAtual.sp] = op1 / op2; + + } + ; + break; + + case Definicao.IREM: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + frameAtual.pilhaOperandos[frameAtual.sp] = op1 % op2; + + } + ; + break; + + case Definicao.IINC: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.pilhaOperandos[frameAtual.sp] = ++op1; + + } + ; + break; + + // operações de empilhamento de constantes + + case Definicao.ICONST0: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + } + ; + break; + + case Definicao.ICONST1: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = 1; + + } + ; + break; + + case Definicao.ICONST2: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = 2; + + } + ; + break; + + case Definicao.ICONST3: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = 3; + + } + ; + break; + + case Definicao.ICONST4: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = 4; + + } + ; + break; + + case Definicao.ICONST5: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = 5; + + } + ; + break; + + case Definicao.ICONSTM1: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = -1; + + } + ; + break; + + case Definicao.ACONSTNULL: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = new Referencia(null); + + } + ; + break; + + case Definicao.LDC: { + + frameAtual.sp++; + + op1 = frameAtual.pc.obterOperandoInteiro(); + + frameAtual.pilhaOperandos[frameAtual.sp] = op1; + + } + ; + break; + + // operações de load + + case Definicao.ILOAD0: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[0]; + + } + ; + break; + + case Definicao.ILOAD1: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[1]; + + } + ; + break; + + case Definicao.ILOAD2: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[2]; + + } + ; + break; + + case Definicao.ILOAD3: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[3]; + + } + ; + break; + + case Definicao.ILOAD: { + + frameAtual.sp++; + + op1 = frameAtual.pc.obterOperandoInteiro(); + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[op1]; + + } + ; + break; + + case Definicao.ALOAD0: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[0]; + + } + ; + break; + + case Definicao.ALOAD1: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[1]; + + } + ; + break; + + case Definicao.ALOAD2: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[2]; + + } + ; + break; + + case Definicao.ALOAD3: { + + frameAtual.sp++; + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[3]; + + } + ; + break; + + case Definicao.ALOAD: { + + frameAtual.sp++; + + op1 = frameAtual.pc.obterOperandoInteiro(); + + frameAtual.pilhaOperandos[frameAtual.sp] = frameAtual.variaveis[op1]; + + } + ; + break; + + + // operações de store + + case Definicao.ISTORE0: { + + frameAtual.variaveis[0] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ISTORE1: { + + frameAtual.variaveis[1] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ISTORE2: { + + frameAtual.variaveis[2] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ISTORE3: { + + frameAtual.variaveis[3] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ISTORE: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + frameAtual.variaveis[op1] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ASTORE0: { + + frameAtual.variaveis[0] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ASTORE1: { + + frameAtual.variaveis[1] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ASTORE2: { + + frameAtual.variaveis[2] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ASTORE3: { + + frameAtual.variaveis[3] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.ASTORE: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + frameAtual.variaveis[op1] = frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + } + ; + break; + + // operações lógicas + + case Definicao.IAND: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + op1 = op1 & op2; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.IOR: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + op1 = op1 | op2; + + frameAtual.sp--; + + } + ; + break; + + case Definicao.IXOR: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + op1 = op1 ^ op2; + + frameAtual.sp--; + + } + ; + break; + + // operações de desvio condicional + + case Definicao.IFEQ: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + if (op1 == 0) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IFNE: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + if (op1 != 0) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IFLT: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + if (op1 > 0) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IFGE: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + if (op1 >= 0) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IFGT: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + if (op1 > 0) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IFLE: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + if (op1 <= 0) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IF_ICMPEQ: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + if (op1 == op2) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IF_ICMPNE: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + if (op1 != op2) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IF_ICMPLT: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + if (op1 < op2) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IF_ICMPGE: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + if (op1 >= op2) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IF_ICMPGT: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + if (op1 > op2) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + case Definicao.IF_ICMPLE: { + + op1 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + op2 = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual.sp--; + + if (op1 <= op2) { + + desviar(frameAtual); + + desvio = true; + + } else { + + frameAtual.pilhaOperandos[frameAtual.sp] = 0; + + frameAtual.pc.pularOperando(); + + } + + } + ; + break; + + // desvio incondicional + case Definicao.GOTO: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + frameAtual.pc.jumpTo(op1); + + desvio = true; + + } + ; + break; + + //manipulação de objetos + + case Definicao.NEW: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + SimboloClasse simboloClasse = ClassLoader.carregarClasse(op1); + + Objeto objeto = new Objeto(simboloClasse); + + heap.add(objeto); + + frameAtual.pilhaOperandos[++frameAtual.sp] = new Referencia(heap.indexOf(objeto)); + + } + + ; + break; + + case Definicao.INVOKEVIRTUAL: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + op2 = frameAtual.pc.obterOperandoInteiro(); + + SimboloClasse simboloClasse = ClassLoader.carregarClasse(op1); + + SimboloMetodo simboloMetodo = (SimboloMetodo) simboloClasse.getMethodArea().get(op2); + + iniciarNovoMetodo(simboloMetodo, false); + } + + ; + break; + + case Definicao.INVOKESPECIAL: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + op2 = frameAtual.pc.obterOperandoInteiro(); + + SimboloClasse simboloClasse = ClassLoader.carregarClasse(op1); + + SimboloMetodo simboloMetodo = (SimboloMetodo) simboloClasse.getMethodArea().get(op2); + + iniciarNovoMetodo(simboloMetodo, false); + + } + + ; + break; + + case Definicao.GETFIELD: { + + Referencia referencia = (Referencia)frameAtual.pilhaOperandos[frameAtual.sp]; + + Objeto objeto = heap.get(referencia.getEndereco()); + + op1 = frameAtual.pc.obterOperandoInteiro(); + + frameAtual.pilhaOperandos[frameAtual.sp] = null; + + frameAtual.pilhaOperandos[frameAtual.sp] = objeto.getMemoriaLocal()[op1]; + + } + + ; + break; + + case Definicao.PUTFIELD: { + + Referencia referencia = (Referencia)frameAtual.pilhaOperandos[frameAtual.sp - 1]; + + Objeto objeto = heap.get(referencia.getEndereco()); + + op1 = frameAtual.pc.obterOperandoInteiro(); + + objeto.getMemoriaLocal()[op1] = frameAtual.pilhaOperandos[frameAtual.sp--]; + + } + + ; + break; + + //métodos e variáveis estáticas + + case Definicao.INVOKESTATIC: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + op2 = frameAtual.pc.obterOperandoInteiro(); + + SimboloClasse simboloClasse = ClassLoader.carregarClasse(op1); + + SimboloMetodo simboloMetodo = (SimboloMetodo) simboloClasse.getMethodArea().get(op2); + + iniciarNovoMetodo(simboloMetodo, true); + + } + + ; + break; + + case Definicao.GETSTATIC: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + op2 = frameAtual.pc.obterOperandoInteiro(); + + SimboloClasse simboloClasse = ClassLoader.carregarClasse(op1); + + frameAtual.pilhaOperandos[frameAtual.sp] = null; + + frameAtual.pilhaOperandos[frameAtual.sp] = simboloClasse.getFields()[op2]; + + } + + ; + break; + + case Definicao.PUTSTATIC: { + + op1 = frameAtual.pc.obterOperandoInteiro(); + + op2 = frameAtual.pc.obterOperandoInteiro(); + + SimboloClasse simboloClasse = ClassLoader.carregarClasse(op1); + + simboloClasse.alterarCampo(op2, frameAtual.pilhaOperandos[frameAtual.sp--]); + + } + + ; + break; + + //retorno de métodos + case Definicao.RETURN: { + + topoPilha--; + + if (topoPilha > -1) + + frameAtual = pilha[topoPilha]; + + } + + ; + break; + + case Definicao.IRETURN: { + + Integer valor = (Integer) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual = pilha[--topoPilha]; + + frameAtual.pilhaOperandos[frameAtual.sp] = valor; + + } + + ; + break; + + case Definicao.ARETURN: { + + Referencia valor = (Referencia) frameAtual.pilhaOperandos[frameAtual.sp]; + + frameAtual = pilha[--topoPilha]; + + frameAtual.pilhaOperandos[frameAtual.sp] = valor; + + } + + ; + break; + + } + + } + + public void iniciarNovoMetodo(SimboloMetodo metodo, boolean estatico) { + + pilha[++topoPilha] = new StackFrame(metodo.getTamanhoMemoriaLocal(), estatico); + + pilha[topoPilha].pc = new ProgramCounter(metodo); + + tamanhoCodigo = metodo.obterTamanhoCodigo(); + + frameAtual = pilha[topoPilha]; + + int i; + + int qtdParams = metodo.contarParametros(); + + Object obj; + + for (i = 0; i < qtdParams; i++) { + obj = pilha[topoPilha - 1].pilhaOperandos[pilha[topoPilha - 1].sp - i]; + frameAtual.inserirValorParametro(obj); + + } + + if (!estatico) + + frameAtual.inserirThis(pilha[topoPilha - 1].pilhaOperandos[pilha[topoPilha - 1].sp - i]); + + tamanhoCodigo = frameAtual.pc.getSimboloMetodo().obterTamanhoCodigo(); + + } + + protected void desviar(StackFrame frame) { + + frame.pilhaOperandos[frame.sp] = 1; + + int op = frame.pc.obterOperandoInteiro(); + + frame.pc.jumpTo(op); + + } + + protected short valorEmByte(short a) { + + return (short) (128 + (128 + a)); + + } + + protected void exibirTela(StackFrame frame) { + + int i; + + System.out.println("frameAtual.pc: " + frame.pc); + + System.out.println("frameAtual.sp: " + frame.sp); + + System.out.print("Memória do código: "); + + for (i = 0; i < frame.pc.getSimboloMetodo().getCodigo().length; i++) + + System.out.print(frame.pc.getSimboloMetodo().getCodigo()[i] + " "); + + System.out.print("\n"); + + System.out.print("Memória das variáveis: "); + + for (i = 0; i < frame.variaveis.length; i++) + + System.out.print(frame.variaveis[i] + " "); + + System.out.print("\n"); + + System.out.print("Pilha: "); + + for (i = 0; i < frame.pilhaOperandos.length; i++) + + System.out.print(frame.pilhaOperandos[i] + " "); + + System.out.print("\n\n"); + + System.out + .print("Pressione qualquer tecla para ir para a próxima instrução: "); + + in.next(); + + + } + + public StackFrame getFrameAtual() { + return frameAtual; + } + + public void setFrameAtual(StackFrame frameAtual) { + this.frameAtual = frameAtual; + } + + public StackFrame[] getPilha() { + return pilha; + } + + public void setPilha(StackFrame[] pilha) { + this.pilha = pilha; + } + + public int getTopoPilha() { + return topoPilha; + } + + public void setTopoPilha(int topoPilha) { + this.topoPilha = topoPilha; + } + + public int getTamanhoCodigo() { + return tamanhoCodigo; + } + + public void setTamanhoCodigo(int tamanhoCodigo) { + this.tamanhoCodigo = tamanhoCodigo; + } + + public List getAreaClasses() { + return areaClasses; + } + + public void setAreaClasses(List areaClasses) { + this.areaClasses = areaClasses; + } + + +} diff --git a/src/br/ufpb/iged/interpretador/principal/Objeto.java b/src/br/ufpb/iged/interpretador/principal/Objeto.java new file mode 100644 index 0000000..1cb7532 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/principal/Objeto.java @@ -0,0 +1,39 @@ +package br.ufpb.iged.interpretador.principal; + +import br.ufpb.iged.interpretador.symboltable.classes.SimboloClasse; + +public class Objeto { + + private String nome; + + private Object[] memoriaLocal; + + public Objeto(SimboloClasse simboloClasse) { + + memoriaLocal = new Object[0]; + + nome = simboloClasse.obterNome(); + + simboloClasse.alocarMemoriaVariaveis(this, false); + + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public Object[] getMemoriaLocal() { + return memoriaLocal; + } + + public void setMemoriaLocal(Object[] memoriaLocal) { + this.memoriaLocal = memoriaLocal; + } + + + +} diff --git a/src/br/ufpb/iged/interpretador/principal/ProgramCounter.java b/src/br/ufpb/iged/interpretador/principal/ProgramCounter.java new file mode 100644 index 0000000..2b0230d --- /dev/null +++ b/src/br/ufpb/iged/interpretador/principal/ProgramCounter.java @@ -0,0 +1,74 @@ +package br.ufpb.iged.interpretador.principal; + +import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; +import br.ufpb.iged.interpretador.symboltable.classes.SimboloMetodo; + +public class ProgramCounter { + + private SimboloMetodo simboloMetodo; + + private int instrucao; + + public ProgramCounter(SimboloMetodo metodo) { + + this.simboloMetodo = metodo; + + instrucao = -1; + + } + + public void incrementar() { + + instrucao++; + + } + + public void pularOperando() { + + instrucao += 4; + + } + + public void jumpTo(int to) { + + instrucao = to; + + } + + public short obterOpcode() { + + return simboloMetodo.getCodigo()[instrucao]; + + } + + public int obterOperandoInteiro() { + + int op = BytecodeAssembler.obterInteiro(simboloMetodo.getCodigo(), instrucao + 1); + + pularOperando(); + + return op; + + } + + public SimboloMetodo getSimboloMetodo() { + return simboloMetodo; + } + + public void setSimboloMetodo(SimboloMetodo simboloMetodo) { + this.simboloMetodo = simboloMetodo; + } + + public int getInstrucao() { + return instrucao; + } + + public void setInstrucao(int instrucao) { + this.instrucao = instrucao; + } + + public String toString() { + return new Integer(instrucao).toString(); + } + +} diff --git a/src/br/ufpb/iged/interpretador/principal/Referencia.java b/src/br/ufpb/iged/interpretador/principal/Referencia.java new file mode 100644 index 0000000..cca03e0 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/principal/Referencia.java @@ -0,0 +1,27 @@ +package br.ufpb.iged.interpretador.principal; + +public class Referencia { + + protected Integer endereco; + + public Referencia(Integer endereco) { + + this.setEndereco(endereco); + + } + + public Integer getEndereco() { + return endereco; + } + + public void setEndereco(Integer endereco) { + this.endereco = endereco; + } + + public String toString() { + + return (endereco != null)? endereco.toString() : "null"; + + } + +} diff --git a/src/br/ufpb/iged/interpretador/principal/StackFrame.java b/src/br/ufpb/iged/interpretador/principal/StackFrame.java new file mode 100644 index 0000000..d5921ea --- /dev/null +++ b/src/br/ufpb/iged/interpretador/principal/StackFrame.java @@ -0,0 +1,41 @@ +package br.ufpb.iged.interpretador.principal; + +public class StackFrame { + + public static final int TAMANHO_INICIAL_PILHA = 100; + + public Object[] pilhaOperandos = new Object[TAMANHO_INICIAL_PILHA]; + + public Object[] variaveis; + + public int sp = -1; + + public ProgramCounter pc; + + private int nextParam; + + public StackFrame(int tamanhoMemoriaLocal, boolean estatico) { + + this.variaveis = new Object[tamanhoMemoriaLocal]; + + if (estatico) + nextParam = 0; + else + nextParam = 1; + + } + + public void inserirValorParametro(Object valor) { + + variaveis[nextParam++] = valor; + + } + + public void inserirThis(Object valor) { + + variaveis[0] = valor; + + } + + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/BytecodesAST.java b/src/br/ufpb/iged/interpretador/symboltable/classes/BytecodesAST.java new file mode 100644 index 0000000..08de540 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/BytecodesAST.java @@ -0,0 +1,16 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +import org.antlr.runtime.tree.CommonTree; +import org.antlr.runtime.Token; + +public class BytecodesAST extends CommonTree { + + public Escopo escopo; + + public Simbolo simbolo; + + public BytecodesAST(Token t) { + super(t); + } + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/BytecodesErrorNode.java b/src/br/ufpb/iged/interpretador/symboltable/classes/BytecodesErrorNode.java new file mode 100644 index 0000000..824ad11 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/BytecodesErrorNode.java @@ -0,0 +1,13 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; + +public class BytecodesErrorNode extends BytecodesAST { + public BytecodesErrorNode(TokenStream input, Token start, Token stop, + RecognitionException e) + { + super(start); + } +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/Escopo.java b/src/br/ufpb/iged/interpretador/symboltable/classes/Escopo.java new file mode 100644 index 0000000..3c131bb --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/Escopo.java @@ -0,0 +1,15 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public interface Escopo { + + public String obterNomeEscopo(); + + public Escopo obterEscopoPai(); + + public Escopo obterEscopoEnvolvente(); + + public void definir(Simbolo simbolo); + + public Simbolo resolver(String name); + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoBase.java b/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoBase.java new file mode 100644 index 0000000..1b80b03 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoBase.java @@ -0,0 +1,46 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +import java.util.LinkedHashMap; +import java.util.Map; + +public abstract class EscopoBase implements Escopo { + + private Escopo escopoEnvolvente; + + public Map simbolos = new LinkedHashMap(); + + public EscopoBase(Escopo parent) { this.escopoEnvolvente = parent; } + + public Simbolo resolver(String nome) { + + Simbolo s = simbolos.get(nome); + + if ( s!=null ) return s; + if ( obterEscopoPai() != null ) return obterEscopoPai().resolver(nome); + return null; + + } + + public void definir(Simbolo simbolo) { + + simbolos.put(simbolo.nome, simbolo); + + simbolo.escopo = this; + + } + + public Escopo obterEscopoPai() { + + return obterEscopoEnvolvente(); + + } + + public Escopo obterEscopoEnvolvente() { + + return escopoEnvolvente; + + } + + public String toString() { return simbolos.keySet().toString(); } +} + diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoGlobal.java b/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoGlobal.java new file mode 100644 index 0000000..b7cbff8 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoGlobal.java @@ -0,0 +1,18 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public class EscopoGlobal extends EscopoBase { + + public byte[] codigo; + + public Object[] memoriaGlobal; + + public EscopoGlobal() { + super(null); + } + + public String obterNomeEscopo() { + return "global"; + } + + +} \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoLocal.java b/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoLocal.java new file mode 100644 index 0000000..327024b --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/EscopoLocal.java @@ -0,0 +1,14 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public class EscopoLocal extends EscopoBase { + + public EscopoLocal(Escopo pai) { + super(pai); + } + + public String obterNomeEscopo() { + return "local"; + } + + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/Simbolo.java b/src/br/ufpb/iged/interpretador/symboltable/classes/Simbolo.java new file mode 100644 index 0000000..74b0155 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/Simbolo.java @@ -0,0 +1,45 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public class Simbolo { + + public String nome; + + public Tipo tipo; + + Escopo escopo; + + public BytecodesAST def; + + public Simbolo(String nome) { + this.nome = nome; + } + + public Simbolo(String nome, Tipo tipo) { + this(nome); + this.tipo = tipo; + } + + public String getNome() { + return nome; + } + + public String toString() { + String s = ""; + if ( escopo!=null ) s = escopo.obterNomeEscopo()+"."; + if ( tipo!=null ) return '<'+s+getNome()+":"+tipo+'>'; + return s+getNome(); + } + + public static String eliminarParenteses(String s) { + return s.substring(1,s.length()-1); + } + + public Tipo getTipo() { + return tipo; + } + + public void setTipo(Tipo tipo) { + this.tipo = tipo; + } + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloClasse.java b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloClasse.java new file mode 100644 index 0000000..395ab61 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloClasse.java @@ -0,0 +1,267 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +import java.util.*; + +import br.ufpb.iged.interpretador.principal.Objeto; +import br.ufpb.iged.interpretador.principal.Referencia; + +public class SimboloClasse extends SimboloComEscopo implements Tipo { + + public SimboloClasse superClasse; + + public Map membros=new LinkedHashMap(); + + protected List constantPool = new ArrayList (); + + protected List methodArea = new ArrayList(); + + private Object[] fields = null; + + protected int proximoElementoConstPool = 0; + + public SimboloClasse(String nome, Escopo escopoEnvolvente, SimboloClasse superClasse) { + + super(nome, escopoEnvolvente); + + this.superClasse = superClasse; + + fields = null; + + } + + public Escopo obterEscopoPai() { + + if ( superClasse==null ) return escopoEnvolvente; + + return superClasse; + + } + + public Simbolo resolverMembro(String nome) { + + Simbolo s = membros.get(nome); + + if ( s!=null ) return s; + + if ( superClasse != null ) { + return superClasse.resolverMembro(nome); + } + return null; + + } + + + public boolean possuiMetodo(String assinatura) { + + Simbolo metodo = (SimboloMetodo)resolver(assinatura); + + if (metodo != null) + return true; + + return false; + + } + + public void alocarMemoriaVariaveis(Objeto objeto, boolean estaticas) { + + if (!estaticas || (estaticas && (fields == null))) { + + Object[] variaveis = new Object[obterQuantidadeVariaveis(estaticas)]; + + definirTiposVariaveis(variaveis, 0, estaticas); + + + if (estaticas) + fields = variaveis; + else { + objeto.setMemoriaLocal(variaveis); + } + + + } + + + } + + public int definirTiposVariaveis(Object[] vars, int i, boolean estaticas) { + + for (SimboloVariavel variavel : constantPool) { + + if (variavel.isEstatico() == estaticas) { + + String nomeTipo = variavel.getTipo().obterNome(); + + if(nomeTipo.equals("I")) { + + vars[i] = new Integer(0); + + i++; + + } else if (nomeTipo.startsWith("L")) { + + vars[i] = new Referencia(new Integer(0)); + + i++; + + } + + } + + } + + return i; + + } + + public int obterIdentificadorVariavel(SimboloVariavel variavel) { + + int i = 0; + + boolean estatico = variavel.isEstatico(); + + for (SimboloVariavel var : constantPool) { + + if (var.isEstatico() == estatico){ + + if (var == variavel) + return i; + else + i++; + } + + } + + return i; + + } + + public void alocarMemoriaFields() { + + + fields = new Object[constantPool.size()]; + + int i; + + for (i = 0; i < constantPool.size(); i++) { + + String nomeTipo = constantPool.get(i).getTipo().obterNome(); + + if(nomeTipo.equals("I")) + + fields[i] = new Integer(0); + + else if (nomeTipo.startsWith("L")) + + fields[i] = new Referencia(new Integer(0)); + + + } + + SimboloClasse parent = superClasse; + + while(parent != null) { + + List constantPoolParent = parent.getConstantPool(); + + fields = + Arrays.copyOf( + fields, fields.length + constantPoolParent.size()); + + int j; + + for (j = 0; j < constantPoolParent.size(); j++, i++) { + + String nomeTipo = constantPoolParent.get(j).getTipo().obterNome(); + + if(nomeTipo.equals("I")) + + fields[i] = new Integer(0); + + else if (nomeTipo.startsWith("L")) + + fields[i] = new Referencia(new Integer(0)); + + + } + + parent = parent.getSuperClasse(); + + } + + } + + public int obterQuantidadeVariaveis(boolean estaticas) { + + int c = 0; + + for (SimboloVariavel variavel : constantPool) { + + if (variavel.isEstatico() == estaticas) + c++; + + } + + return c; + + } + + public void alterarCampo(int index, Object valor) { + + fields[index] = valor; + + } + + public Map obterMembros() { + + return membros; + + } + + public String toString() { + return "class "+nome+":{"+ + eliminarParenteses(membros.keySet().toString())+"}"; + } + + @Override + public String obterNome() { + return nome; + } + + public List getConstantPool() { + return constantPool; + } + + public void setConstantPool(List constantPool) { + this.constantPool = constantPool; + } + + public SimboloClasse getSuperClasse() { + return superClasse; + } + + public void setSuperClasse(SimboloClasse superClasse) { + this.superClasse = superClasse; + } + + public Object[] getFields() { + return fields; + } + + public void setFields(Object[] fields) { + + this.fields = fields; + + } + + public List getMethodArea() { + return methodArea; + } + + public void setMethodArea(List methodArea) { + this.methodArea = methodArea; + } + + + +} + diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloComEscopo.java b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloComEscopo.java new file mode 100644 index 0000000..b13a5a3 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloComEscopo.java @@ -0,0 +1,65 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +import java.util.Map; + +public abstract class SimboloComEscopo extends Simbolo implements Escopo { + + Escopo escopoEnvolvente; + + public SimboloComEscopo(String nome, Tipo tipo, Escopo escopoEnvolvente) { + + super(nome, tipo); + + this.escopoEnvolvente = escopoEnvolvente; + + } + + public SimboloComEscopo(String nome, Escopo escopoEnvolvente) { + + super(nome); + + this.escopoEnvolvente = escopoEnvolvente; + + } + + public Simbolo resolver(String nome) { + + Simbolo s = obterMembros().get(nome); + if ( s!=null ) return s; + // if not here, check any parent Escopo + if ( obterEscopoPai() != null ) { + return obterEscopoPai().resolver(nome); + } + return null; // not found + + } + + public void definir(Simbolo simbolo) { + + obterMembros().put(simbolo.nome, simbolo); + + simbolo.escopo = this; + + } + + public Escopo obterEscopoPai() { + + return obterEscopoEnvolvente(); + + } + + public Escopo obterEscopoEnvolvente() { + + return escopoEnvolvente; + + } + + public String obterNomeEscopo() { + + return nome; + + } + + public abstract Map obterMembros(); + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloLabel.java b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloLabel.java new file mode 100755 index 0000000..dd48da0 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloLabel.java @@ -0,0 +1,63 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +import java.util.*; + +import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; + +public class SimboloLabel { + String name; + + public int endereco; + + boolean isForwardRef = false; + + boolean isDefined = true; + + Vector forwardReferences = null; + + public SimboloLabel(String name) { + this.name = name; + } + + public SimboloLabel(String name, int endereco) { + this(name); + this.endereco = endereco; + } + + public SimboloLabel(String name, int endereco, boolean forward) { + this(name); + isForwardRef = forward; + if (forward) { + // if forward reference, then address is address to update + addForwardReference(endereco); + } else { + this.endereco = endereco; + } + } + + public void addForwardReference(int address) { + if (forwardReferences == null) { + forwardReferences = new Vector(); + } + forwardReferences.addElement(new Integer(address)); + } + + public void resolveForwardReferences(byte[] code) { + isForwardRef = false; + + Vector opndsToPatch = forwardReferences; + for (int addrToPatch : opndsToPatch) { + + BytecodeAssembler.escreverInteiro(code, addrToPatch, endereco); + + } + } + + public String toString() { + String refs = ""; + if (forwardReferences != null) { + refs = "[refs=" + forwardReferences.toString() + "]"; + } + return name + "@" + endereco + refs; + } +} \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloMetodo.java b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloMetodo.java new file mode 100644 index 0000000..8bd3d34 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloMetodo.java @@ -0,0 +1,144 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.antlr.runtime.Token; + +import br.ufpb.iged.interpretador.excecoes.LabelException; + +public class SimboloMetodo extends SimboloComEscopo{ + + Map parametros = new LinkedHashMap(); + + private Map labels = + new HashMap(); + + private String retorno; + + public static final int TAMANHO_INICIAL_MEMORIA_CODIGO = 1024; + + private byte[] codigo = new byte[TAMANHO_INICIAL_MEMORIA_CODIGO]; + + private int tamanhoMemoriaLocal = 65536; + + public SimboloMetodo(String nome, Tipo tipoRet, Escopo parent) { + super(nome, tipoRet, parent); + setRetorno(""); + } + + public Map obterMembros() { + return parametros; + } + + public String obterNome() { + return nome; + } + + public int obterTamanhoCodigo() { + + return codigo.length; + + } + + public int contarParametros() { + + String assinatura = toString(); + + int indexAbrePar = assinatura.indexOf("("); + + int indexFechaPar = assinatura.indexOf(")"); + + String params = assinatura.substring(indexAbrePar + 1, indexFechaPar); + + if (params.equals("VOID")) + return 0; + + int i, c; + + for (i = 0, c = 0; i < params.length(); i++) { + + if (params.charAt(i) == 'I'){ + c++; + } else if (params.charAt(i) == 'L'){ + while(params.charAt(i) != ';') + i++; + c++; + } + + } + + return c; + + } + + public void definirLabel(Token id, int endereco) throws LabelException { + + SimboloLabel label = labels.get(id.getText()); + + if (label != null) + throw new LabelException("Label duplicado"); + + + label = new SimboloLabel(id.getText(), endereco); + + labels.put(id.getText(), label); + + } + + public String getRetorno() { + return retorno; + } + + public void setRetorno(String retorno) { + this.retorno = retorno; + } + + public byte[] getCodigo() { + return codigo; + } + + public void setCodigo(byte[] codigo) { + this.codigo = codigo; + } + + public int getTamanhoMemoriaLocal() { + return tamanhoMemoriaLocal; + } + + public void setTamanhoMemoriaLocal(int tamanhoMemoriaLocal) { + this.tamanhoMemoriaLocal = tamanhoMemoriaLocal; + } + + public Map getLabels() { + return labels; + } + + public void setLabels(Map labels) { + this.labels = labels; + } + + public String toString() { + return obterNome(); + } + + //para testes + public void exibirCodigo() { + + System.out.println("--------- Método "+this+" ---------"); + System.out.print("Memória do código: "); + + int i; + + for (i = 0; i < codigo.length; i++) + + System.out.print(codigo[i] + " "); + + System.out.print("\n"); + + System.out.println("Tamanho da memória local: "+tamanhoMemoriaLocal+"\n\n"); + + } + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloTipoPrimitvo.java b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloTipoPrimitvo.java new file mode 100644 index 0000000..d0401a0 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloTipoPrimitvo.java @@ -0,0 +1,18 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public class SimboloTipoPrimitvo extends Simbolo implements Tipo { + + public SimboloTipoPrimitvo(String nome) { + + super(nome); + + } + + @Override + public String obterNome() { + return nome; + + } + + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloVariavel.java b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloVariavel.java new file mode 100644 index 0000000..5cbe42a --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/SimboloVariavel.java @@ -0,0 +1,31 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public class SimboloVariavel extends Simbolo { + + private boolean estatico; + + public SimboloVariavel(String nome, Tipo tipo) { + + super(nome, tipo); + + this.estatico = false; + + } + + public SimboloVariavel(String nome, Tipo tipo, boolean estatico) { + + super(nome, tipo); + + this.estatico = estatico; + + } + + public boolean isEstatico() { + return estatico; + } + + public void setEstatico(boolean estatico) { + this.estatico = estatico; + } + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/TabelaSimbolos.java b/src/br/ufpb/iged/interpretador/symboltable/classes/TabelaSimbolos.java new file mode 100644 index 0000000..377253a --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/TabelaSimbolos.java @@ -0,0 +1,15 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public class TabelaSimbolos { + + public EscopoGlobal global = new EscopoGlobal(); + + public TabelaSimbolos() { + + global.definir(new SimboloTipoPrimitvo("I")); + + } + + + +} diff --git a/src/br/ufpb/iged/interpretador/symboltable/classes/Tipo.java b/src/br/ufpb/iged/interpretador/symboltable/classes/Tipo.java new file mode 100644 index 0000000..7703484 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/symboltable/classes/Tipo.java @@ -0,0 +1,7 @@ +package br.ufpb.iged.interpretador.symboltable.classes; + +public interface Tipo { + + public String obterNome(); + +} diff --git a/src/br/ufpb/iged/interpretador/testes/Test.java b/src/br/ufpb/iged/interpretador/testes/Test.java old mode 100644 new mode 100755 index ac4a553..e053a60 --- a/src/br/ufpb/iged/interpretador/testes/Test.java +++ b/src/br/ufpb/iged/interpretador/testes/Test.java @@ -1,32 +1,69 @@ -package br.ufpb.iged.interpretador.testes; - -import org.antlr.runtime.*; - -import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; -import br.ufpb.iged.interpretador.bytecodeassembler.asm.Definicao; -import br.ufpb.iged.interpretador.bytecodeassembler.parser.AssemblerLexer; -import br.ufpb.iged.interpretador.bytecodeassembler.parser.AssemblerParser; - -public class Test { - - public static void main(String[] args) throws Exception { - - CharStream entrada = new ANTLRFileStream("entrada.txt"); - - AssemblerLexer lexer = new AssemblerLexer(entrada); - - CommonTokenStream tokens = new CommonTokenStream(lexer); - - AssemblerParser parser = new BytecodeAssembler(tokens, Definicao.instrucoes); - parser.programa(); - - for (int i = 0; i < BytecodeAssembler.codigo.length ; i++) { - - System.out.print(BytecodeAssembler.codigo[i] + " "); - - } - - - } - -} +package br.ufpb.iged.interpretador.testes; + +import org.antlr.runtime.*; + +import br.ufpb.iged.interpretador.bytecodeassembler.asm.BytecodeAssembler; +import br.ufpb.iged.interpretador.bytecodeassembler.asm.Definicao; +import br.ufpb.iged.interpretador.parser.AssemblerLexer; +import br.ufpb.iged.interpretador.parser.AssemblerParser; + +public class Test { + + public static void main(String[] args) throws Exception { + + CharStream entrada = new ANTLRFileStream("entrada.txt"); + + AssemblerLexer lexer = new AssemblerLexer(entrada); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + + AssemblerParser parser = new BytecodeAssembler(tokens, Definicao.instrucoes); + parser.programa(); + + for (int i = 0; i < BytecodeAssembler.codigo.length ; i++) { + + System.out.print(BytecodeAssembler.codigo[i] + " "); + + + } + + String a = "oieerere/fldlfkf/Classe/xyz"; + String [] toks = a.split("/"); + String campo = toks[toks.length - 1]; + System.out.println(campo); + String classe = "L"; + + int i; + + for (i = 0; i < toks.length - 1; i++){ + if (i == toks.length - 2) + classe += toks[i]; + else + classe += toks[i]+"/"; + } + + System.out.println(classe); + + String b = "khklgh/Classe/"; + String c = "L"+b.substring(0, b.length() - 1); + + System.out.println(c); + + /*String t1 = "uisos(III)I"; + String t2 = " main(VOID)V"; + String t3 = "(VOID)V"; + String t4 = "(II)V"; + String t5 = "kioeot(IIII)I"; + String t6 = "refs(LClasse;LComposicao;IILHeranca;)I"; + + System.out.println("Params 1: "+contarParametros(t1)); + System.out.println("Params 2: "+contarParametros(t2)); + System.out.println("Params 3: "+contarParametros(t3)); + System.out.println("Params 4: "+contarParametros(t4)); + System.out.println("Params 5: "+contarParametros(t5)); + System.out.println("Params 6: "+contarParametros(t6));*/ + + } + + +} diff --git a/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/Intermediario.tokens b/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/Intermediario.tokens new file mode 100644 index 0000000..0b7c472 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/Intermediario.tokens @@ -0,0 +1,21 @@ +T__7=7 +T__8=8 +T__9=9 +T__10=10 +T__11=11 +T__12=12 +T__13=13 +T__14=14 +T__15=15 +ID=4 +INT=5 +WS=6 +'ADD'=7 +'CREATE_INT'=8 +'DELETE_INT'=9 +'DIV'=10 +'MULT'=11 +'READ_INT'=12 +'READ_INTC'=13 +'SUB'=14 +'WRITE_INT'=15 diff --git a/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioLexer.java b/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioLexer.java new file mode 100644 index 0000000..b4844f8 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioLexer.java @@ -0,0 +1,922 @@ +// $ANTLR 3.4 C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g 2012-07-15 17:30:16 + + package br.ufpb.iged.interpretador.tradutor.intermediario.parser; + + +import org.antlr.runtime.*; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked"}) +public class IntermediarioLexer extends Lexer { + public static final int EOF=-1; + public static final int T__7=7; + public static final int T__8=8; + public static final int T__9=9; + public static final int T__10=10; + public static final int T__11=11; + public static final int T__12=12; + public static final int T__13=13; + public static final int T__14=14; + public static final int T__15=15; + public static final int ID=4; + public static final int INT=5; + public static final int WS=6; + + // delegates + // delegators + public Lexer[] getDelegates() { + return new Lexer[] {}; + } + + public IntermediarioLexer() {} + public IntermediarioLexer(CharStream input) { + this(input, new RecognizerSharedState()); + } + public IntermediarioLexer(CharStream input, RecognizerSharedState state) { + super(input,state); + } + public String getGrammarFileName() { return "C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g"; } + + // $ANTLR start "T__7" + public final void mT__7() throws RecognitionException { + try { + int _type = T__7; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:6:6: ( 'ADD' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:6:8: 'ADD' + { + match("ADD"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__7" + + // $ANTLR start "T__8" + public final void mT__8() throws RecognitionException { + try { + int _type = T__8; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:7:6: ( 'CREATE_INT' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:7:8: 'CREATE_INT' + { + match("CREATE_INT"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__8" + + // $ANTLR start "T__9" + public final void mT__9() throws RecognitionException { + try { + int _type = T__9; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:8:6: ( 'DELETE_INT' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:8:8: 'DELETE_INT' + { + match("DELETE_INT"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__9" + + // $ANTLR start "T__10" + public final void mT__10() throws RecognitionException { + try { + int _type = T__10; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:9:7: ( 'DIV' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:9:9: 'DIV' + { + match("DIV"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__10" + + // $ANTLR start "T__11" + public final void mT__11() throws RecognitionException { + try { + int _type = T__11; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:10:7: ( 'MULT' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:10:9: 'MULT' + { + match("MULT"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__11" + + // $ANTLR start "T__12" + public final void mT__12() throws RecognitionException { + try { + int _type = T__12; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:11:7: ( 'READ_INT' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:11:9: 'READ_INT' + { + match("READ_INT"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__12" + + // $ANTLR start "T__13" + public final void mT__13() throws RecognitionException { + try { + int _type = T__13; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:12:7: ( 'READ_INTC' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:12:9: 'READ_INTC' + { + match("READ_INTC"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__13" + + // $ANTLR start "T__14" + public final void mT__14() throws RecognitionException { + try { + int _type = T__14; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:13:7: ( 'SUB' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:13:9: 'SUB' + { + match("SUB"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__14" + + // $ANTLR start "T__15" + public final void mT__15() throws RecognitionException { + try { + int _type = T__15; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:14:7: ( 'WRITE_INT' ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:14:9: 'WRITE_INT' + { + match("WRITE_INT"); + + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "T__15" + + // $ANTLR start "INT" + public final void mINT() throws RecognitionException { + try { + int _type = INT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:44:5: ( ( '-' )? ( '0' .. '9' )+ ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:44:7: ( '-' )? ( '0' .. '9' )+ + { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:44:7: ( '-' )? + int alt1=2; + int LA1_0 = input.LA(1); + + if ( (LA1_0=='-') ) { + alt1=1; + } + switch (alt1) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:44:7: '-' + { + match('-'); + + } + break; + + } + + + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:44:12: ( '0' .. '9' )+ + int cnt2=0; + loop2: + do { + int alt2=2; + int LA2_0 = input.LA(1); + + if ( ((LA2_0 >= '0' && LA2_0 <= '9')) ) { + alt2=1; + } + + + switch (alt2) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g: + { + if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + } + break; + + default : + if ( cnt2 >= 1 ) break loop2; + EarlyExitException eee = + new EarlyExitException(2, input); + throw eee; + } + cnt2++; + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "INT" + + // $ANTLR start "ID" + public final void mID() throws RecognitionException { + try { + int _type = ID; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:46:3: ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' )* ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:46:5: ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' )* + { + if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:46:27: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '.' )* + loop3: + do { + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0=='.'||(LA3_0 >= '0' && LA3_0 <= '9')||(LA3_0 >= 'A' && LA3_0 <= 'Z')||(LA3_0 >= 'a' && LA3_0 <= 'z')) ) { + alt3=1; + } + + + switch (alt3) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g: + { + if ( input.LA(1)=='.'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + } + break; + + default : + break loop3; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "ID" + + // $ANTLR start "WS" + public final void mWS() throws RecognitionException { + try { + int _type = WS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:48:4: ( ( ' ' | '\\t' | '\\r' | '\\n' ) ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:48:6: ( ' ' | '\\t' | '\\r' | '\\n' ) + { + if ( (input.LA(1) >= '\t' && input.LA(1) <= '\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) { + input.consume(); + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse; + } + + + skip(); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + // do for sure before leaving + } + } + // $ANTLR end "WS" + + public void mTokens() throws RecognitionException { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:8: ( T__7 | T__8 | T__9 | T__10 | T__11 | T__12 | T__13 | T__14 | T__15 | INT | ID | WS ) + int alt4=12; + switch ( input.LA(1) ) { + case 'A': + { + int LA4_1 = input.LA(2); + + if ( (LA4_1=='D') ) { + int LA4_11 = input.LA(3); + + if ( (LA4_11=='D') ) { + int LA4_19 = input.LA(4); + + if ( (LA4_19=='.'||(LA4_19 >= '0' && LA4_19 <= '9')||(LA4_19 >= 'A' && LA4_19 <= 'Z')||(LA4_19 >= 'a' && LA4_19 <= 'z')) ) { + alt4=11; + } + else { + alt4=1; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + break; + case 'C': + { + int LA4_2 = input.LA(2); + + if ( (LA4_2=='R') ) { + int LA4_12 = input.LA(3); + + if ( (LA4_12=='E') ) { + int LA4_20 = input.LA(4); + + if ( (LA4_20=='A') ) { + int LA4_28 = input.LA(5); + + if ( (LA4_28=='T') ) { + int LA4_35 = input.LA(6); + + if ( (LA4_35=='E') ) { + int LA4_40 = input.LA(7); + + if ( (LA4_40=='_') ) { + alt4=2; + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + break; + case 'D': + { + switch ( input.LA(2) ) { + case 'E': + { + int LA4_13 = input.LA(3); + + if ( (LA4_13=='L') ) { + int LA4_21 = input.LA(4); + + if ( (LA4_21=='E') ) { + int LA4_29 = input.LA(5); + + if ( (LA4_29=='T') ) { + int LA4_36 = input.LA(6); + + if ( (LA4_36=='E') ) { + int LA4_41 = input.LA(7); + + if ( (LA4_41=='_') ) { + alt4=3; + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + break; + case 'I': + { + int LA4_14 = input.LA(3); + + if ( (LA4_14=='V') ) { + int LA4_22 = input.LA(4); + + if ( (LA4_22=='.'||(LA4_22 >= '0' && LA4_22 <= '9')||(LA4_22 >= 'A' && LA4_22 <= 'Z')||(LA4_22 >= 'a' && LA4_22 <= 'z')) ) { + alt4=11; + } + else { + alt4=4; + } + } + else { + alt4=11; + } + } + break; + default: + alt4=11; + } + + } + break; + case 'M': + { + int LA4_4 = input.LA(2); + + if ( (LA4_4=='U') ) { + int LA4_15 = input.LA(3); + + if ( (LA4_15=='L') ) { + int LA4_23 = input.LA(4); + + if ( (LA4_23=='T') ) { + int LA4_31 = input.LA(5); + + if ( (LA4_31=='.'||(LA4_31 >= '0' && LA4_31 <= '9')||(LA4_31 >= 'A' && LA4_31 <= 'Z')||(LA4_31 >= 'a' && LA4_31 <= 'z')) ) { + alt4=11; + } + else { + alt4=5; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + break; + case 'R': + { + int LA4_5 = input.LA(2); + + if ( (LA4_5=='E') ) { + int LA4_16 = input.LA(3); + + if ( (LA4_16=='A') ) { + int LA4_24 = input.LA(4); + + if ( (LA4_24=='D') ) { + int LA4_32 = input.LA(5); + + if ( (LA4_32=='_') ) { + int LA4_38 = input.LA(6); + + if ( (LA4_38=='I') ) { + int LA4_42 = input.LA(7); + + if ( (LA4_42=='N') ) { + int LA4_46 = input.LA(8); + + if ( (LA4_46=='T') ) { + int LA4_47 = input.LA(9); + + if ( (LA4_47=='C') ) { + alt4=7; + } + else { + alt4=6; + } + } + else { + NoViableAltException nvae = + new NoViableAltException("", 4, 46, input); + + throw nvae; + + } + } + else { + NoViableAltException nvae = + new NoViableAltException("", 4, 42, input); + + throw nvae; + + } + } + else { + NoViableAltException nvae = + new NoViableAltException("", 4, 38, input); + + throw nvae; + + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + break; + case 'S': + { + int LA4_6 = input.LA(2); + + if ( (LA4_6=='U') ) { + int LA4_17 = input.LA(3); + + if ( (LA4_17=='B') ) { + int LA4_25 = input.LA(4); + + if ( (LA4_25=='.'||(LA4_25 >= '0' && LA4_25 <= '9')||(LA4_25 >= 'A' && LA4_25 <= 'Z')||(LA4_25 >= 'a' && LA4_25 <= 'z')) ) { + alt4=11; + } + else { + alt4=8; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + break; + case 'W': + { + int LA4_7 = input.LA(2); + + if ( (LA4_7=='R') ) { + int LA4_18 = input.LA(3); + + if ( (LA4_18=='I') ) { + int LA4_26 = input.LA(4); + + if ( (LA4_26=='T') ) { + int LA4_34 = input.LA(5); + + if ( (LA4_34=='E') ) { + int LA4_39 = input.LA(6); + + if ( (LA4_39=='_') ) { + alt4=9; + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + else { + alt4=11; + } + } + break; + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + alt4=10; + } + break; + case 'B': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'T': + case 'U': + case 'V': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt4=11; + } + break; + case '\t': + case '\n': + case '\r': + case ' ': + { + alt4=12; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 4, 0, input); + + throw nvae; + + } + + switch (alt4) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:10: T__7 + { + mT__7(); + + + } + break; + case 2 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:15: T__8 + { + mT__8(); + + + } + break; + case 3 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:20: T__9 + { + mT__9(); + + + } + break; + case 4 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:25: T__10 + { + mT__10(); + + + } + break; + case 5 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:31: T__11 + { + mT__11(); + + + } + break; + case 6 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:37: T__12 + { + mT__12(); + + + } + break; + case 7 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:43: T__13 + { + mT__13(); + + + } + break; + case 8 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:49: T__14 + { + mT__14(); + + + } + break; + case 9 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:55: T__15 + { + mT__15(); + + + } + break; + case 10 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:61: INT + { + mINT(); + + + } + break; + case 11 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:65: ID + { + mID(); + + + } + break; + case 12 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:1:68: WS + { + mWS(); + + + } + break; + + } + + } + + + + +} \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioParser.java b/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioParser.java new file mode 100644 index 0000000..d7a2960 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/tradutor/intermediario/parser/IntermediarioParser.java @@ -0,0 +1,499 @@ +// $ANTLR 3.4 C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g 2012-07-15 17:30:15 + + + package br.ufpb.iged.interpretador.tradutor.intermediario.parser; + + import java.io.IOException; + + + +import org.antlr.runtime.*; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked"}) +public abstract class IntermediarioParser extends Parser { + public static final String[] tokenNames = new String[] { + "", "", "", "", "ID", "INT", "WS", "'ADD'", "'CREATE_INT'", "'DELETE_INT'", "'DIV'", "'MULT'", "'READ_INT'", "'READ_INTC'", "'SUB'", "'WRITE_INT'" + }; + + public static final int EOF=-1; + public static final int T__7=7; + public static final int T__8=8; + public static final int T__9=9; + public static final int T__10=10; + public static final int T__11=11; + public static final int T__12=12; + public static final int T__13=13; + public static final int T__14=14; + public static final int T__15=15; + public static final int ID=4; + public static final int INT=5; + public static final int WS=6; + + // delegates + public Parser[] getDelegates() { + return new Parser[] {}; + } + + // delegators + + + public IntermediarioParser(TokenStream input) { + this(input, new RecognizerSharedState()); + } + public IntermediarioParser(TokenStream input, RecognizerSharedState state) { + super(input, state); + } + + public String[] getTokenNames() { return IntermediarioParser.tokenNames; } + public String getGrammarFileName() { return "C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g"; } + + + + protected abstract void adicionarVariavel(Token op); + protected abstract void traduzirLoad(Token opc, Token op) throws IOException; + protected abstract void traduzirStore(Token opc, Token op) throws IOException; + protected abstract void traduzirArimetica(Token opc) throws IOException; + + + + + // $ANTLR start "programa" + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:24:1: programa : ( instrucao )* ; + public final void programa() throws RecognitionException, IOException { + try { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:24:10: ( ( instrucao )* ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:24:12: ( instrucao )* + { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:24:12: ( instrucao )* + loop1: + do { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( ((LA1_0 >= 7 && LA1_0 <= 15)) ) { + alt1=1; + } + + + switch (alt1) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:24:12: instrucao + { + pushFollow(FOLLOW_instrucao_in_programa29); + instrucao(); + + state._fsp--; + + + } + break; + + default : + break loop1; + } + } while (true); + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "programa" + + + + // $ANTLR start "instrucao" + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:1: instrucao : ( create | load | store | aritmetica ) ; + public final void instrucao() throws RecognitionException, IOException { + try { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:11: ( ( create | load | store | aritmetica ) ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:13: ( create | load | store | aritmetica ) + { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:13: ( create | load | store | aritmetica ) + int alt2=4; + switch ( input.LA(1) ) { + case 8: + case 9: + { + alt2=1; + } + break; + case 12: + case 13: + { + alt2=2; + } + break; + case 15: + { + alt2=3; + } + break; + case 7: + case 10: + case 11: + case 14: + { + alt2=4; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 2, 0, input); + + throw nvae; + + } + + switch (alt2) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:14: create + { + pushFollow(FOLLOW_create_in_instrucao39); + create(); + + state._fsp--; + + + } + break; + case 2 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:23: load + { + pushFollow(FOLLOW_load_in_instrucao43); + load(); + + state._fsp--; + + + } + break; + case 3 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:30: store + { + pushFollow(FOLLOW_store_in_instrucao47); + store(); + + state._fsp--; + + + } + break; + case 4 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:26:38: aritmetica + { + pushFollow(FOLLOW_aritmetica_in_instrucao51); + aritmetica(); + + state._fsp--; + + + } + break; + + } + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "instrucao" + + + + // $ANTLR start "create" + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:28:1: create : ( 'CREATE_INT' a= ID | 'DELETE_INT' ID ); + public final void create() throws RecognitionException { + Token a=null; + + try { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:28:8: ( 'CREATE_INT' a= ID | 'DELETE_INT' ID ) + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0==8) ) { + alt3=1; + } + else if ( (LA3_0==9) ) { + alt3=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 3, 0, input); + + throw nvae; + + } + switch (alt3) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:28:10: 'CREATE_INT' a= ID + { + match(input,8,FOLLOW_8_in_create60); + + a=(Token)match(input,ID,FOLLOW_ID_in_create66); + + adicionarVariavel(a); + + } + break; + case 2 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:29:10: 'DELETE_INT' ID + { + match(input,9,FOLLOW_9_in_create79); + + match(input,ID,FOLLOW_ID_in_create81); + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "create" + + + + // $ANTLR start "load" + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:32:1: load : (a= 'READ_INT' b= ID |a= 'READ_INTC' INT ); + public final void load() throws RecognitionException, IOException { + Token a=null; + Token b=null; + Token INT1=null; + + try { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:32:6: (a= 'READ_INT' b= ID |a= 'READ_INTC' INT ) + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==12) ) { + alt4=1; + } + else if ( (LA4_0==13) ) { + alt4=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 4, 0, input); + + throw nvae; + + } + switch (alt4) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:32:8: a= 'READ_INT' b= ID + { + a=(Token)match(input,12,FOLLOW_12_in_load101); + + b=(Token)match(input,ID,FOLLOW_ID_in_load107); + + traduzirLoad(a, b); + + } + break; + case 2 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:33:8: a= 'READ_INTC' INT + { + a=(Token)match(input,13,FOLLOW_13_in_load122); + + INT1=(Token)match(input,INT,FOLLOW_INT_in_load124); + + traduzirLoad(a, INT1); + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "load" + + + + // $ANTLR start "store" + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:36:1: store : a= 'WRITE_INT' b= ID ; + public final void store() throws RecognitionException, IOException { + Token a=null; + Token b=null; + + try { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:36:7: (a= 'WRITE_INT' b= ID ) + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:36:9: a= 'WRITE_INT' b= ID + { + a=(Token)match(input,15,FOLLOW_15_in_store149); + + b=(Token)match(input,ID,FOLLOW_ID_in_store155); + + traduzirStore(a, b); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "store" + + + + // $ANTLR start "aritmetica" + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:38:1: aritmetica : (a= 'ADD' |a= 'SUB' |a= 'MULT' |a= 'DIV' ); + public final void aritmetica() throws RecognitionException, IOException { + Token a=null; + + try { + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:38:12: (a= 'ADD' |a= 'SUB' |a= 'MULT' |a= 'DIV' ) + int alt5=4; + switch ( input.LA(1) ) { + case 7: + { + alt5=1; + } + break; + case 14: + { + alt5=2; + } + break; + case 11: + { + alt5=3; + } + break; + case 10: + { + alt5=4; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 5, 0, input); + + throw nvae; + + } + + switch (alt5) { + case 1 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:38:14: a= 'ADD' + { + a=(Token)match(input,7,FOLLOW_7_in_aritmetica169); + + traduzirArimetica(a); + + } + break; + case 2 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:39:14: a= 'SUB' + { + a=(Token)match(input,14,FOLLOW_14_in_aritmetica190); + + traduzirArimetica(a); + + } + break; + case 3 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:40:14: a= 'MULT' + { + a=(Token)match(input,11,FOLLOW_11_in_aritmetica211); + + traduzirArimetica(a); + + } + break; + case 4 : + // C:\\Users\\Tiago\\git\\interpretador\\src\\br\\ufpb\\iged\\interpretador\\gramaticas\\Intermediario.g:41:14: a= 'DIV' + { + a=(Token)match(input,10,FOLLOW_10_in_aritmetica232); + + traduzirArimetica(a); + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + + finally { + // do for sure before leaving + } + return ; + } + // $ANTLR end "aritmetica" + + // Delegated rules + + + + + public static final BitSet FOLLOW_instrucao_in_programa29 = new BitSet(new long[]{0x000000000000FF82L}); + public static final BitSet FOLLOW_create_in_instrucao39 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_load_in_instrucao43 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_store_in_instrucao47 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_aritmetica_in_instrucao51 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_8_in_create60 = new BitSet(new long[]{0x0000000000000010L}); + public static final BitSet FOLLOW_ID_in_create66 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_9_in_create79 = new BitSet(new long[]{0x0000000000000010L}); + public static final BitSet FOLLOW_ID_in_create81 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_12_in_load101 = new BitSet(new long[]{0x0000000000000010L}); + public static final BitSet FOLLOW_ID_in_load107 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_13_in_load122 = new BitSet(new long[]{0x0000000000000020L}); + public static final BitSet FOLLOW_INT_in_load124 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_15_in_store149 = new BitSet(new long[]{0x0000000000000010L}); + public static final BitSet FOLLOW_ID_in_store155 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_7_in_aritmetica169 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_14_in_aritmetica190 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_11_in_aritmetica211 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_10_in_aritmetica232 = new BitSet(new long[]{0x0000000000000002L}); + +} \ No newline at end of file diff --git a/src/br/ufpb/iged/interpretador/tradutor/intermediario/principal/Main.java b/src/br/ufpb/iged/interpretador/tradutor/intermediario/principal/Main.java new file mode 100644 index 0000000..044eca1 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/tradutor/intermediario/principal/Main.java @@ -0,0 +1,53 @@ +package br.ufpb.iged.interpretador.tradutor.intermediario.principal; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import org.antlr.runtime.ANTLRInputStream; +import org.antlr.runtime.CommonTokenStream; +import org.antlr.runtime.RecognitionException; + +import br.ufpb.iged.interpretador.tradutor.intermediario.parser.IntermediarioLexer; + + +public class Main { + + public static final String NOME_ARQUIVO_ENTRADA = "codigo_intermediario.txt"; + + public static void main(String args[]) { + + try { + + InputStream entrada = new FileInputStream(NOME_ARQUIVO_ENTRADA); + + IntermediarioLexer lexer = new IntermediarioLexer( + new ANTLRInputStream(entrada)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + + TradutorIntermediario tradutor = new TradutorIntermediario(tokens); + + tradutor.programa(); + + tradutor.fecharArquivoSaida(); + + } catch (FileNotFoundException e) { + + System.out.println("O arquivo de entrada não pôde aberto"); + + } catch (IOException e) { + + System.out.println("Erro no arquivo de saída"); + + } catch (RecognitionException e) { + + System.out.println("O código contém erros e não pode ser traduzido"); + + } + + + + } + +} diff --git a/src/br/ufpb/iged/interpretador/tradutor/intermediario/principal/TradutorIntermediario.java b/src/br/ufpb/iged/interpretador/tradutor/intermediario/principal/TradutorIntermediario.java new file mode 100644 index 0000000..81270c0 --- /dev/null +++ b/src/br/ufpb/iged/interpretador/tradutor/intermediario/principal/TradutorIntermediario.java @@ -0,0 +1,155 @@ +package br.ufpb.iged.interpretador.tradutor.intermediario.principal; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; + +import br.ufpb.iged.interpretador.tradutor.intermediario.parser.IntermediarioParser; + +public class TradutorIntermediario extends IntermediarioParser{ + + private static final String ARQUIVO_SAIDA = "bytecodes.txt"; + private File file; + private FileWriter fileWriter; + private BufferedWriter bufferedWriter; + private int nextEnd = 0; + private Map variaveisMap = new HashMap(); + + public TradutorIntermediario(TokenStream input) throws IOException { + + super(input); + + file = new File(ARQUIVO_SAIDA); + + if (file.exists()) + + file.delete(); + + fileWriter = new FileWriter(file); + + bufferedWriter = new BufferedWriter(fileWriter); + + } + + @Override + protected void adicionarVariavel(Token op) { + + variaveisMap.put(op.getText(), nextEnd++); + + } + + @Override + protected void traduzirLoad(Token opc, Token op) throws IOException { + + String opcode = opc.getText(); + + String toWrite; + + if (opcode.equals("READ_INT")) { + + toWrite="iload"; + + String id = op.getText(); + + Integer endereco = variaveisMap.get(id); + + switch(endereco) { + case 0: toWrite += "_0"; break; + case 1: toWrite += "_1"; break; + case 2: toWrite += "_2"; break; + case 3: toWrite += "_3"; break; + default: toWrite += " "+endereco; break; + } + + } else { + + Integer inteiro = new Integer(op.getText()); + + if (inteiro > -2 && inteiro < 6) { + + toWrite = "iconst"; + + switch(inteiro) { + case -1: toWrite += "_m1"; break; + case 0: toWrite += "_0"; break; + case 1: toWrite += "_1"; break; + case 2: toWrite += "_2"; break; + case 3: toWrite += "_3"; break; + case 4: toWrite += "_4"; break; + case 5: toWrite += "_5"; break; + } + + } else + + toWrite = "ldc "+inteiro; + + } + + bufferedWriter.write(toWrite+"\n"); + + } + + @Override + protected void traduzirStore(Token opc, Token op) throws IOException{ + + String id = op.getText(); + + Integer endereco = variaveisMap.get(id); + + String toWrite = "istore"; + + switch(endereco) { + case 0: toWrite += "_0"; break; + case 1: toWrite += "_1"; break; + case 2: toWrite += "_2"; break; + case 3: toWrite += "_3"; break; + default: toWrite += " "+endereco; break; + } + + bufferedWriter.write(toWrite+"\n"); + + } + + @Override + protected void traduzirArimetica(Token opc) throws IOException{ + + String opcode = opc.getText(); + + String toWrite; + + if (opcode.equals("ADD")) + + toWrite = "iadd"; + + else if (opcode.equals("SUB")) + + toWrite = "isub"; + + else if (opcode.equals("MULT")) + + toWrite = "imul"; + + else + + toWrite = "idiv"; + + bufferedWriter.write(toWrite+"\n"); + + } + + + public void fecharArquivoSaida() throws IOException { + + bufferedWriter.close(); + + fileWriter.close(); + + } + +}