00001
00002 package plp.imperative2.parser;
00003
00004 import plp.expressions1.util.*;
00005 import plp.expressions2.expression.*;
00006 import plp.imperative1.command.*;
00007 import plp.imperative1.declaration.*;
00008 import plp.imperative1.memory.*;
00009 import plp.imperative2.*;
00010 import plp.imperative2.command.*;
00011 import plp.imperative2.declaration.*;
00012 import plp.imperative2.memory.*;
00013 import java.util.*;
00014
00015 public class Imp2Parser implements Imp2ParserConstants {
00016
00017 public static void main(String args[]) {
00018 Imp2Parser parser;
00019 ListaValor entrada = new ListaValor();
00020 if (args.length == 0) {
00021 System.out.println("Imperativa 2 PLP Parser Version 0.0.1: Reading from standard input . . .");
00022 parser = new Imp2Parser(System.in);
00023 } else{
00024 System.out.println("Imperativa 2 PLP Parser Version 0.0.1: Reading from file " + args[0] + " . . .");
00025 try {
00026 parser = new Imp2Parser(new java.io.FileInputStream(args[0]));
00027 } catch (java.io.FileNotFoundException e) {
00028 System.out.println("Java Parser Version 1.0.2: File " + args[0] + " not found.");
00029 return;
00030 }
00031
00032 List valores = new LinkedList();
00033 for(int i=1;i<args.length;i++)
00034 {
00035 String parametro = args[i];
00036
00037 try {
00038 Integer inteiro = Integer.valueOf(parametro);
00039 valores.add(new ValorInteiro(inteiro.intValue()));
00040 continue;
00041 } catch(NumberFormatException e) {
00042
00043 }
00044
00045 if(parametro.equalsIgnoreCase("true")
00046 || parametro.equalsIgnoreCase("false")) {
00047 Boolean booleano = Boolean.valueOf(parametro);
00048 valores.add(new ValorBooleano(booleano.booleanValue()));
00049 } else {
00050 valores.add(new ValorString(parametro));
00051 }
00052 }
00053 entrada = criaListaValor(valores);
00054 }
00055
00056 try {
00057 Programa programa = parser.Input();
00058 System.out.println("Imperativa 2 PLP Parser Version 0.0.1: Imperativa2 program parsed successfully.");
00059
00060 if(programa.checaTipo(new ContextoCompilacaoImperativa2(entrada))) {
00061 ListaValor saida = programa.executar(new ContextoExecucaoImperativa2(entrada));
00062 System.out.println(saida);
00063 }
00064 else {
00065 System.out.println("Erro de tipo");
00066 }
00067 } catch (Exception e) {
00068 System.out.println("Imperativa 2 PLP Parser Version 0.0.1: Encountered errors during parse.");
00069 e.printStackTrace();
00070 }
00071 }
00072
00073 public static ListaValor criaListaValor(List valores) {
00074 if(valores.size() == 0) {
00075 return new ListaValor();
00076 }
00077
00078 Valor primeiro = (Valor) valores.get(0);
00079 valores.remove(0);
00080 return new ListaValor(primeiro, criaListaValor(valores));
00081 }
00082
00083 static final public Programa Input() throws ParseException {
00084 trace_call("Input");
00085 try {
00086 Programa retorno;
00087 retorno = PPrograma();
00088 jj_consume_token(0);
00089 {if (true) return retorno;}
00090 throw new Error("Missing return statement in function");
00091 } finally {
00092 trace_return("Input");
00093 }
00094 }
00095
00096 static final public Programa PPrograma() throws ParseException {
00097 trace_call("PPrograma");
00098 try {
00099 Comando retorno;
00100 retorno = PComando();
00101 {if (true) return new Programa(retorno);}
00102 throw new Error("Missing return statement in function");
00103 } finally {
00104 trace_return("PPrograma");
00105 }
00106 }
00107
00108 static final public Comando PComando() throws ParseException {
00109 trace_call("PComando");
00110 try {
00111 Comando retorno;
00112 if (jj_2_1(2147483647)) {
00113 retorno = PSequenciaComando();
00114 } else {
00115 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00116 case COMAND_SKIP:
00117 case WHILE:
00118 case READ:
00119 case WRITE:
00120 case IF:
00121 case CALL:
00122 case IDENTIFIER:
00123 case LPAREN:
00124 case LBRACE:
00125 retorno = PComandoSimples();
00126 break;
00127 default:
00128 jj_la1[0] = jj_gen;
00129 jj_consume_token(-1);
00130 throw new ParseException();
00131 }
00132 }
00133 {if (true) return retorno;}
00134 throw new Error("Missing return statement in function");
00135 } finally {
00136 trace_return("PComando");
00137 }
00138 }
00139
00140 static final public SequenciaComando PSequenciaComando() throws ParseException {
00141 trace_call("PSequenciaComando");
00142 try {
00143 Comando c1;
00144 Comando c2;
00145 c1 = PComandoSimples();
00146 jj_consume_token(SEMICOLON);
00147 c2 = PComando();
00148 {if (true) return new SequenciaComando(c1, c2);}
00149 throw new Error("Missing return statement in function");
00150 } finally {
00151 trace_return("PSequenciaComando");
00152 }
00153 }
00154
00155 static final public IO PIO() throws ParseException {
00156 trace_call("PIO");
00157 try {
00158 IO retorno;
00159 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00160 case READ:
00161 retorno = PRead();
00162 break;
00163 case WRITE:
00164 retorno = PWrite();
00165 break;
00166 default:
00167 jj_la1[1] = jj_gen;
00168 jj_consume_token(-1);
00169 throw new ParseException();
00170 }
00171 {if (true) return retorno;}
00172 throw new Error("Missing return statement in function");
00173 } finally {
00174 trace_return("PIO");
00175 }
00176 }
00177
00178 static final public Read PRead() throws ParseException {
00179 trace_call("PRead");
00180 try {
00181 Id id;
00182 jj_consume_token(READ);
00183 jj_consume_token(LPAREN);
00184 id = PId();
00185 jj_consume_token(RPAREN);
00186 {if (true) return new Read (id);}
00187 throw new Error("Missing return statement in function");
00188 } finally {
00189 trace_return("PRead");
00190 }
00191 }
00192
00193 static final public Write PWrite() throws ParseException {
00194 trace_call("PWrite");
00195 try {
00196 Expressao exp;
00197 jj_consume_token(WRITE);
00198 jj_consume_token(LPAREN);
00199 exp = PExpressao();
00200 jj_consume_token(RPAREN);
00201 {if (true) return new Write(exp);}
00202 throw new Error("Missing return statement in function");
00203 } finally {
00204 trace_return("PWrite");
00205 }
00206 }
00207
00208 static final public IfThenElse PIfThenElse() throws ParseException {
00209 trace_call("PIfThenElse");
00210 try {
00211 Expressao expressao;
00212 Comando comandoThen;
00213 Comando comandoElse;
00214 jj_consume_token(IF);
00215 expressao = PExpressao();
00216 jj_consume_token(THEN);
00217 comandoThen = PComando();
00218 jj_consume_token(ELSE);
00219 comandoElse = PComando();
00220 {if (true) return new IfThenElse (expressao, comandoThen, comandoElse);}
00221 throw new Error("Missing return statement in function");
00222 } finally {
00223 trace_return("PIfThenElse");
00224 }
00225 }
00226
00227 static final public While PWhile() throws ParseException {
00228 trace_call("PWhile");
00229 try {
00230 Expressao expressao;
00231 Comando comando;
00232 jj_consume_token(WHILE);
00233 expressao = PExpressao();
00234 jj_consume_token(DO);
00235 comando = PComando();
00236 {if (true) return new While(expressao, comando);}
00237 throw new Error("Missing return statement in function");
00238 } finally {
00239 trace_return("PWhile");
00240 }
00241 }
00242
00243 static final public Skip PSkip() throws ParseException {
00244 trace_call("PSkip");
00245 try {
00246 jj_consume_token(COMAND_SKIP);
00247 {if (true) return new Skip();}
00248 throw new Error("Missing return statement in function");
00249 } finally {
00250 trace_return("PSkip");
00251 }
00252 }
00253
00254 static final public Atribuicao PAtribuicao() throws ParseException {
00255 trace_call("PAtribuicao");
00256 try {
00257 Id id;
00258 Expressao exp;
00259 id = PId();
00260 jj_consume_token(ATTRIB);
00261 exp = PExpressao();
00262 {if (true) return new Atribuicao(id, exp);}
00263 throw new Error("Missing return statement in function");
00264 } finally {
00265 trace_return("PAtribuicao");
00266 }
00267 }
00268
00269 static final public Id PId() throws ParseException {
00270 trace_call("PId");
00271 try {
00272 Token token;
00273 token = jj_consume_token(IDENTIFIER);
00274 {if (true) return new Id(token.toString());}
00275 throw new Error("Missing return statement in function");
00276 } finally {
00277 trace_return("PId");
00278 }
00279 }
00280
00281 static final public Valor PValorInteiro() throws ParseException {
00282 trace_call("PValorInteiro");
00283 try {
00284 Token token;
00285 token = jj_consume_token(INTEGER_LITERAL);
00286 {if (true) return new ValorInteiro(Integer.parseInt(token.toString()));}
00287 throw new Error("Missing return statement in function");
00288 } finally {
00289 trace_return("PValorInteiro");
00290 }
00291 }
00292
00293 static final public Valor PValorBooleano() throws ParseException {
00294 trace_call("PValorBooleano");
00295 try {
00296 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00297 case FALSE:
00298 jj_consume_token(FALSE);
00299 {if (true) return new ValorBooleano(false);}
00300 break;
00301 case TRUE:
00302 jj_consume_token(TRUE);
00303 {if (true) return new ValorBooleano(true);}
00304 break;
00305 default:
00306 jj_la1[2] = jj_gen;
00307 jj_consume_token(-1);
00308 throw new ParseException();
00309 }
00310 throw new Error("Missing return statement in function");
00311 } finally {
00312 trace_return("PValorBooleano");
00313 }
00314 }
00315
00316 static final public Valor PValorString() throws ParseException {
00317 trace_call("PValorString");
00318 try {
00319 Token token;
00320 token = jj_consume_token(STRING_LITERAL);
00321 String tokenStr = token.toString();
00322 tokenStr = tokenStr.substring(1,tokenStr.length()-1);
00323 {if (true) return new ValorString(tokenStr);}
00324 throw new Error("Missing return statement in function");
00325 } finally {
00326 trace_return("PValorString");
00327 }
00328 }
00329
00330 static final public Valor PValor() throws ParseException {
00331 trace_call("PValor");
00332 try {
00333 Valor retorno;
00334 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00335 case INTEGER_LITERAL:
00336 retorno = PValorInteiro();
00337 break;
00338 case TRUE:
00339 case FALSE:
00340 retorno = PValorBooleano();
00341 break;
00342 case STRING_LITERAL:
00343 retorno = PValorString();
00344 break;
00345 default:
00346 jj_la1[3] = jj_gen;
00347 jj_consume_token(-1);
00348 throw new ParseException();
00349 }
00350 {if (true) return retorno;}
00351 throw new Error("Missing return statement in function");
00352 } finally {
00353 trace_return("PValor");
00354 }
00355 }
00356
00357 static final public Expressao PExpMenos() throws ParseException {
00358 trace_call("PExpMenos");
00359 try {
00360 Expressao retorno;
00361 jj_consume_token(MINUS);
00362 retorno = PExpressao();
00363 {if (true) return new ExpMenos(retorno);}
00364 throw new Error("Missing return statement in function");
00365 } finally {
00366 trace_return("PExpMenos");
00367 }
00368 }
00369
00370 static final public Expressao PExpNot() throws ParseException {
00371 trace_call("PExpNot");
00372 try {
00373 Expressao retorno;
00374 jj_consume_token(NOT);
00375 retorno = PExpressao();
00376 {if (true) return new ExpNot(retorno);}
00377 throw new Error("Missing return statement in function");
00378 } finally {
00379 trace_return("PExpNot");
00380 }
00381 }
00382
00383 static final public Expressao PExpLength() throws ParseException {
00384 trace_call("PExpLength");
00385 try {
00386 Expressao retorno;
00387 jj_consume_token(LENGTH);
00388 retorno = PExpressao();
00389 {if (true) return new ExpLength(retorno);}
00390 throw new Error("Missing return statement in function");
00391 } finally {
00392 trace_return("PExpLength");
00393 }
00394 }
00395
00396 static final public Expressao PExpPrimaria() throws ParseException {
00397 trace_call("PExpPrimaria");
00398 try {
00399 Expressao retorno;
00400 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00401 case IDENTIFIER:
00402 retorno = PId();
00403 break;
00404 case TRUE:
00405 case FALSE:
00406 case INTEGER_LITERAL:
00407 case STRING_LITERAL:
00408 retorno = PValor();
00409 break;
00410 case LPAREN:
00411 jj_consume_token(LPAREN);
00412 retorno = PExpressao();
00413 jj_consume_token(RPAREN);
00414 break;
00415 default:
00416 jj_la1[4] = jj_gen;
00417 jj_consume_token(-1);
00418 throw new ParseException();
00419 }
00420 {if (true) return retorno;}
00421 throw new Error("Missing return statement in function");
00422 } finally {
00423 trace_return("PExpPrimaria");
00424 }
00425 }
00426
00427 static final public Expressao PExpUnaria() throws ParseException {
00428 trace_call("PExpUnaria");
00429 try {
00430 Expressao retorno;
00431 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00432 case MINUS:
00433 retorno = PExpMenos();
00434 break;
00435 case NOT:
00436 retorno = PExpNot();
00437 break;
00438 case LENGTH:
00439 retorno = PExpLength();
00440 break;
00441 default:
00442 jj_la1[5] = jj_gen;
00443 jj_consume_token(-1);
00444 throw new ParseException();
00445 }
00446 {if (true) return retorno;}
00447 throw new Error("Missing return statement in function");
00448 } finally {
00449 trace_return("PExpUnaria");
00450 }
00451 }
00452
00453 static final public Expressao PExpBinaria() throws ParseException {
00454 trace_call("PExpBinaria");
00455 try {
00456 Expressao retorno, param2;
00457 if (jj_2_2(2147483647)) {
00458 retorno = PExpConcat();
00459 } else if (jj_2_3(2147483647)) {
00460 retorno = PExpSub();
00461 } else if (jj_2_4(2147483647)) {
00462 retorno = PExpAnd();
00463 } else if (jj_2_5(2147483647)) {
00464 retorno = PExpOr();
00465 } else if (jj_2_6(2147483647)) {
00466 retorno = PExpEquals();
00467 } else {
00468 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00469 case TRUE:
00470 case FALSE:
00471 case INTEGER_LITERAL:
00472 case STRING_LITERAL:
00473 case IDENTIFIER:
00474 case LPAREN:
00475 retorno = PExpSoma();
00476 break;
00477 default:
00478 jj_la1[6] = jj_gen;
00479 jj_consume_token(-1);
00480 throw new ParseException();
00481 }
00482 }
00483 {if (true) return retorno;}
00484 throw new Error("Missing return statement in function");
00485 } finally {
00486 trace_return("PExpBinaria");
00487 }
00488 }
00489
00490 static final public ExpSoma PExpSoma() throws ParseException {
00491 trace_call("PExpSoma");
00492 try {
00493 Expressao esq;
00494 Expressao dir;
00495 esq = PExpPrimaria();
00496 jj_consume_token(PLUS);
00497 dir = PExpressao();
00498 {if (true) return new ExpSoma(esq, dir);}
00499 throw new Error("Missing return statement in function");
00500 } finally {
00501 trace_return("PExpSoma");
00502 }
00503 }
00504
00505 static final public ExpSub PExpSub() throws ParseException {
00506 trace_call("PExpSub");
00507 try {
00508 Expressao esq;
00509 Expressao dir;
00510 esq = PExpPrimaria();
00511 jj_consume_token(MINUS);
00512 dir = PExpressao();
00513 {if (true) return new ExpSub(esq, dir);}
00514 throw new Error("Missing return statement in function");
00515 } finally {
00516 trace_return("PExpSub");
00517 }
00518 }
00519
00520 static final public ExpAnd PExpAnd() throws ParseException {
00521 trace_call("PExpAnd");
00522 try {
00523 Expressao esq;
00524 Expressao dir;
00525 esq = PExpPrimaria();
00526 jj_consume_token(AND);
00527 dir = PExpressao();
00528 {if (true) return new ExpAnd(esq, dir);}
00529 throw new Error("Missing return statement in function");
00530 } finally {
00531 trace_return("PExpAnd");
00532 }
00533 }
00534
00535 static final public ExpOr PExpOr() throws ParseException {
00536 trace_call("PExpOr");
00537 try {
00538 Expressao esq;
00539 Expressao dir;
00540 esq = PExpPrimaria();
00541 jj_consume_token(OR);
00542 dir = PExpressao();
00543 {if (true) return new ExpOr(esq, dir);}
00544 throw new Error("Missing return statement in function");
00545 } finally {
00546 trace_return("PExpOr");
00547 }
00548 }
00549
00550 static final public ExpEquals PExpEquals() throws ParseException {
00551 trace_call("PExpEquals");
00552 try {
00553 Expressao esq;
00554 Expressao dir;
00555 esq = PExpPrimaria();
00556 jj_consume_token(EQ);
00557 dir = PExpressao();
00558 {if (true) return new ExpEquals(esq, dir);}
00559 throw new Error("Missing return statement in function");
00560 } finally {
00561 trace_return("PExpEquals");
00562 }
00563 }
00564
00565 static final public ExpConcat PExpConcat() throws ParseException {
00566 trace_call("PExpConcat");
00567 try {
00568 Expressao esq;
00569 Expressao dir;
00570 esq = PExpPrimaria();
00571 jj_consume_token(CONCAT);
00572 dir = PExpressao();
00573 {if (true) return new ExpConcat(esq, dir);}
00574 throw new Error("Missing return statement in function");
00575 } finally {
00576 trace_return("PExpConcat");
00577 }
00578 }
00579
00580 static final public Expressao PExpressao() throws ParseException {
00581 trace_call("PExpressao");
00582 try {
00583 Expressao retorno;
00584 if (jj_2_7(2)) {
00585 retorno = PExpUnaria();
00586 } else if (jj_2_8(2147483647)) {
00587 retorno = PExpBinaria();
00588 } else {
00589 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00590 case TRUE:
00591 case FALSE:
00592 case INTEGER_LITERAL:
00593 case STRING_LITERAL:
00594 case IDENTIFIER:
00595 case LPAREN:
00596 retorno = PExpPrimaria();
00597 break;
00598 default:
00599 jj_la1[7] = jj_gen;
00600 jj_consume_token(-1);
00601 throw new ParseException();
00602 }
00603 }
00604 {if (true) return retorno;}
00605 throw new Error("Missing return statement in function");
00606 } finally {
00607 trace_return("PExpressao");
00608 }
00609 }
00610
00611
00612 static final public Comando PComandoSimples() throws ParseException {
00613 trace_call("PComandoSimples");
00614 try {
00615 Comando retorno;
00616 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00617 case COMAND_SKIP:
00618 retorno = PSkip();
00619 break;
00620 case IDENTIFIER:
00621 retorno = PAtribuicao();
00622 break;
00623 case LBRACE:
00624 retorno = PComandoDeclaracao();
00625 break;
00626 case WHILE:
00627 retorno = PWhile();
00628 break;
00629 case IF:
00630 retorno = PIfThenElse();
00631 break;
00632 case READ:
00633 case WRITE:
00634 retorno = PIO();
00635 break;
00636 case LPAREN:
00637 jj_consume_token(LPAREN);
00638 retorno = PComando();
00639 jj_consume_token(RPAREN);
00640 break;
00641 case CALL:
00642 retorno = PChamadaProcedimento();
00643 break;
00644 default:
00645 jj_la1[8] = jj_gen;
00646 jj_consume_token(-1);
00647 throw new ParseException();
00648 }
00649 {if (true) return retorno;}
00650 throw new Error("Missing return statement in function");
00651 } finally {
00652 trace_return("PComandoSimples");
00653 }
00654 }
00655
00656 static final public ChamadaProcedimento PChamadaProcedimento() throws ParseException {
00657 trace_call("PChamadaProcedimento");
00658 try {
00659 Id nomeProcedimento;
00660 ListaExpressao parametrosAtuais;
00661 jj_consume_token(CALL);
00662 nomeProcedimento = PId();
00663 jj_consume_token(LPAREN);
00664 parametrosAtuais = PListaExpressao();
00665 jj_consume_token(RPAREN);
00666 {if (true) return new ChamadaProcedimento(nomeProcedimento, parametrosAtuais);}
00667 throw new Error("Missing return statement in function");
00668 } finally {
00669 trace_return("PChamadaProcedimento");
00670 }
00671 }
00672
00673 static final public ComandoDeclaracao PComandoDeclaracao() throws ParseException {
00674 trace_call("PComandoDeclaracao");
00675 try {
00676 Declaracao dec;
00677 Comando comando;
00678 jj_consume_token(LBRACE);
00679 dec = PDeclaracao();
00680 jj_consume_token(SEMICOLON);
00681 comando = PComando();
00682 jj_consume_token(RBRACE);
00683 {if (true) return new ComandoDeclaracao(dec, comando);}
00684 throw new Error("Missing return statement in function");
00685 } finally {
00686 trace_return("PComandoDeclaracao");
00687 }
00688 }
00689
00690 static final public Declaracao PDeclaracao() throws ParseException {
00691 trace_call("PDeclaracao");
00692 try {
00693 Declaracao retorno;
00694 if (jj_2_9(2147483647)) {
00695 retorno = PDeclaracaoComposta();
00696 } else {
00697 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00698 case VAR:
00699 retorno = PDeclaracaoVariavel();
00700 break;
00701 case PROC:
00702 retorno = PDeclaracaoProcedimento();
00703 break;
00704 case LPAREN:
00705 jj_consume_token(LPAREN);
00706 retorno = PDeclaracao();
00707 jj_consume_token(RPAREN);
00708 break;
00709 default:
00710 jj_la1[9] = jj_gen;
00711 jj_consume_token(-1);
00712 throw new ParseException();
00713 }
00714 }
00715 {if (true) return retorno;}
00716 throw new Error("Missing return statement in function");
00717 } finally {
00718 trace_return("PDeclaracao");
00719 }
00720 }
00721
00722 static final public DeclaracaoComposta PDeclaracaoComposta() throws ParseException {
00723 trace_call("PDeclaracaoComposta");
00724 try {
00725 Declaracao d1;
00726 Declaracao d2;
00727 d1 = PDeclaracaoVariavel();
00728 jj_consume_token(COMMA);
00729 d2 = PDeclaracao();
00730 {if (true) return new DeclaracaoComposta(d1, d2);}
00731 throw new Error("Missing return statement in function");
00732 } finally {
00733 trace_return("PDeclaracaoComposta");
00734 }
00735 }
00736
00737 static final public DeclaracaoProcedimento PDeclaracaoProcedimento() throws ParseException {
00738 trace_call("PDeclaracaoProcedimento");
00739 try {
00740 Id nome;
00741 DefProcedimento defProcedimento;
00742 if (jj_2_10(2147483647)) {
00743 jj_consume_token(PROC);
00744 nome = PId();
00745 jj_consume_token(LPAREN);
00746 jj_consume_token(RPAREN);
00747 defProcedimento = PDefProcedimento();
00748 } else {
00749 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00750 case PROC:
00751 jj_consume_token(PROC);
00752 nome = PId();
00753 jj_consume_token(LPAREN);
00754 defProcedimento = PDefProcedimento();
00755 break;
00756 default:
00757 jj_la1[10] = jj_gen;
00758 jj_consume_token(-1);
00759 throw new ParseException();
00760 }
00761 }
00762 {if (true) return new DeclaracaoProcedimento (nome, defProcedimento);}
00763 throw new Error("Missing return statement in function");
00764 } finally {
00765 trace_return("PDeclaracaoProcedimento");
00766 }
00767 }
00768
00769 static final public DefProcedimento PDefProcedimento() throws ParseException {
00770 trace_call("PDefProcedimento");
00771 try {
00772 ListaDeclaracaoParametro listaPar = null;
00773 Comando comando;
00774 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00775 case LBRACE:
00776 jj_consume_token(LBRACE);
00777 comando = PComando();
00778 jj_consume_token(RBRACE);
00779 break;
00780 case INT:
00781 case BOOLEAN:
00782 case STRING:
00783 case RPAREN:
00784 case COMMA:
00785 listaPar = PListaDeclaracaoParametro();
00786 jj_consume_token(RPAREN);
00787 jj_consume_token(LBRACE);
00788 comando = PComando();
00789 jj_consume_token(RBRACE);
00790 break;
00791 default:
00792 jj_la1[11] = jj_gen;
00793 jj_consume_token(-1);
00794 throw new ParseException();
00795 }
00796 if(listaPar == null) {
00797 listaPar = new ListaDeclaracaoParametro();
00798 }
00799 {if (true) return new DefProcedimento (listaPar, comando);}
00800 throw new Error("Missing return statement in function");
00801 } finally {
00802 trace_return("PDefProcedimento");
00803 }
00804 }
00805
00806 static final public Tipo PTipo() throws ParseException {
00807 trace_call("PTipo");
00808 try {
00809 Tipo tipo;
00810 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00811 case INT:
00812 jj_consume_token(INT);
00813 tipo = Tipo.TIPO_INTEIRO;
00814 break;
00815 case BOOLEAN:
00816 jj_consume_token(BOOLEAN);
00817 tipo = Tipo.TIPO_BOOLEANO;
00818 break;
00819 case STRING:
00820 jj_consume_token(STRING);
00821 tipo = Tipo.TIPO_STRING;
00822 break;
00823 default:
00824 jj_la1[12] = jj_gen;
00825 jj_consume_token(-1);
00826 throw new ParseException();
00827 }
00828 {if (true) return tipo;}
00829 throw new Error("Missing return statement in function");
00830 } finally {
00831 trace_return("PTipo");
00832 }
00833 }
00834
00835 static final public ListaDeclaracaoParametro PListaDeclaracaoParametro() throws ParseException {
00836 trace_call("PListaDeclaracaoParametro");
00837 try {
00838 Id id;
00839 Tipo tipo;
00840 ListaDeclaracaoParametro lista = null;
00841 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00842 case INT:
00843 case BOOLEAN:
00844 case STRING:
00845 tipo = PTipo();
00846 id = PId();
00847 lista = new ListaDeclaracaoParametro(new DeclaracaoParametro(id, tipo));
00848 break;
00849 default:
00850 jj_la1[13] = jj_gen;
00851 ;
00852 }
00853 label_1:
00854 while (true) {
00855 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00856 case COMMA:
00857 ;
00858 break;
00859 default:
00860 jj_la1[14] = jj_gen;
00861 break label_1;
00862 }
00863 jj_consume_token(COMMA);
00864 tipo = PTipo();
00865 id = PId();
00866 lista = new ListaDeclaracaoParametro(new DeclaracaoParametro(id, tipo), lista);
00867 }
00868 if (lista == null) {
00869 lista = new ListaDeclaracaoParametro();
00870 }
00871 {if (true) return lista;}
00872 throw new Error("Missing return statement in function");
00873 } finally {
00874 trace_return("PListaDeclaracaoParametro");
00875 }
00876 }
00877
00878 static final public ListaExpressao PListaExpressao() throws ParseException {
00879 trace_call("PListaExpressao");
00880 try {
00881 Expressao exp;
00882 ListaExpressao lista = null;
00883 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00884 case NOT:
00885 case LENGTH:
00886 case TRUE:
00887 case FALSE:
00888 case INTEGER_LITERAL:
00889 case STRING_LITERAL:
00890 case IDENTIFIER:
00891 case LPAREN:
00892 case MINUS:
00893 exp = PExpressao();
00894 lista = new ListaExpressao(exp);
00895 break;
00896 default:
00897 jj_la1[15] = jj_gen;
00898 ;
00899 }
00900 label_2:
00901 while (true) {
00902 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00903 case COMMA:
00904 ;
00905 break;
00906 default:
00907 jj_la1[16] = jj_gen;
00908 break label_2;
00909 }
00910 jj_consume_token(COMMA);
00911 exp = PExpressao();
00912 lista = new ListaExpressao(exp, lista);
00913 }
00914 if (lista == null) {
00915 lista = new ListaExpressao();
00916 }
00917 {if (true) return lista;}
00918 throw new Error("Missing return statement in function");
00919 } finally {
00920 trace_return("PListaExpressao");
00921 }
00922 }
00923
00924 static final public DeclaracaoVariavel PDeclaracaoVariavel() throws ParseException {
00925 trace_call("PDeclaracaoVariavel");
00926 try {
00927 Id id;
00928 Expressao exp;
00929 DeclaracaoVariavel retorno;
00930 jj_consume_token(VAR);
00931 id = PId();
00932 jj_consume_token(ASSIGN);
00933 exp = PValor();
00934 retorno = new DeclaracaoVariavel(id, exp);
00935 {if (true) return retorno;}
00936 throw new Error("Missing return statement in function");
00937 } finally {
00938 trace_return("PDeclaracaoVariavel");
00939 }
00940 }
00941
00942 static final private boolean jj_2_1(int xla) {
00943 jj_la = xla; jj_lastpos = jj_scanpos = token;
00944 try { return !jj_3_1(); }
00945 catch(LookaheadSuccess ls) { return true; }
00946 finally { jj_save(0, xla); }
00947 }
00948
00949 static final private boolean jj_2_2(int xla) {
00950 jj_la = xla; jj_lastpos = jj_scanpos = token;
00951 try { return !jj_3_2(); }
00952 catch(LookaheadSuccess ls) { return true; }
00953 finally { jj_save(1, xla); }
00954 }
00955
00956 static final private boolean jj_2_3(int xla) {
00957 jj_la = xla; jj_lastpos = jj_scanpos = token;
00958 try { return !jj_3_3(); }
00959 catch(LookaheadSuccess ls) { return true; }
00960 finally { jj_save(2, xla); }
00961 }
00962
00963 static final private boolean jj_2_4(int xla) {
00964 jj_la = xla; jj_lastpos = jj_scanpos = token;
00965 try { return !jj_3_4(); }
00966 catch(LookaheadSuccess ls) { return true; }
00967 finally { jj_save(3, xla); }
00968 }
00969
00970 static final private boolean jj_2_5(int xla) {
00971 jj_la = xla; jj_lastpos = jj_scanpos = token;
00972 try { return !jj_3_5(); }
00973 catch(LookaheadSuccess ls) { return true; }
00974 finally { jj_save(4, xla); }
00975 }
00976
00977 static final private boolean jj_2_6(int xla) {
00978 jj_la = xla; jj_lastpos = jj_scanpos = token;
00979 try { return !jj_3_6(); }
00980 catch(LookaheadSuccess ls) { return true; }
00981 finally { jj_save(5, xla); }
00982 }
00983
00984 static final private boolean jj_2_7(int xla) {
00985 jj_la = xla; jj_lastpos = jj_scanpos = token;
00986 try { return !jj_3_7(); }
00987 catch(LookaheadSuccess ls) { return true; }
00988 finally { jj_save(6, xla); }
00989 }
00990
00991 static final private boolean jj_2_8(int xla) {
00992 jj_la = xla; jj_lastpos = jj_scanpos = token;
00993 try { return !jj_3_8(); }
00994 catch(LookaheadSuccess ls) { return true; }
00995 finally { jj_save(7, xla); }
00996 }
00997
00998 static final private boolean jj_2_9(int xla) {
00999 jj_la = xla; jj_lastpos = jj_scanpos = token;
01000 try { return !jj_3_9(); }
01001 catch(LookaheadSuccess ls) { return true; }
01002 finally { jj_save(8, xla); }
01003 }
01004
01005 static final private boolean jj_2_10(int xla) {
01006 jj_la = xla; jj_lastpos = jj_scanpos = token;
01007 try { return !jj_3_10(); }
01008 catch(LookaheadSuccess ls) { return true; }
01009 finally { jj_save(9, xla); }
01010 }
01011
01012 static final private boolean jj_3R_23() {
01013 if (jj_scan_token(COMAND_SKIP)) return true;
01014 return false;
01015 }
01016
01017 static final private boolean jj_3R_86() {
01018 if (jj_scan_token(STRING)) return true;
01019 return false;
01020 }
01021
01022 static final private boolean jj_3R_85() {
01023 if (jj_scan_token(BOOLEAN)) return true;
01024 return false;
01025 }
01026
01027 static final private boolean jj_3R_84() {
01028 if (jj_scan_token(INT)) return true;
01029 return false;
01030 }
01031
01032 static final private boolean jj_3R_72() {
01033 if (jj_3R_4()) return true;
01034 if (jj_scan_token(MINUS)) return true;
01035 if (jj_3R_31()) return true;
01036 return false;
01037 }
01038
01039 static final private boolean jj_3R_83() {
01040 Token xsp;
01041 xsp = jj_scanpos;
01042 if (jj_3R_84()) {
01043 jj_scanpos = xsp;
01044 if (jj_3R_85()) {
01045 jj_scanpos = xsp;
01046 if (jj_3R_86()) return true;
01047 }
01048 }
01049 return false;
01050 }
01051
01052 static final private boolean jj_3R_26() {
01053 if (jj_scan_token(WHILE)) return true;
01054 if (jj_3R_31()) return true;
01055 if (jj_scan_token(DO)) return true;
01056 if (jj_3R_29()) return true;
01057 return false;
01058 }
01059
01060 static final private boolean jj_3_6() {
01061 if (jj_3R_4()) return true;
01062 if (jj_scan_token(EQ)) return true;
01063 return false;
01064 }
01065
01066 static final private boolean jj_3R_79() {
01067 if (jj_3R_80()) return true;
01068 if (jj_scan_token(RPAREN)) return true;
01069 if (jj_scan_token(LBRACE)) return true;
01070 if (jj_3R_29()) return true;
01071 if (jj_scan_token(RBRACE)) return true;
01072 return false;
01073 }
01074
01075 static final private boolean jj_3_5() {
01076 if (jj_3R_4()) return true;
01077 if (jj_scan_token(OR)) return true;
01078 return false;
01079 }
01080
01081 static final private boolean jj_3R_78() {
01082 if (jj_scan_token(LBRACE)) return true;
01083 if (jj_3R_29()) return true;
01084 if (jj_scan_token(RBRACE)) return true;
01085 return false;
01086 }
01087
01088 static final private boolean jj_3_4() {
01089 if (jj_3R_4()) return true;
01090 if (jj_scan_token(AND)) return true;
01091 return false;
01092 }
01093
01094 static final private boolean jj_3R_76() {
01095 if (jj_3R_4()) return true;
01096 if (jj_scan_token(PLUS)) return true;
01097 if (jj_3R_31()) return true;
01098 return false;
01099 }
01100
01101 static final private boolean jj_3_3() {
01102 if (jj_3R_4()) return true;
01103 if (jj_scan_token(MINUS)) return true;
01104 return false;
01105 }
01106
01107 static final private boolean jj_3_2() {
01108 if (jj_3R_4()) return true;
01109 if (jj_scan_token(CONCAT)) return true;
01110 return false;
01111 }
01112
01113 static final private boolean jj_3R_68() {
01114 if (jj_3R_76()) return true;
01115 return false;
01116 }
01117
01118 static final private boolean jj_3R_67() {
01119 if (jj_3R_75()) return true;
01120 return false;
01121 }
01122
01123 static final private boolean jj_3R_27() {
01124 if (jj_scan_token(IF)) return true;
01125 if (jj_3R_31()) return true;
01126 if (jj_scan_token(THEN)) return true;
01127 if (jj_3R_29()) return true;
01128 if (jj_scan_token(ELSE)) return true;
01129 if (jj_3R_29()) return true;
01130 return false;
01131 }
01132
01133 static final private boolean jj_3R_66() {
01134 if (jj_3R_74()) return true;
01135 return false;
01136 }
01137
01138 static final private boolean jj_3R_65() {
01139 if (jj_3R_73()) return true;
01140 return false;
01141 }
01142
01143 static final private boolean jj_3R_77() {
01144 Token xsp;
01145 xsp = jj_scanpos;
01146 if (jj_3R_78()) {
01147 jj_scanpos = xsp;
01148 if (jj_3R_79()) return true;
01149 }
01150 return false;
01151 }
01152
01153 static final private boolean jj_3R_64() {
01154 if (jj_3R_72()) return true;
01155 return false;
01156 }
01157
01158 static final private boolean jj_3R_63() {
01159 if (jj_3R_71()) return true;
01160 return false;
01161 }
01162
01163 static final private boolean jj_3_10() {
01164 if (jj_scan_token(PROC)) return true;
01165 if (jj_3R_7()) return true;
01166 if (jj_scan_token(LPAREN)) return true;
01167 if (jj_scan_token(RPAREN)) return true;
01168 return false;
01169 }
01170
01171 static final private boolean jj_3R_54() {
01172 if (jj_scan_token(WRITE)) return true;
01173 if (jj_scan_token(LPAREN)) return true;
01174 if (jj_3R_31()) return true;
01175 if (jj_scan_token(RPAREN)) return true;
01176 return false;
01177 }
01178
01179 static final private boolean jj_3R_70() {
01180 if (jj_scan_token(PROC)) return true;
01181 if (jj_3R_7()) return true;
01182 if (jj_scan_token(LPAREN)) return true;
01183 if (jj_3R_77()) return true;
01184 return false;
01185 }
01186
01187 static final private boolean jj_3R_69() {
01188 if (jj_scan_token(PROC)) return true;
01189 if (jj_3R_7()) return true;
01190 if (jj_scan_token(LPAREN)) return true;
01191 if (jj_scan_token(RPAREN)) return true;
01192 if (jj_3R_77()) return true;
01193 return false;
01194 }
01195
01196 static final private boolean jj_3R_58() {
01197 Token xsp;
01198 xsp = jj_scanpos;
01199 if (jj_3R_63()) {
01200 jj_scanpos = xsp;
01201 if (jj_3R_64()) {
01202 jj_scanpos = xsp;
01203 if (jj_3R_65()) {
01204 jj_scanpos = xsp;
01205 if (jj_3R_66()) {
01206 jj_scanpos = xsp;
01207 if (jj_3R_67()) {
01208 jj_scanpos = xsp;
01209 if (jj_3R_68()) return true;
01210 }
01211 }
01212 }
01213 }
01214 }
01215 return false;
01216 }
01217
01218 static final private boolean jj_3R_62() {
01219 Token xsp;
01220 xsp = jj_scanpos;
01221 if (jj_3R_69()) {
01222 jj_scanpos = xsp;
01223 if (jj_3R_70()) return true;
01224 }
01225 return false;
01226 }
01227
01228 static final private boolean jj_3R_40() {
01229 if (jj_3R_54()) return true;
01230 return false;
01231 }
01232
01233 static final private boolean jj_3R_53() {
01234 if (jj_scan_token(READ)) return true;
01235 if (jj_scan_token(LPAREN)) return true;
01236 if (jj_3R_7()) return true;
01237 if (jj_scan_token(RPAREN)) return true;
01238 return false;
01239 }
01240
01241 static final private boolean jj_3_9() {
01242 if (jj_3R_6()) return true;
01243 if (jj_scan_token(COMMA)) return true;
01244 return false;
01245 }
01246
01247 static final private boolean jj_3R_39() {
01248 if (jj_3R_53()) return true;
01249 return false;
01250 }
01251
01252 static final private boolean jj_3R_21() {
01253 if (jj_3R_34()) return true;
01254 return false;
01255 }
01256
01257 static final private boolean jj_3R_61() {
01258 if (jj_3R_6()) return true;
01259 if (jj_scan_token(COMMA)) return true;
01260 if (jj_3R_38()) return true;
01261 return false;
01262 }
01263
01264 static final private boolean jj_3R_51() {
01265 if (jj_3R_62()) return true;
01266 return false;
01267 }
01268
01269 static final private boolean jj_3R_20() {
01270 if (jj_3R_33()) return true;
01271 return false;
01272 }
01273
01274 static final private boolean jj_3R_50() {
01275 if (jj_3R_6()) return true;
01276 return false;
01277 }
01278
01279 static final private boolean jj_3R_19() {
01280 if (jj_3R_32()) return true;
01281 return false;
01282 }
01283
01284 static final private boolean jj_3R_49() {
01285 if (jj_3R_61()) return true;
01286 return false;
01287 }
01288
01289 static final private boolean jj_3R_5() {
01290 Token xsp;
01291 xsp = jj_scanpos;
01292 if (jj_3R_19()) {
01293 jj_scanpos = xsp;
01294 if (jj_3R_20()) {
01295 jj_scanpos = xsp;
01296 if (jj_3R_21()) return true;
01297 }
01298 }
01299 return false;
01300 }
01301
01302 static final private boolean jj_3R_28() {
01303 Token xsp;
01304 xsp = jj_scanpos;
01305 if (jj_3R_39()) {
01306 jj_scanpos = xsp;
01307 if (jj_3R_40()) return true;
01308 }
01309 return false;
01310 }
01311
01312 static final private boolean jj_3R_52() {
01313 if (jj_scan_token(LPAREN)) return true;
01314 if (jj_3R_38()) return true;
01315 if (jj_scan_token(RPAREN)) return true;
01316 return false;
01317 }
01318
01319 static final private boolean jj_3R_18() {
01320 if (jj_scan_token(LPAREN)) return true;
01321 if (jj_3R_31()) return true;
01322 if (jj_scan_token(RPAREN)) return true;
01323 return false;
01324 }
01325
01326 static final private boolean jj_3R_17() {
01327 if (jj_3R_22()) return true;
01328 return false;
01329 }
01330
01331 static final private boolean jj_3R_38() {
01332 Token xsp;
01333 xsp = jj_scanpos;
01334 if (jj_3R_49()) {
01335 jj_scanpos = xsp;
01336 if (jj_3R_50()) {
01337 jj_scanpos = xsp;
01338 if (jj_3R_51()) {
01339 jj_scanpos = xsp;
01340 if (jj_3R_52()) return true;
01341 }
01342 }
01343 }
01344 return false;
01345 }
01346
01347 static final private boolean jj_3R_16() {
01348 if (jj_3R_7()) return true;
01349 return false;
01350 }
01351
01352 static final private boolean jj_3R_55() {
01353 if (jj_3R_3()) return true;
01354 if (jj_scan_token(SEMICOLON)) return true;
01355 if (jj_3R_29()) return true;
01356 return false;
01357 }
01358
01359 static final private boolean jj_3_1() {
01360 if (jj_3R_3()) return true;
01361 if (jj_scan_token(SEMICOLON)) return true;
01362 return false;
01363 }
01364
01365 static final private boolean jj_3R_4() {
01366 Token xsp;
01367 xsp = jj_scanpos;
01368 if (jj_3R_16()) {
01369 jj_scanpos = xsp;
01370 if (jj_3R_17()) {
01371 jj_scanpos = xsp;
01372 if (jj_3R_18()) return true;
01373 }
01374 }
01375 return false;
01376 }
01377
01378 static final private boolean jj_3R_25() {
01379 if (jj_scan_token(LBRACE)) return true;
01380 if (jj_3R_38()) return true;
01381 if (jj_scan_token(SEMICOLON)) return true;
01382 if (jj_3R_29()) return true;
01383 if (jj_scan_token(RBRACE)) return true;
01384 return false;
01385 }
01386
01387 static final private boolean jj_3R_42() {
01388 if (jj_3R_3()) return true;
01389 return false;
01390 }
01391
01392 static final private boolean jj_3R_41() {
01393 if (jj_3R_55()) return true;
01394 return false;
01395 }
01396
01397 static final private boolean jj_3R_34() {
01398 if (jj_scan_token(LENGTH)) return true;
01399 if (jj_3R_31()) return true;
01400 return false;
01401 }
01402
01403 static final private boolean jj_3R_29() {
01404 Token xsp;
01405 xsp = jj_scanpos;
01406 if (jj_3R_41()) {
01407 jj_scanpos = xsp;
01408 if (jj_3R_42()) return true;
01409 }
01410 return false;
01411 }
01412
01413 static final private boolean jj_3R_30() {
01414 if (jj_scan_token(CALL)) return true;
01415 if (jj_3R_7()) return true;
01416 if (jj_scan_token(LPAREN)) return true;
01417 if (jj_3R_43()) return true;
01418 if (jj_scan_token(RPAREN)) return true;
01419 return false;
01420 }
01421
01422 static final private boolean jj_3R_57() {
01423 if (jj_scan_token(COMMA)) return true;
01424 if (jj_3R_31()) return true;
01425 return false;
01426 }
01427
01428 static final private boolean jj_3R_33() {
01429 if (jj_scan_token(NOT)) return true;
01430 if (jj_3R_31()) return true;
01431 return false;
01432 }
01433
01434 static final private boolean jj_3R_15() {
01435 if (jj_3R_30()) return true;
01436 return false;
01437 }
01438
01439 static final private boolean jj_3R_32() {
01440 if (jj_scan_token(MINUS)) return true;
01441 if (jj_3R_31()) return true;
01442 return false;
01443 }
01444
01445 static final private boolean jj_3R_14() {
01446 if (jj_scan_token(LPAREN)) return true;
01447 if (jj_3R_29()) return true;
01448 if (jj_scan_token(RPAREN)) return true;
01449 return false;
01450 }
01451
01452 static final private boolean jj_3R_13() {
01453 if (jj_3R_28()) return true;
01454 return false;
01455 }
01456
01457 static final private boolean jj_3R_12() {
01458 if (jj_3R_27()) return true;
01459 return false;
01460 }
01461
01462 static final private boolean jj_3R_37() {
01463 if (jj_3R_48()) return true;
01464 return false;
01465 }
01466
01467 static final private boolean jj_3R_11() {
01468 if (jj_3R_26()) return true;
01469 return false;
01470 }
01471
01472 static final private boolean jj_3R_36() {
01473 if (jj_3R_47()) return true;
01474 return false;
01475 }
01476
01477 static final private boolean jj_3R_10() {
01478 if (jj_3R_25()) return true;
01479 return false;
01480 }
01481
01482 static final private boolean jj_3R_9() {
01483 if (jj_3R_24()) return true;
01484 return false;
01485 }
01486
01487 static final private boolean jj_3R_8() {
01488 if (jj_3R_23()) return true;
01489 return false;
01490 }
01491
01492 static final private boolean jj_3_8() {
01493 if (jj_3R_4()) return true;
01494 Token xsp;
01495 xsp = jj_scanpos;
01496 if (jj_scan_token(10)) {
01497 jj_scanpos = xsp;
01498 if (jj_scan_token(9)) {
01499 jj_scanpos = xsp;
01500 if (jj_scan_token(62)) {
01501 jj_scanpos = xsp;
01502 if (jj_scan_token(61)) {
01503 jj_scanpos = xsp;
01504 if (jj_scan_token(54)) return true;
01505 }
01506 }
01507 }
01508 }
01509 return false;
01510 }
01511
01512 static final private boolean jj_3R_3() {
01513 Token xsp;
01514 xsp = jj_scanpos;
01515 if (jj_3R_8()) {
01516 jj_scanpos = xsp;
01517 if (jj_3R_9()) {
01518 jj_scanpos = xsp;
01519 if (jj_3R_10()) {
01520 jj_scanpos = xsp;
01521 if (jj_3R_11()) {
01522 jj_scanpos = xsp;
01523 if (jj_3R_12()) {
01524 jj_scanpos = xsp;
01525 if (jj_3R_13()) {
01526 jj_scanpos = xsp;
01527 if (jj_3R_14()) {
01528 jj_scanpos = xsp;
01529 if (jj_3R_15()) return true;
01530 }
01531 }
01532 }
01533 }
01534 }
01535 }
01536 }
01537 return false;
01538 }
01539
01540 static final private boolean jj_3R_35() {
01541 if (jj_3R_46()) return true;
01542 return false;
01543 }
01544
01545 static final private boolean jj_3R_22() {
01546 Token xsp;
01547 xsp = jj_scanpos;
01548 if (jj_3R_35()) {
01549 jj_scanpos = xsp;
01550 if (jj_3R_36()) {
01551 jj_scanpos = xsp;
01552 if (jj_3R_37()) return true;
01553 }
01554 }
01555 return false;
01556 }
01557
01558 static final private boolean jj_3R_45() {
01559 if (jj_3R_4()) return true;
01560 return false;
01561 }
01562
01563 static final private boolean jj_3R_44() {
01564 if (jj_3R_58()) return true;
01565 return false;
01566 }
01567
01568 static final private boolean jj_3_7() {
01569 if (jj_3R_5()) return true;
01570 return false;
01571 }
01572
01573 static final private boolean jj_3R_31() {
01574 Token xsp;
01575 xsp = jj_scanpos;
01576 if (jj_3_7()) {
01577 jj_scanpos = xsp;
01578 if (jj_3R_44()) {
01579 jj_scanpos = xsp;
01580 if (jj_3R_45()) return true;
01581 }
01582 }
01583 return false;
01584 }
01585
01586 static final private boolean jj_3R_48() {
01587 if (jj_scan_token(STRING_LITERAL)) return true;
01588 return false;
01589 }
01590
01591 static final private boolean jj_3R_6() {
01592 if (jj_scan_token(VAR)) return true;
01593 if (jj_3R_7()) return true;
01594 if (jj_scan_token(ASSIGN)) return true;
01595 if (jj_3R_22()) return true;
01596 return false;
01597 }
01598
01599 static final private boolean jj_3R_60() {
01600 if (jj_scan_token(TRUE)) return true;
01601 return false;
01602 }
01603
01604 static final private boolean jj_3R_47() {
01605 Token xsp;
01606 xsp = jj_scanpos;
01607 if (jj_3R_59()) {
01608 jj_scanpos = xsp;
01609 if (jj_3R_60()) return true;
01610 }
01611 return false;
01612 }
01613
01614 static final private boolean jj_3R_59() {
01615 if (jj_scan_token(FALSE)) return true;
01616 return false;
01617 }
01618
01619 static final private boolean jj_3R_71() {
01620 if (jj_3R_4()) return true;
01621 if (jj_scan_token(CONCAT)) return true;
01622 if (jj_3R_31()) return true;
01623 return false;
01624 }
01625
01626 static final private boolean jj_3R_46() {
01627 if (jj_scan_token(INTEGER_LITERAL)) return true;
01628 return false;
01629 }
01630
01631 static final private boolean jj_3R_56() {
01632 if (jj_3R_31()) return true;
01633 return false;
01634 }
01635
01636 static final private boolean jj_3R_43() {
01637 Token xsp;
01638 xsp = jj_scanpos;
01639 if (jj_3R_56()) jj_scanpos = xsp;
01640 while (true) {
01641 xsp = jj_scanpos;
01642 if (jj_3R_57()) { jj_scanpos = xsp; break; }
01643 }
01644 return false;
01645 }
01646
01647 static final private boolean jj_3R_75() {
01648 if (jj_3R_4()) return true;
01649 if (jj_scan_token(EQ)) return true;
01650 if (jj_3R_31()) return true;
01651 return false;
01652 }
01653
01654 static final private boolean jj_3R_7() {
01655 if (jj_scan_token(IDENTIFIER)) return true;
01656 return false;
01657 }
01658
01659 static final private boolean jj_3R_74() {
01660 if (jj_3R_4()) return true;
01661 if (jj_scan_token(OR)) return true;
01662 if (jj_3R_31()) return true;
01663 return false;
01664 }
01665
01666 static final private boolean jj_3R_82() {
01667 if (jj_scan_token(COMMA)) return true;
01668 if (jj_3R_83()) return true;
01669 if (jj_3R_7()) return true;
01670 return false;
01671 }
01672
01673 static final private boolean jj_3R_81() {
01674 if (jj_3R_83()) return true;
01675 if (jj_3R_7()) return true;
01676 return false;
01677 }
01678
01679 static final private boolean jj_3R_24() {
01680 if (jj_3R_7()) return true;
01681 if (jj_scan_token(ATTRIB)) return true;
01682 if (jj_3R_31()) return true;
01683 return false;
01684 }
01685
01686 static final private boolean jj_3R_80() {
01687 Token xsp;
01688 xsp = jj_scanpos;
01689 if (jj_3R_81()) jj_scanpos = xsp;
01690 while (true) {
01691 xsp = jj_scanpos;
01692 if (jj_3R_82()) { jj_scanpos = xsp; break; }
01693 }
01694 return false;
01695 }
01696
01697 static final private boolean jj_3R_73() {
01698 if (jj_3R_4()) return true;
01699 if (jj_scan_token(AND)) return true;
01700 if (jj_3R_31()) return true;
01701 return false;
01702 }
01703
01704 static private boolean jj_initialized_once = false;
01705 static public Imp2ParserTokenManager token_source;
01706 static JavaCharStream jj_input_stream;
01707 static public Token token, jj_nt;
01708 static private int jj_ntk;
01709 static private Token jj_scanpos, jj_lastpos;
01710 static private int jj_la;
01711 static public boolean lookingAhead = false;
01712 static private boolean jj_semLA;
01713 static private int jj_gen;
01714 static final private int[] jj_la1 = new int[17];
01715 static private int[] jj_la1_0;
01716 static private int[] jj_la1_1;
01717 static private int[] jj_la1_2;
01718 static {
01719 jj_la1_0();
01720 jj_la1_1();
01721 jj_la1_2();
01722 }
01723 private static void jj_la1_0() {
01724 jj_la1_0 = new int[] {0x23b0000,0x180000,0x6000,0x20006000,0x20006000,0x1800,0x20006000,0x20006000,0x23b0000,0x1008000,0x1000000,0x1c000000,0x1c000000,0x1c000000,0x0,0x20007800,0x0,};
01725 }
01726 private static void jj_la1_1() {
01727 jj_la1_1 = new int[] {0xa4,0x0,0x0,0x2,0x26,0x40000000,0x26,0x26,0xa4,0x20,0x0,0x10c0,0x0,0x0,0x1000,0x40000026,0x1000,};
01728 }
01729 private static void jj_la1_2() {
01730 jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
01731 }
01732 static final private JJCalls[] jj_2_rtns = new JJCalls[10];
01733 static private boolean jj_rescan = false;
01734 static private int jj_gc = 0;
01735
01736 public Imp2Parser(java.io.InputStream stream) {
01737 this(stream, null);
01738 }
01739 public Imp2Parser(java.io.InputStream stream, String encoding) {
01740 if (jj_initialized_once) {
01741 System.out.println("ERROR: Second call to constructor of static parser. You must");
01742 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false");
01743 System.out.println(" during parser generation.");
01744 throw new Error();
01745 }
01746 jj_initialized_once = true;
01747 try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
01748 token_source = new Imp2ParserTokenManager(jj_input_stream);
01749 token = new Token();
01750 jj_ntk = -1;
01751 jj_gen = 0;
01752 for (int i = 0; i < 17; i++) jj_la1[i] = -1;
01753 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01754 }
01755
01756 static public void ReInit(java.io.InputStream stream) {
01757 ReInit(stream, null);
01758 }
01759 static public void ReInit(java.io.InputStream stream, String encoding) {
01760 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
01761 token_source.ReInit(jj_input_stream);
01762 token = new Token();
01763 jj_ntk = -1;
01764 jj_gen = 0;
01765 for (int i = 0; i < 17; i++) jj_la1[i] = -1;
01766 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01767 }
01768
01769 public Imp2Parser(java.io.Reader stream) {
01770 if (jj_initialized_once) {
01771 System.out.println("ERROR: Second call to constructor of static parser. You must");
01772 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false");
01773 System.out.println(" during parser generation.");
01774 throw new Error();
01775 }
01776 jj_initialized_once = true;
01777 jj_input_stream = new JavaCharStream(stream, 1, 1);
01778 token_source = new Imp2ParserTokenManager(jj_input_stream);
01779 token = new Token();
01780 jj_ntk = -1;
01781 jj_gen = 0;
01782 for (int i = 0; i < 17; i++) jj_la1[i] = -1;
01783 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01784 }
01785
01786 static public void ReInit(java.io.Reader stream) {
01787 jj_input_stream.ReInit(stream, 1, 1);
01788 token_source.ReInit(jj_input_stream);
01789 token = new Token();
01790 jj_ntk = -1;
01791 jj_gen = 0;
01792 for (int i = 0; i < 17; i++) jj_la1[i] = -1;
01793 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01794 }
01795
01796 public Imp2Parser(Imp2ParserTokenManager tm) {
01797 if (jj_initialized_once) {
01798 System.out.println("ERROR: Second call to constructor of static parser. You must");
01799 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false");
01800 System.out.println(" during parser generation.");
01801 throw new Error();
01802 }
01803 jj_initialized_once = true;
01804 token_source = tm;
01805 token = new Token();
01806 jj_ntk = -1;
01807 jj_gen = 0;
01808 for (int i = 0; i < 17; i++) jj_la1[i] = -1;
01809 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01810 }
01811
01812 public void ReInit(Imp2ParserTokenManager tm) {
01813 token_source = tm;
01814 token = new Token();
01815 jj_ntk = -1;
01816 jj_gen = 0;
01817 for (int i = 0; i < 17; i++) jj_la1[i] = -1;
01818 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01819 }
01820
01821 static final private Token jj_consume_token(int kind) throws ParseException {
01822 Token oldToken;
01823 if ((oldToken = token).next != null) token = token.next;
01824 else token = token.next = token_source.getNextToken();
01825 jj_ntk = -1;
01826 if (token.kind == kind) {
01827 jj_gen++;
01828 if (++jj_gc > 100) {
01829 jj_gc = 0;
01830 for (int i = 0; i < jj_2_rtns.length; i++) {
01831 JJCalls c = jj_2_rtns[i];
01832 while (c != null) {
01833 if (c.gen < jj_gen) c.first = null;
01834 c = c.next;
01835 }
01836 }
01837 }
01838 trace_token(token, "");
01839 return token;
01840 }
01841 token = oldToken;
01842 jj_kind = kind;
01843 throw generateParseException();
01844 }
01845
01846 static private final class LookaheadSuccess extends java.lang.Error { }
01847 static final private LookaheadSuccess jj_ls = new LookaheadSuccess();
01848 static final private boolean jj_scan_token(int kind) {
01849 if (jj_scanpos == jj_lastpos) {
01850 jj_la--;
01851 if (jj_scanpos.next == null) {
01852 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
01853 } else {
01854 jj_lastpos = jj_scanpos = jj_scanpos.next;
01855 }
01856 } else {
01857 jj_scanpos = jj_scanpos.next;
01858 }
01859 if (jj_rescan) {
01860 int i = 0; Token tok = token;
01861 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
01862 if (tok != null) jj_add_error_token(kind, i);
01863 }
01864 if (jj_scanpos.kind != kind) return true;
01865 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
01866 return false;
01867 }
01868
01869 static final public Token getNextToken() {
01870 if (token.next != null) token = token.next;
01871 else token = token.next = token_source.getNextToken();
01872 jj_ntk = -1;
01873 jj_gen++;
01874 trace_token(token, " (in getNextToken)");
01875 return token;
01876 }
01877
01878 static final public Token getToken(int index) {
01879 Token t = lookingAhead ? jj_scanpos : token;
01880 for (int i = 0; i < index; i++) {
01881 if (t.next != null) t = t.next;
01882 else t = t.next = token_source.getNextToken();
01883 }
01884 return t;
01885 }
01886
01887 static final private int jj_ntk() {
01888 if ((jj_nt=token.next) == null)
01889 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
01890 else
01891 return (jj_ntk = jj_nt.kind);
01892 }
01893
01894 static private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>();
01895 static private int[] jj_expentry;
01896 static private int jj_kind = -1;
01897 static private int[] jj_lasttokens = new int[100];
01898 static private int jj_endpos;
01899
01900 static private void jj_add_error_token(int kind, int pos) {
01901 if (pos >= 100) return;
01902 if (pos == jj_endpos + 1) {
01903 jj_lasttokens[jj_endpos++] = kind;
01904 } else if (jj_endpos != 0) {
01905 jj_expentry = new int[jj_endpos];
01906 for (int i = 0; i < jj_endpos; i++) {
01907 jj_expentry[i] = jj_lasttokens[i];
01908 }
01909 boolean exists = false;
01910 for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
01911 int[] oldentry = (int[])(e.nextElement());
01912 if (oldentry.length == jj_expentry.length) {
01913 exists = true;
01914 for (int i = 0; i < jj_expentry.length; i++) {
01915 if (oldentry[i] != jj_expentry[i]) {
01916 exists = false;
01917 break;
01918 }
01919 }
01920 if (exists) break;
01921 }
01922 }
01923 if (!exists) jj_expentries.addElement(jj_expentry);
01924 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
01925 }
01926 }
01927
01928 static public ParseException generateParseException() {
01929 jj_expentries.removeAllElements();
01930 boolean[] la1tokens = new boolean[69];
01931 for (int i = 0; i < 69; i++) {
01932 la1tokens[i] = false;
01933 }
01934 if (jj_kind >= 0) {
01935 la1tokens[jj_kind] = true;
01936 jj_kind = -1;
01937 }
01938 for (int i = 0; i < 17; i++) {
01939 if (jj_la1[i] == jj_gen) {
01940 for (int j = 0; j < 32; j++) {
01941 if ((jj_la1_0[i] & (1<<j)) != 0) {
01942 la1tokens[j] = true;
01943 }
01944 if ((jj_la1_1[i] & (1<<j)) != 0) {
01945 la1tokens[32+j] = true;
01946 }
01947 if ((jj_la1_2[i] & (1<<j)) != 0) {
01948 la1tokens[64+j] = true;
01949 }
01950 }
01951 }
01952 }
01953 for (int i = 0; i < 69; i++) {
01954 if (la1tokens[i]) {
01955 jj_expentry = new int[1];
01956 jj_expentry[0] = i;
01957 jj_expentries.addElement(jj_expentry);
01958 }
01959 }
01960 jj_endpos = 0;
01961 jj_rescan_token();
01962 jj_add_error_token(0, 0);
01963 int[][] exptokseq = new int[jj_expentries.size()][];
01964 for (int i = 0; i < jj_expentries.size(); i++) {
01965 exptokseq[i] = (int[])jj_expentries.elementAt(i);
01966 }
01967 return new ParseException(token, exptokseq, tokenImage);
01968 }
01969
01970 static private int trace_indent = 0;
01971 static private boolean trace_enabled = true;
01972
01973 static final public void enable_tracing() {
01974 trace_enabled = true;
01975 }
01976
01977 static final public void disable_tracing() {
01978 trace_enabled = false;
01979 }
01980
01981 static final private void trace_call(String s) {
01982 if (trace_enabled) {
01983 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01984 System.out.println("Call: " + s);
01985 }
01986 trace_indent = trace_indent + 2;
01987 }
01988
01989 static final private void trace_return(String s) {
01990 trace_indent = trace_indent - 2;
01991 if (trace_enabled) {
01992 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01993 System.out.println("Return: " + s);
01994 }
01995 }
01996
01997 static final private void trace_token(Token t, String where) {
01998 if (trace_enabled) {
01999 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
02000 System.out.print("Consumed token: <" + tokenImage[t.kind]);
02001 if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) {
02002 System.out.print(": \"" + t.image + "\"");
02003 }
02004 System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where);
02005 }
02006 }
02007
02008 static final private void trace_scan(Token t1, int t2) {
02009 if (trace_enabled) {
02010 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
02011 System.out.print("Visited token: <" + tokenImage[t1.kind]);
02012 if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) {
02013 System.out.print(": \"" + t1.image + "\"");
02014 }
02015 System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">");
02016 }
02017 }
02018
02019 static final private void jj_rescan_token() {
02020 jj_rescan = true;
02021 for (int i = 0; i < 10; i++) {
02022 try {
02023 JJCalls p = jj_2_rtns[i];
02024 do {
02025 if (p.gen > jj_gen) {
02026 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
02027 switch (i) {
02028 case 0: jj_3_1(); break;
02029 case 1: jj_3_2(); break;
02030 case 2: jj_3_3(); break;
02031 case 3: jj_3_4(); break;
02032 case 4: jj_3_5(); break;
02033 case 5: jj_3_6(); break;
02034 case 6: jj_3_7(); break;
02035 case 7: jj_3_8(); break;
02036 case 8: jj_3_9(); break;
02037 case 9: jj_3_10(); break;
02038 }
02039 }
02040 p = p.next;
02041 } while (p != null);
02042 } catch(LookaheadSuccess ls) { }
02043 }
02044 jj_rescan = false;
02045 }
02046
02047 static final private void jj_save(int index, int xla) {
02048 JJCalls p = jj_2_rtns[index];
02049 while (p.gen > jj_gen) {
02050 if (p.next == null) { p = p.next = new JJCalls(); break; }
02051 p = p.next;
02052 }
02053 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
02054 }
02055
02056 static final class JJCalls {
02057 int gen;
02058 Token first;
02059 int arg;
02060 JJCalls next;
02061 }
02062
02063 }