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