00001
00002 package plp.functional2.parser;
00003
00004
00005
00006 import java.util.ArrayList;
00007
00008 import java.util.List;
00009
00010
00011 import plp.functional2.Programa;
00012 import plp.functional2.declaration.DecFuncao;
00013 import plp.functional2.expression.ValorFuncao;
00014 import plp.functional2.expression.ValorAbstrato;
00015 import plp.functional2.expression.ExpDeclaracao;
00016 import plp.functional2.expression.Aplicacao;
00017
00018
00019
00020 import plp.functional1.declaration.DeclaracaoFuncional;
00021 import plp.functional1.declaration.DecVariavel;
00022 import plp.functional1.expression.IfThenElse;
00023
00024
00025
00026 import plp.expressions2.expression.Expressao;
00027 import plp.expressions2.expression.Valor;
00028 import plp.expressions2.expression.ValorInteiro;
00029 import plp.expressions2.expression.ValorString;
00030 import plp.expressions2.expression.ValorBooleano;
00031 import plp.expressions2.expression.Id;
00032 import plp.expressions2.expression.ExpMenos;
00033 import plp.expressions2.expression.ExpNot;
00034 import plp.expressions2.expression.ExpLength;
00035 import plp.expressions2.expression.ExpSoma;
00036 import plp.expressions2.expression.ExpSub;
00037 import plp.expressions2.expression.ExpAnd;
00038 import plp.expressions2.expression.ExpOr;
00039 import plp.expressions2.expression.ExpEquals;
00040 import plp.expressions2.expression.ExpConcat;
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 public class Func2Parser implements Func2ParserConstants {
00055
00056
00057
00058 public static void main(String args[]) {
00059
00060 Func2Parser parser;
00061
00062 if (args.length == 0) {
00063
00064 System.out.println("Funcional 2 PLP Parser Version 0.0.1: Reading from standard input . . .");
00065
00066 parser = new Func2Parser(System.in);
00067
00068 } else if (args.length == 1) {
00069
00070 System.out.println("Funcional 2 PLP Parser Version 0.0.1: Reading from file " + args[0] + " . . .");
00071
00072 try {
00073
00074 parser = new Func2Parser(new java.io.FileInputStream(args[0]));
00075
00076 } catch (java.io.FileNotFoundException e) {
00077
00078 System.out.println("Funcional 1 PLP Parser Version 0.0.1: File " + args[0] + " not found.");
00079
00080 return;
00081
00082 }
00083
00084 } else {
00085
00086 System.out.println("Funcional 2 PLP Parser Version 0.0.1: Usage is one of:");
00087
00088 System.out.println(" java Func2Parser < inputfile");
00089
00090 System.out.println("OR");
00091
00092 System.out.println(" java Func2Parser inputfile");
00093
00094 return;
00095
00096 }
00097
00098 Programa programa = null;
00099
00100 try {
00101
00102 programa = parser.Input();
00103
00104 System.out.println("Funcional 2 PLP Parser Version 0.0.1: Expressoes1 program parsed successfully.");
00105
00106 } catch (ParseException e) {
00107
00108 e.printStackTrace();
00109
00110 System.out.println("Funcional 2 PLP Parser Version 0.0.1: Encountered errors during parse.");
00111
00112 System.exit(0);
00113
00114 }
00115
00116 try {
00117
00118 System.out.println("Funcional 2 PLP Parser Version 0.0.1: running...");
00119
00120 Valor val = (Valor)programa.executar();
00121
00122 if (val instanceof ValorString) {
00123
00124 ValorString valStr = (ValorString) val;
00125
00126 System.out.println("Funcional 2 PLP Parser Version 0.0.1: resultado="+valStr.valor());
00127
00128 } else if (val instanceof ValorInteiro) {
00129
00130 ValorInteiro valInt = (ValorInteiro) val;
00131
00132 System.out.println("Funcional 2 PLP Parser Version 0.0.1: resultado="+valInt.valor());
00133
00134 } else if (val instanceof ValorBooleano) {
00135
00136 ValorBooleano valBool = (ValorBooleano) val;
00137
00138 System.out.println("Funcional 2 PLP Parser Version 0.0.1: resultado="+valBool.valor());
00139
00140 } else if (val instanceof ValorFuncao) {
00141
00142 ValorFuncao valFunc = (ValorFuncao) val;
00143
00144 System.out.println("Funcional 2 PLP Parser Version 0.0.1: resultado = " + val);
00145
00146 }
00147
00148 } catch (Exception e) {
00149
00150 e.printStackTrace();
00151
00152 System.out.println("Funcional 2 PLP Parser Version 0.0.1: Encountered errors during execution.");
00153
00154 }
00155
00156 }
00157
00158 static final public Programa Input() throws ParseException {
00159 trace_call("Input");
00160 try {
00161 Programa retorno;
00162 retorno = PPrograma();
00163 jj_consume_token(0);
00164 {if (true) return retorno;}
00165 throw new Error("Missing return statement in function");
00166 } finally {
00167 trace_return("Input");
00168 }
00169 }
00170
00171 static final public Valor PValorInteiro() throws ParseException {
00172 trace_call("PValorInteiro");
00173 try {
00174 Token token;
00175 token = jj_consume_token(INTEGER_LITERAL);
00176
00177
00178 {if (true) return new ValorInteiro(Integer.parseInt(token.toString()));}
00179 throw new Error("Missing return statement in function");
00180 } finally {
00181 trace_return("PValorInteiro");
00182 }
00183 }
00184
00185 static final public Valor PValorBooleano() throws ParseException {
00186 trace_call("PValorBooleano");
00187 try {
00188 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00189 case FALSE:
00190 jj_consume_token(FALSE);
00191 {if (true) return new ValorBooleano(false);}
00192 break;
00193 case TRUE:
00194 jj_consume_token(TRUE);
00195 {if (true) return new ValorBooleano(true);}
00196 break;
00197 default:
00198 jj_la1[0] = jj_gen;
00199 jj_consume_token(-1);
00200 throw new ParseException();
00201 }
00202 throw new Error("Missing return statement in function");
00203 } finally {
00204 trace_return("PValorBooleano");
00205 }
00206 }
00207
00208 static final public Valor PValorString() throws ParseException {
00209 trace_call("PValorString");
00210 try {
00211 Token token;
00212 token = jj_consume_token(STRING_LITERAL);
00213
00214
00215 String tokenStr = token.toString();
00216
00217 tokenStr = tokenStr.substring(1,tokenStr.length()-1);
00218
00219 {if (true) return new ValorString(tokenStr);}
00220 throw new Error("Missing return statement in function");
00221 } finally {
00222 trace_return("PValorString");
00223 }
00224 }
00225
00226 static final public Valor PValorFuncao() throws ParseException {
00227 trace_call("PValorFuncao");
00228 try {
00229 List lista = null;
00230
00231 Expressao expressao;
00232 jj_consume_token(FN);
00233 lista = PListaId();
00234 jj_consume_token(DOT);
00235 expressao = PExpressao();
00236 {if (true) return new ValorFuncao(lista, expressao);}
00237 throw new Error("Missing return statement in function");
00238 } finally {
00239 trace_return("PValorFuncao");
00240 }
00241 }
00242
00243 static final public Valor PValor() throws ParseException {
00244 trace_call("PValor");
00245 try {
00246 Valor retorno;
00247 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00248 case INTEGER_LITERAL:
00249 retorno = PValorInteiro();
00250 break;
00251 case TRUE:
00252 case FALSE:
00253 retorno = PValorBooleano();
00254 break;
00255 case STRING_LITERAL:
00256 retorno = PValorString();
00257 break;
00258 case FN:
00259 retorno = PValorFuncao();
00260 break;
00261 default:
00262 jj_la1[1] = jj_gen;
00263 jj_consume_token(-1);
00264 throw new ParseException();
00265 }
00266 {if (true) return retorno;}
00267 throw new Error("Missing return statement in function");
00268 } finally {
00269 trace_return("PValor");
00270 }
00271 }
00272
00273 static final public Id PId() throws ParseException {
00274 trace_call("PId");
00275 try {
00276 Token token;
00277 token = jj_consume_token(IDENTIFIER);
00278
00279
00280
00281
00282 String tokenStr = token.toString();
00283
00284
00285
00286 {if (true) return new Id(tokenStr);}
00287 throw new Error("Missing return statement in function");
00288 } finally {
00289 trace_return("PId");
00290 }
00291 }
00292
00293 static final public Expressao PExpMenos() throws ParseException {
00294 trace_call("PExpMenos");
00295 try {
00296 Expressao retorno;
00297 jj_consume_token(MINUS);
00298 retorno = PExpPrimaria();
00299 {if (true) return new ExpMenos(retorno);}
00300 throw new Error("Missing return statement in function");
00301 } finally {
00302 trace_return("PExpMenos");
00303 }
00304 }
00305
00306 static final public Expressao PExpNot() throws ParseException {
00307 trace_call("PExpNot");
00308 try {
00309 Expressao retorno;
00310 jj_consume_token(NOT);
00311 retorno = PExpPrimaria();
00312 {if (true) return new ExpNot(retorno);}
00313 throw new Error("Missing return statement in function");
00314 } finally {
00315 trace_return("PExpNot");
00316 }
00317 }
00318
00319 static final public Expressao PExpLength() throws ParseException {
00320 trace_call("PExpLength");
00321 try {
00322 Expressao retorno;
00323 jj_consume_token(LENGTH);
00324 retorno = PExpPrimaria();
00325 if (retorno instanceof ValorString) {
00326
00327 ValorString val = (ValorString) retorno;
00328
00329
00330
00331 }
00332
00333
00334
00335 {if (true) return new ExpLength(retorno);}
00336 throw new Error("Missing return statement in function");
00337 } finally {
00338 trace_return("PExpLength");
00339 }
00340 }
00341
00342 static final public Expressao PExpPrimaria() throws ParseException {
00343 trace_call("PExpPrimaria");
00344 try {
00345 Expressao retorno;
00346 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00347 case TRUE:
00348 case FALSE:
00349 case FN:
00350 case INTEGER_LITERAL:
00351 case STRING_LITERAL:
00352 retorno = PValor();
00353 break;
00354 default:
00355 jj_la1[2] = jj_gen;
00356 if (jj_2_1(2147483647)) {
00357 retorno = PAplicacao();
00358 } else {
00359 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00360 case IDENTIFIER:
00361 retorno = PId();
00362 break;
00363 case LPAREN:
00364 jj_consume_token(LPAREN);
00365 retorno = PExpressao();
00366 jj_consume_token(RPAREN);
00367 break;
00368 default:
00369 jj_la1[3] = jj_gen;
00370 jj_consume_token(-1);
00371 throw new ParseException();
00372 }
00373 }
00374 }
00375 {if (true) return retorno;}
00376 throw new Error("Missing return statement in function");
00377 } finally {
00378 trace_return("PExpPrimaria");
00379 }
00380 }
00381
00382 static final public Expressao PAplicacao() throws ParseException {
00383 trace_call("PAplicacao");
00384 try {
00385 Id id;
00386 List lista;
00387 id = PId();
00388 jj_consume_token(LPAREN);
00389 lista = PListaExpr();
00390 jj_consume_token(RPAREN);
00391 {if (true) return new Aplicacao(id, lista);}
00392 throw new Error("Missing return statement in function");
00393 } finally {
00394 trace_return("PAplicacao");
00395 }
00396 }
00397
00398 static final public List PListaId() throws ParseException {
00399 trace_call("PListaId");
00400 try {
00401 List retorno = null;
00402
00403 Id id;
00404 label_1:
00405 while (true) {
00406 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00407 case IDENTIFIER:
00408 ;
00409 break;
00410 default:
00411 jj_la1[4] = jj_gen;
00412 break label_1;
00413 }
00414 id = PId();
00415 if (retorno == null) {
00416
00417 retorno = new ArrayList();
00418
00419 retorno.add(id);
00420
00421 } else {
00422
00423 retorno.add(id);
00424
00425 }
00426 }
00427 {if (true) return retorno;}
00428 throw new Error("Missing return statement in function");
00429 } finally {
00430 trace_return("PListaId");
00431 }
00432 }
00433
00434 static final public DeclaracaoFuncional PDeclVar() throws ParseException {
00435 trace_call("PDeclVar");
00436 try {
00437 Id id;
00438
00439 Expressao expressao;
00440
00441 DeclaracaoFuncional retorno;
00442 jj_consume_token(VAR);
00443 id = PId();
00444 jj_consume_token(ASSIGN);
00445 expressao = PExpressao();
00446 {if (true) return new DecVariavel(id, expressao);}
00447 throw new Error("Missing return statement in function");
00448 } finally {
00449 trace_return("PDeclVar");
00450 }
00451 }
00452
00453 static final public DeclaracaoFuncional PDeclFuncao() throws ParseException {
00454 trace_call("PDeclFuncao");
00455 try {
00456 Id id;
00457
00458 Expressao expressao;
00459
00460 DeclaracaoFuncional retorno;
00461
00462 List lista;
00463 jj_consume_token(FUNC);
00464 id = PId();
00465 lista = PListaId();
00466 jj_consume_token(ASSIGN);
00467 expressao = PExpressao();
00468 {if (true) return new DecFuncao(id, new ValorFuncao(lista, expressao));}
00469 throw new Error("Missing return statement in function");
00470 } finally {
00471 trace_return("PDeclFuncao");
00472 }
00473 }
00474
00475 static final public List PDeclFuncional() throws ParseException {
00476 trace_call("PDeclFuncional");
00477 try {
00478 List retorno=null;
00479
00480 DeclaracaoFuncional decl;
00481 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00482 case VAR:
00483 decl = PDeclVar();
00484 break;
00485 case FUNC:
00486 decl = PDeclFuncao();
00487 break;
00488 default:
00489 jj_la1[5] = jj_gen;
00490 jj_consume_token(-1);
00491 throw new ParseException();
00492 }
00493 retorno = new ArrayList();
00494
00495 retorno.add(decl);
00496 label_2:
00497 while (true) {
00498 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00499 case COMMA:
00500 ;
00501 break;
00502 default:
00503 jj_la1[6] = jj_gen;
00504 break label_2;
00505 }
00506 if (jj_2_2(2147483647)) {
00507 jj_consume_token(COMMA);
00508 decl = PDeclVar();
00509 } else if (jj_2_3(2147483647)) {
00510 jj_consume_token(COMMA);
00511 decl = PDeclFuncao();
00512 } else {
00513 jj_consume_token(-1);
00514 throw new ParseException();
00515 }
00516 retorno.add(decl);
00517 }
00518 {if (true) return retorno;}
00519 throw new Error("Missing return statement in function");
00520 } finally {
00521 trace_return("PDeclFuncional");
00522 }
00523 }
00524
00525 static final public Expressao PExpDeclaracao() throws ParseException {
00526 trace_call("PExpDeclaracao");
00527 try {
00528 List declaracoes;
00529
00530 Expressao expressao;
00531 jj_consume_token(LET);
00532 declaracoes = PDeclFuncional();
00533 jj_consume_token(IN);
00534 expressao = PExpressao();
00535 {if (true) return new ExpDeclaracao(declaracoes, expressao);}
00536 throw new Error("Missing return statement in function");
00537 } finally {
00538 trace_return("PExpDeclaracao");
00539 }
00540 }
00541
00542 static final public Expressao PExpCondicional() throws ParseException {
00543 trace_call("PExpCondicional");
00544 try {
00545 Expressao expCond, expThen, expElse;
00546 jj_consume_token(IF);
00547 expCond = PExpressao();
00548 jj_consume_token(THEN);
00549 expThen = PExpressao();
00550 jj_consume_token(ELSE);
00551 expElse = PExpressao();
00552 {if (true) return new IfThenElse(expCond, expThen, expElse);}
00553 throw new Error("Missing return statement in function");
00554 } finally {
00555 trace_return("PExpCondicional");
00556 }
00557 }
00558
00559 static final public List PListaExpr() throws ParseException {
00560 trace_call("PListaExpr");
00561 try {
00562 List retorno = null;
00563
00564 Expressao expr;
00565 expr = PExpressao();
00566 retorno = new ArrayList();
00567
00568 retorno.add(expr);
00569 label_3:
00570 while (true) {
00571 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00572 case COMMA:
00573 ;
00574 break;
00575 default:
00576 jj_la1[7] = jj_gen;
00577 break label_3;
00578 }
00579 jj_consume_token(COMMA);
00580 expr = PExpressao();
00581 retorno.add(expr);
00582 }
00583 {if (true) return retorno;}
00584 throw new Error("Missing return statement in function");
00585 } finally {
00586 trace_return("PListaExpr");
00587 }
00588 }
00589
00590 static final public Expressao PExpUnaria() throws ParseException {
00591 trace_call("PExpUnaria");
00592 try {
00593 Expressao retorno;
00594 if (jj_2_4(2147483647)) {
00595 retorno = PExpMenos();
00596 } else if (jj_2_5(2147483647)) {
00597 retorno = PExpNot();
00598 } else if (jj_2_6(2147483647)) {
00599 retorno = PExpLength();
00600 } else if (jj_2_7(2147483647)) {
00601 retorno = PExpDeclaracao();
00602 } else if (jj_2_8(2147483647)) {
00603 retorno = PExpCondicional();
00604 } else if (jj_2_9(2147483647)) {
00605 retorno = PExpPrimaria();
00606 } else {
00607 jj_consume_token(-1);
00608 throw new ParseException();
00609 }
00610
00611
00612 {if (true) return retorno;}
00613 throw new Error("Missing return statement in function");
00614 } finally {
00615 trace_return("PExpUnaria");
00616 }
00617 }
00618
00619 static final public Expressao PExpBinaria() throws ParseException {
00620 trace_call("PExpBinaria");
00621 try {
00622 Expressao retorno, param2;
00623 Id id;
00624
00625 List list = null;
00626 retorno = PExpUnaria();
00627 label_4:
00628 while (true) {
00629 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00630 case AND:
00631 case OR:
00632 case LPAREN:
00633 case EQ:
00634 case CONCAT:
00635 case PLUS:
00636 case MINUS:
00637 ;
00638 break;
00639 default:
00640 jj_la1[8] = jj_gen;
00641 break label_4;
00642 }
00643 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00644 case PLUS:
00645 jj_consume_token(PLUS);
00646 param2 = PExpUnaria();
00647 retorno = new ExpSoma(retorno, param2);
00648 break;
00649 case MINUS:
00650 jj_consume_token(MINUS);
00651 param2 = PExpUnaria();
00652 retorno = new ExpSub(retorno, param2);
00653 break;
00654 case AND:
00655 jj_consume_token(AND);
00656 param2 = PExpUnaria();
00657 retorno = new ExpAnd(retorno, param2);
00658 break;
00659 case OR:
00660 jj_consume_token(OR);
00661 param2 = PExpUnaria();
00662 retorno = new ExpOr(retorno, param2);
00663 break;
00664 case EQ:
00665 jj_consume_token(EQ);
00666 param2 = PExpUnaria();
00667 retorno = new ExpEquals(retorno, param2);
00668 break;
00669 case CONCAT:
00670 jj_consume_token(CONCAT);
00671 param2 = PExpUnaria();
00672 retorno = new ExpConcat(retorno, param2);
00673 break;
00674 case LPAREN:
00675 jj_consume_token(LPAREN);
00676 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00677 case NOT:
00678 case LENGTH:
00679 case TRUE:
00680 case FALSE:
00681 case LET:
00682 case IF:
00683 case FN:
00684 case INTEGER_LITERAL:
00685 case STRING_LITERAL:
00686 case IDENTIFIER:
00687 case LPAREN:
00688 case MINUS:
00689 list = PListaExpr();
00690 break;
00691 default:
00692 jj_la1[9] = jj_gen;
00693 ;
00694 }
00695 jj_consume_token(RPAREN);
00696 retorno = new Aplicacao((Expressao)retorno, list);
00697 break;
00698 default:
00699 jj_la1[10] = jj_gen;
00700 jj_consume_token(-1);
00701 throw new ParseException();
00702 }
00703 }
00704
00705
00706 {if (true) return retorno;}
00707 throw new Error("Missing return statement in function");
00708 } finally {
00709 trace_return("PExpBinaria");
00710 }
00711 }
00712
00713 static final public Expressao PExpressao() throws ParseException {
00714 trace_call("PExpressao");
00715 try {
00716 Expressao retorno;
00717 retorno = PExpBinaria();
00718 {if (true) return retorno;}
00719 throw new Error("Missing return statement in function");
00720 } finally {
00721 trace_return("PExpressao");
00722 }
00723 }
00724
00725 static final public Programa PPrograma() throws ParseException {
00726 trace_call("PPrograma");
00727 try {
00728 Expressao retorno;
00729 retorno = PExpressao();
00730
00731
00732 {if (true) return new Programa(retorno);}
00733 throw new Error("Missing return statement in function");
00734 } finally {
00735 trace_return("PPrograma");
00736 }
00737 }
00738
00739 static private boolean jj_2_1(int xla) {
00740 jj_la = xla; jj_lastpos = jj_scanpos = token;
00741 try { return !jj_3_1(); }
00742 catch(LookaheadSuccess ls) { return true; }
00743 finally { jj_save(0, xla); }
00744 }
00745
00746 static private boolean jj_2_2(int xla) {
00747 jj_la = xla; jj_lastpos = jj_scanpos = token;
00748 try { return !jj_3_2(); }
00749 catch(LookaheadSuccess ls) { return true; }
00750 finally { jj_save(1, xla); }
00751 }
00752
00753 static private boolean jj_2_3(int xla) {
00754 jj_la = xla; jj_lastpos = jj_scanpos = token;
00755 try { return !jj_3_3(); }
00756 catch(LookaheadSuccess ls) { return true; }
00757 finally { jj_save(2, xla); }
00758 }
00759
00760 static private boolean jj_2_4(int xla) {
00761 jj_la = xla; jj_lastpos = jj_scanpos = token;
00762 try { return !jj_3_4(); }
00763 catch(LookaheadSuccess ls) { return true; }
00764 finally { jj_save(3, xla); }
00765 }
00766
00767 static private boolean jj_2_5(int xla) {
00768 jj_la = xla; jj_lastpos = jj_scanpos = token;
00769 try { return !jj_3_5(); }
00770 catch(LookaheadSuccess ls) { return true; }
00771 finally { jj_save(4, xla); }
00772 }
00773
00774 static private boolean jj_2_6(int xla) {
00775 jj_la = xla; jj_lastpos = jj_scanpos = token;
00776 try { return !jj_3_6(); }
00777 catch(LookaheadSuccess ls) { return true; }
00778 finally { jj_save(5, xla); }
00779 }
00780
00781 static private boolean jj_2_7(int xla) {
00782 jj_la = xla; jj_lastpos = jj_scanpos = token;
00783 try { return !jj_3_7(); }
00784 catch(LookaheadSuccess ls) { return true; }
00785 finally { jj_save(6, xla); }
00786 }
00787
00788 static private boolean jj_2_8(int xla) {
00789 jj_la = xla; jj_lastpos = jj_scanpos = token;
00790 try { return !jj_3_8(); }
00791 catch(LookaheadSuccess ls) { return true; }
00792 finally { jj_save(7, xla); }
00793 }
00794
00795 static private boolean jj_2_9(int xla) {
00796 jj_la = xla; jj_lastpos = jj_scanpos = token;
00797 try { return !jj_3_9(); }
00798 catch(LookaheadSuccess ls) { return true; }
00799 finally { jj_save(8, xla); }
00800 }
00801
00802 static private boolean jj_3_1() {
00803 if (jj_3R_5()) return true;
00804 if (jj_scan_token(LPAREN)) return true;
00805 return false;
00806 }
00807
00808 static private boolean jj_3R_43() {
00809 if (jj_scan_token(MINUS)) return true;
00810 if (jj_3R_28()) return true;
00811 return false;
00812 }
00813
00814 static private boolean jj_3R_17() {
00815 if (jj_scan_token(LPAREN)) return true;
00816 if (jj_3R_13()) return true;
00817 if (jj_scan_token(RPAREN)) return true;
00818 return false;
00819 }
00820
00821 static private boolean jj_3R_16() {
00822 if (jj_3R_5()) return true;
00823 return false;
00824 }
00825
00826 static private boolean jj_3R_15() {
00827 if (jj_3R_23()) return true;
00828 return false;
00829 }
00830
00831 static private boolean jj_3R_14() {
00832 if (jj_3R_22()) return true;
00833 return false;
00834 }
00835
00836 static private boolean jj_3R_51() {
00837 if (jj_scan_token(STRING_LITERAL)) return true;
00838 return false;
00839 }
00840
00841 static private boolean jj_3R_11() {
00842 Token xsp;
00843 xsp = jj_scanpos;
00844 if (jj_3R_14()) {
00845 jj_scanpos = xsp;
00846 if (jj_3R_15()) {
00847 jj_scanpos = xsp;
00848 if (jj_3R_16()) {
00849 jj_scanpos = xsp;
00850 if (jj_3R_17()) return true;
00851 }
00852 }
00853 }
00854 return false;
00855 }
00856
00857 static private boolean jj_3R_42() {
00858 if (jj_scan_token(PLUS)) return true;
00859 if (jj_3R_28()) return true;
00860 return false;
00861 }
00862
00863 static private boolean jj_3R_29() {
00864 Token xsp;
00865 xsp = jj_scanpos;
00866 if (jj_3R_42()) {
00867 jj_scanpos = xsp;
00868 if (jj_3R_43()) {
00869 jj_scanpos = xsp;
00870 if (jj_3R_44()) {
00871 jj_scanpos = xsp;
00872 if (jj_3R_45()) {
00873 jj_scanpos = xsp;
00874 if (jj_3R_46()) {
00875 jj_scanpos = xsp;
00876 if (jj_3R_47()) {
00877 jj_scanpos = xsp;
00878 if (jj_3R_48()) return true;
00879 }
00880 }
00881 }
00882 }
00883 }
00884 }
00885 return false;
00886 }
00887
00888 static private boolean jj_3_3() {
00889 if (jj_scan_token(COMMA)) return true;
00890 if (jj_scan_token(FUNC)) return true;
00891 return false;
00892 }
00893
00894 static private boolean jj_3R_13() {
00895 if (jj_3R_21()) return true;
00896 return false;
00897 }
00898
00899 static private boolean jj_3R_5() {
00900 if (jj_scan_token(IDENTIFIER)) return true;
00901 return false;
00902 }
00903
00904 static private boolean jj_3R_53() {
00905 if (jj_scan_token(COMMA)) return true;
00906 if (jj_3R_13()) return true;
00907 return false;
00908 }
00909
00910 static private boolean jj_3R_24() {
00911 if (jj_scan_token(VAR)) return true;
00912 if (jj_3R_5()) return true;
00913 if (jj_scan_token(ASSIGN)) return true;
00914 if (jj_3R_13()) return true;
00915 return false;
00916 }
00917
00918 static private boolean jj_3R_21() {
00919 if (jj_3R_28()) return true;
00920 Token xsp;
00921 while (true) {
00922 xsp = jj_scanpos;
00923 if (jj_3R_29()) { jj_scanpos = xsp; break; }
00924 }
00925 return false;
00926 }
00927
00928 static private boolean jj_3_2() {
00929 if (jj_scan_token(COMMA)) return true;
00930 if (jj_scan_token(VAR)) return true;
00931 return false;
00932 }
00933
00934 static private boolean jj_3R_57() {
00935 if (jj_scan_token(TRUE)) return true;
00936 return false;
00937 }
00938
00939 static private boolean jj_3R_56() {
00940 if (jj_scan_token(FALSE)) return true;
00941 return false;
00942 }
00943
00944 static private boolean jj_3R_50() {
00945 Token xsp;
00946 xsp = jj_scanpos;
00947 if (jj_3R_56()) {
00948 jj_scanpos = xsp;
00949 if (jj_3R_57()) return true;
00950 }
00951 return false;
00952 }
00953
00954 static private boolean jj_3R_27() {
00955 if (jj_scan_token(COMMA)) return true;
00956 if (jj_3R_25()) return true;
00957 return false;
00958 }
00959
00960 static private boolean jj_3R_26() {
00961 if (jj_scan_token(COMMA)) return true;
00962 if (jj_3R_24()) return true;
00963 return false;
00964 }
00965
00966 static private boolean jj_3R_20() {
00967 Token xsp;
00968 xsp = jj_scanpos;
00969 if (jj_3R_26()) {
00970 jj_scanpos = xsp;
00971 if (jj_3R_27()) return true;
00972 }
00973 return false;
00974 }
00975
00976 static private boolean jj_3R_34() {
00977 if (jj_3R_13()) return true;
00978 Token xsp;
00979 while (true) {
00980 xsp = jj_scanpos;
00981 if (jj_3R_53()) { jj_scanpos = xsp; break; }
00982 }
00983 return false;
00984 }
00985
00986 static private boolean jj_3R_55() {
00987 if (jj_3R_34()) return true;
00988 return false;
00989 }
00990
00991 static private boolean jj_3R_8() {
00992 if (jj_scan_token(LENGTH)) return true;
00993 if (jj_3R_11()) return true;
00994 return false;
00995 }
00996
00997 static private boolean jj_3_9() {
00998 if (jj_3R_11()) return true;
00999 return false;
01000 }
01001
01002 static private boolean jj_3R_33() {
01003 if (jj_3R_52()) return true;
01004 return false;
01005 }
01006
01007 static private boolean jj_3R_32() {
01008 if (jj_3R_51()) return true;
01009 return false;
01010 }
01011
01012 static private boolean jj_3_8() {
01013 if (jj_3R_10()) return true;
01014 return false;
01015 }
01016
01017 static private boolean jj_3R_31() {
01018 if (jj_3R_50()) return true;
01019 return false;
01020 }
01021
01022 static private boolean jj_3R_48() {
01023 if (jj_scan_token(LPAREN)) return true;
01024 Token xsp;
01025 xsp = jj_scanpos;
01026 if (jj_3R_55()) jj_scanpos = xsp;
01027 if (jj_scan_token(RPAREN)) return true;
01028 return false;
01029 }
01030
01031 static private boolean jj_3R_19() {
01032 if (jj_3R_25()) return true;
01033 return false;
01034 }
01035
01036 static private boolean jj_3R_30() {
01037 if (jj_3R_49()) return true;
01038 return false;
01039 }
01040
01041 static private boolean jj_3R_49() {
01042 if (jj_scan_token(INTEGER_LITERAL)) return true;
01043 return false;
01044 }
01045
01046 static private boolean jj_3R_41() {
01047 if (jj_3R_11()) return true;
01048 return false;
01049 }
01050
01051 static private boolean jj_3_7() {
01052 if (jj_3R_9()) return true;
01053 return false;
01054 }
01055
01056 static private boolean jj_3R_22() {
01057 Token xsp;
01058 xsp = jj_scanpos;
01059 if (jj_3R_30()) {
01060 jj_scanpos = xsp;
01061 if (jj_3R_31()) {
01062 jj_scanpos = xsp;
01063 if (jj_3R_32()) {
01064 jj_scanpos = xsp;
01065 if (jj_3R_33()) return true;
01066 }
01067 }
01068 }
01069 return false;
01070 }
01071
01072 static private boolean jj_3R_18() {
01073 if (jj_3R_24()) return true;
01074 return false;
01075 }
01076
01077 static private boolean jj_3R_40() {
01078 if (jj_3R_10()) return true;
01079 return false;
01080 }
01081
01082 static private boolean jj_3R_12() {
01083 Token xsp;
01084 xsp = jj_scanpos;
01085 if (jj_3R_18()) {
01086 jj_scanpos = xsp;
01087 if (jj_3R_19()) return true;
01088 }
01089 while (true) {
01090 xsp = jj_scanpos;
01091 if (jj_3R_20()) { jj_scanpos = xsp; break; }
01092 }
01093 return false;
01094 }
01095
01096 static private boolean jj_3_6() {
01097 if (jj_3R_8()) return true;
01098 return false;
01099 }
01100
01101 static private boolean jj_3R_47() {
01102 if (jj_scan_token(CONCAT)) return true;
01103 if (jj_3R_28()) return true;
01104 return false;
01105 }
01106
01107 static private boolean jj_3R_7() {
01108 if (jj_scan_token(NOT)) return true;
01109 if (jj_3R_11()) return true;
01110 return false;
01111 }
01112
01113 static private boolean jj_3R_39() {
01114 if (jj_3R_9()) return true;
01115 return false;
01116 }
01117
01118 static private boolean jj_3_5() {
01119 if (jj_3R_7()) return true;
01120 return false;
01121 }
01122
01123 static private boolean jj_3R_10() {
01124 if (jj_scan_token(IF)) return true;
01125 if (jj_3R_13()) return true;
01126 if (jj_scan_token(THEN)) return true;
01127 if (jj_3R_13()) return true;
01128 if (jj_scan_token(ELSE)) return true;
01129 if (jj_3R_13()) return true;
01130 return false;
01131 }
01132
01133 static private boolean jj_3R_46() {
01134 if (jj_scan_token(EQ)) return true;
01135 if (jj_3R_28()) return true;
01136 return false;
01137 }
01138
01139 static private boolean jj_3R_38() {
01140 if (jj_3R_8()) return true;
01141 return false;
01142 }
01143
01144 static private boolean jj_3R_54() {
01145 if (jj_3R_5()) return true;
01146 return false;
01147 }
01148
01149 static private boolean jj_3_4() {
01150 if (jj_3R_6()) return true;
01151 return false;
01152 }
01153
01154 static private boolean jj_3R_35() {
01155 Token xsp;
01156 while (true) {
01157 xsp = jj_scanpos;
01158 if (jj_3R_54()) { jj_scanpos = xsp; break; }
01159 }
01160 return false;
01161 }
01162
01163 static private boolean jj_3R_52() {
01164 if (jj_scan_token(FN)) return true;
01165 if (jj_3R_35()) return true;
01166 if (jj_scan_token(DOT)) return true;
01167 if (jj_3R_13()) return true;
01168 return false;
01169 }
01170
01171 static private boolean jj_3R_37() {
01172 if (jj_3R_7()) return true;
01173 return false;
01174 }
01175
01176 static private boolean jj_3R_45() {
01177 if (jj_scan_token(OR)) return true;
01178 if (jj_3R_28()) return true;
01179 return false;
01180 }
01181
01182 static private boolean jj_3R_36() {
01183 if (jj_3R_6()) return true;
01184 return false;
01185 }
01186
01187 static private boolean jj_3R_6() {
01188 if (jj_scan_token(MINUS)) return true;
01189 if (jj_3R_11()) return true;
01190 return false;
01191 }
01192
01193 static private boolean jj_3R_25() {
01194 if (jj_scan_token(FUNC)) return true;
01195 if (jj_3R_5()) return true;
01196 if (jj_3R_35()) return true;
01197 if (jj_scan_token(ASSIGN)) return true;
01198 if (jj_3R_13()) return true;
01199 return false;
01200 }
01201
01202 static private boolean jj_3R_28() {
01203 Token xsp;
01204 xsp = jj_scanpos;
01205 if (jj_3R_36()) {
01206 jj_scanpos = xsp;
01207 if (jj_3R_37()) {
01208 jj_scanpos = xsp;
01209 if (jj_3R_38()) {
01210 jj_scanpos = xsp;
01211 if (jj_3R_39()) {
01212 jj_scanpos = xsp;
01213 if (jj_3R_40()) {
01214 jj_scanpos = xsp;
01215 if (jj_3R_41()) return true;
01216 }
01217 }
01218 }
01219 }
01220 }
01221 return false;
01222 }
01223
01224 static private boolean jj_3R_23() {
01225 if (jj_3R_5()) return true;
01226 if (jj_scan_token(LPAREN)) return true;
01227 if (jj_3R_34()) return true;
01228 if (jj_scan_token(RPAREN)) return true;
01229 return false;
01230 }
01231
01232 static private boolean jj_3R_9() {
01233 if (jj_scan_token(LET)) return true;
01234 if (jj_3R_12()) return true;
01235 if (jj_scan_token(IN)) return true;
01236 if (jj_3R_13()) return true;
01237 return false;
01238 }
01239
01240 static private boolean jj_3R_44() {
01241 if (jj_scan_token(AND)) return true;
01242 if (jj_3R_28()) return true;
01243 return false;
01244 }
01245
01246 static private boolean jj_initialized_once = false;
01248 static public Func2ParserTokenManager token_source;
01249 static JavaCharStream jj_input_stream;
01251 static public Token token;
01253 static public Token jj_nt;
01254 static private int jj_ntk;
01255 static private Token jj_scanpos, jj_lastpos;
01256 static private int jj_la;
01257 static private int jj_gen;
01258 static final private int[] jj_la1 = new int[11];
01259 static private int[] jj_la1_0;
01260 static private int[] jj_la1_1;
01261 static {
01262 jj_la1_init_0();
01263 jj_la1_init_1();
01264 }
01265 private static void jj_la1_init_0() {
01266 jj_la1_0 = new int[] {0x6000,0x8c06000,0x8c06000,0x90000000,0x10000000,0x210000,0x0,0x0,0x80000600,0x98c4f800,0x80000600,};
01267 }
01268 private static void jj_la1_init_1() {
01269 jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0xe08000,0x800000,0xe08000,};
01270 }
01271 static final private JJCalls[] jj_2_rtns = new JJCalls[9];
01272 static private boolean jj_rescan = false;
01273 static private int jj_gc = 0;
01274
01276 public Func2Parser(java.io.InputStream stream) {
01277 this(stream, null);
01278 }
01280 public Func2Parser(java.io.InputStream stream, String encoding) {
01281 if (jj_initialized_once) {
01282 System.out.println("ERROR: Second call to constructor of static parser. ");
01283 System.out.println(" You must either use ReInit() or set the JavaCC option STATIC to false");
01284 System.out.println(" during parser generation.");
01285 throw new Error();
01286 }
01287 jj_initialized_once = true;
01288 try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
01289 token_source = new Func2ParserTokenManager(jj_input_stream);
01290 token = new Token();
01291 jj_ntk = -1;
01292 jj_gen = 0;
01293 for (int i = 0; i < 11; i++) jj_la1[i] = -1;
01294 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01295 }
01296
01298 static public void ReInit(java.io.InputStream stream) {
01299 ReInit(stream, null);
01300 }
01302 static public void ReInit(java.io.InputStream stream, String encoding) {
01303 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
01304 token_source.ReInit(jj_input_stream);
01305 token = new Token();
01306 jj_ntk = -1;
01307 jj_gen = 0;
01308 for (int i = 0; i < 11; i++) jj_la1[i] = -1;
01309 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01310 }
01311
01313 public Func2Parser(java.io.Reader stream) {
01314 if (jj_initialized_once) {
01315 System.out.println("ERROR: Second call to constructor of static parser. ");
01316 System.out.println(" You must either use ReInit() or set the JavaCC option STATIC to false");
01317 System.out.println(" during parser generation.");
01318 throw new Error();
01319 }
01320 jj_initialized_once = true;
01321 jj_input_stream = new JavaCharStream(stream, 1, 1);
01322 token_source = new Func2ParserTokenManager(jj_input_stream);
01323 token = new Token();
01324 jj_ntk = -1;
01325 jj_gen = 0;
01326 for (int i = 0; i < 11; i++) jj_la1[i] = -1;
01327 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01328 }
01329
01331 static public void ReInit(java.io.Reader stream) {
01332 jj_input_stream.ReInit(stream, 1, 1);
01333 token_source.ReInit(jj_input_stream);
01334 token = new Token();
01335 jj_ntk = -1;
01336 jj_gen = 0;
01337 for (int i = 0; i < 11; i++) jj_la1[i] = -1;
01338 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01339 }
01340
01342 public Func2Parser(Func2ParserTokenManager tm) {
01343 if (jj_initialized_once) {
01344 System.out.println("ERROR: Second call to constructor of static parser. ");
01345 System.out.println(" You must either use ReInit() or set the JavaCC option STATIC to false");
01346 System.out.println(" during parser generation.");
01347 throw new Error();
01348 }
01349 jj_initialized_once = true;
01350 token_source = tm;
01351 token = new Token();
01352 jj_ntk = -1;
01353 jj_gen = 0;
01354 for (int i = 0; i < 11; i++) jj_la1[i] = -1;
01355 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01356 }
01357
01359 public void ReInit(Func2ParserTokenManager tm) {
01360 token_source = tm;
01361 token = new Token();
01362 jj_ntk = -1;
01363 jj_gen = 0;
01364 for (int i = 0; i < 11; i++) jj_la1[i] = -1;
01365 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01366 }
01367
01368 static private Token jj_consume_token(int kind) throws ParseException {
01369 Token oldToken;
01370 if ((oldToken = token).next != null) token = token.next;
01371 else token = token.next = token_source.getNextToken();
01372 jj_ntk = -1;
01373 if (token.kind == kind) {
01374 jj_gen++;
01375 if (++jj_gc > 100) {
01376 jj_gc = 0;
01377 for (int i = 0; i < jj_2_rtns.length; i++) {
01378 JJCalls c = jj_2_rtns[i];
01379 while (c != null) {
01380 if (c.gen < jj_gen) c.first = null;
01381 c = c.next;
01382 }
01383 }
01384 }
01385 trace_token(token, "");
01386 return token;
01387 }
01388 token = oldToken;
01389 jj_kind = kind;
01390 throw generateParseException();
01391 }
01392
01393 static private final class LookaheadSuccess extends java.lang.Error { }
01394 static final private LookaheadSuccess jj_ls = new LookaheadSuccess();
01395 static private boolean jj_scan_token(int kind) {
01396 if (jj_scanpos == jj_lastpos) {
01397 jj_la--;
01398 if (jj_scanpos.next == null) {
01399 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
01400 } else {
01401 jj_lastpos = jj_scanpos = jj_scanpos.next;
01402 }
01403 } else {
01404 jj_scanpos = jj_scanpos.next;
01405 }
01406 if (jj_rescan) {
01407 int i = 0; Token tok = token;
01408 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
01409 if (tok != null) jj_add_error_token(kind, i);
01410 }
01411 if (jj_scanpos.kind != kind) return true;
01412 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
01413 return false;
01414 }
01415
01416
01418 static final public Token getNextToken() {
01419 if (token.next != null) token = token.next;
01420 else token = token.next = token_source.getNextToken();
01421 jj_ntk = -1;
01422 jj_gen++;
01423 trace_token(token, " (in getNextToken)");
01424 return token;
01425 }
01426
01428 static final public Token getToken(int index) {
01429 Token t = token;
01430 for (int i = 0; i < index; i++) {
01431 if (t.next != null) t = t.next;
01432 else t = t.next = token_source.getNextToken();
01433 }
01434 return t;
01435 }
01436
01437 static private int jj_ntk() {
01438 if ((jj_nt=token.next) == null)
01439 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
01440 else
01441 return (jj_ntk = jj_nt.kind);
01442 }
01443
01444 static private java.util.List jj_expentries = new java.util.ArrayList();
01445 static private int[] jj_expentry;
01446 static private int jj_kind = -1;
01447 static private int[] jj_lasttokens = new int[100];
01448 static private int jj_endpos;
01449
01450 static private void jj_add_error_token(int kind, int pos) {
01451 if (pos >= 100) return;
01452 if (pos == jj_endpos + 1) {
01453 jj_lasttokens[jj_endpos++] = kind;
01454 } else if (jj_endpos != 0) {
01455 jj_expentry = new int[jj_endpos];
01456 for (int i = 0; i < jj_endpos; i++) {
01457 jj_expentry[i] = jj_lasttokens[i];
01458 }
01459 jj_entries_loop: for (java.util.Iterator it = jj_expentries.iterator(); it.hasNext();) {
01460 int[] oldentry = (int[])(it.next());
01461 if (oldentry.length == jj_expentry.length) {
01462 for (int i = 0; i < jj_expentry.length; i++) {
01463 if (oldentry[i] != jj_expentry[i]) {
01464 continue jj_entries_loop;
01465 }
01466 }
01467 jj_expentries.add(jj_expentry);
01468 break jj_entries_loop;
01469 }
01470 }
01471 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
01472 }
01473 }
01474
01476 static public ParseException generateParseException() {
01477 jj_expentries.clear();
01478 boolean[] la1tokens = new boolean[62];
01479 if (jj_kind >= 0) {
01480 la1tokens[jj_kind] = true;
01481 jj_kind = -1;
01482 }
01483 for (int i = 0; i < 11; i++) {
01484 if (jj_la1[i] == jj_gen) {
01485 for (int j = 0; j < 32; j++) {
01486 if ((jj_la1_0[i] & (1<<j)) != 0) {
01487 la1tokens[j] = true;
01488 }
01489 if ((jj_la1_1[i] & (1<<j)) != 0) {
01490 la1tokens[32+j] = true;
01491 }
01492 }
01493 }
01494 }
01495 for (int i = 0; i < 62; i++) {
01496 if (la1tokens[i]) {
01497 jj_expentry = new int[1];
01498 jj_expentry[0] = i;
01499 jj_expentries.add(jj_expentry);
01500 }
01501 }
01502 jj_endpos = 0;
01503 jj_rescan_token();
01504 jj_add_error_token(0, 0);
01505 int[][] exptokseq = new int[jj_expentries.size()][];
01506 for (int i = 0; i < jj_expentries.size(); i++) {
01507 exptokseq[i] = (int[])jj_expentries.get(i);
01508 }
01509 return new ParseException(token, exptokseq, tokenImage);
01510 }
01511
01512 static private int trace_indent = 0;
01513 static private boolean trace_enabled = true;
01514
01516 static final public void enable_tracing() {
01517 trace_enabled = true;
01518 }
01519
01521 static final public void disable_tracing() {
01522 trace_enabled = false;
01523 }
01524
01525 static private void trace_call(String s) {
01526 if (trace_enabled) {
01527 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01528 System.out.println("Call: " + s);
01529 }
01530 trace_indent = trace_indent + 2;
01531 }
01532
01533 static private void trace_return(String s) {
01534 trace_indent = trace_indent - 2;
01535 if (trace_enabled) {
01536 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01537 System.out.println("Return: " + s);
01538 }
01539 }
01540
01541 static private void trace_token(Token t, String where) {
01542 if (trace_enabled) {
01543 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01544 System.out.print("Consumed token: <" + tokenImage[t.kind]);
01545 if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) {
01546 System.out.print(": \"" + t.image + "\"");
01547 }
01548 System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where);
01549 }
01550 }
01551
01552 static private void trace_scan(Token t1, int t2) {
01553 if (trace_enabled) {
01554 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01555 System.out.print("Visited token: <" + tokenImage[t1.kind]);
01556 if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) {
01557 System.out.print(": \"" + t1.image + "\"");
01558 }
01559 System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">");
01560 }
01561 }
01562
01563 static private void jj_rescan_token() {
01564 jj_rescan = true;
01565 for (int i = 0; i < 9; i++) {
01566 try {
01567 JJCalls p = jj_2_rtns[i];
01568 do {
01569 if (p.gen > jj_gen) {
01570 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
01571 switch (i) {
01572 case 0: jj_3_1(); break;
01573 case 1: jj_3_2(); break;
01574 case 2: jj_3_3(); break;
01575 case 3: jj_3_4(); break;
01576 case 4: jj_3_5(); break;
01577 case 5: jj_3_6(); break;
01578 case 6: jj_3_7(); break;
01579 case 7: jj_3_8(); break;
01580 case 8: jj_3_9(); break;
01581 }
01582 }
01583 p = p.next;
01584 } while (p != null);
01585 } catch(LookaheadSuccess ls) { }
01586 }
01587 jj_rescan = false;
01588 }
01589
01590 static private void jj_save(int index, int xla) {
01591 JJCalls p = jj_2_rtns[index];
01592 while (p.gen > jj_gen) {
01593 if (p.next == null) { p = p.next = new JJCalls(); break; }
01594 p = p.next;
01595 }
01596 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
01597 }
01598
01599 static final class JJCalls {
01600 int gen;
01601 Token first;
01602 int arg;
01603 JJCalls next;
01604 }
01605
01606 }