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();
+
+ }
+
+}