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 case IDENTIFIER:
00355 retorno = PId();
00356 break;
00357 case LPAREN:
00358 jj_consume_token(LPAREN);
00359 retorno = PExpressao();
00360 jj_consume_token(RPAREN);
00361 break;
00362 default:
00363 jj_la1[2] = jj_gen;
00364 jj_consume_token(-1);
00365 throw new ParseException();
00366 }
00367
00368
00369 {if (true) return retorno;}
00370 throw new Error("Missing return statement in function");
00371 } finally {
00372 trace_return("PExpPrimaria");
00373 }
00374 }
00375
00376 static final public List PListaId() throws ParseException {
00377 trace_call("PListaId");
00378 try {
00379 List retorno = null;
00380
00381 Id id;
00382 label_1:
00383 while (true) {
00384 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00385 case IDENTIFIER:
00386 ;
00387 break;
00388 default:
00389 jj_la1[3] = jj_gen;
00390 break label_1;
00391 }
00392 id = PId();
00393 if (retorno == null) {
00394
00395 retorno = new ArrayList();
00396
00397 retorno.add(id);
00398
00399 } else {
00400
00401 retorno.add(id);
00402
00403 }
00404 }
00405 {if (true) return retorno;}
00406 throw new Error("Missing return statement in function");
00407 } finally {
00408 trace_return("PListaId");
00409 }
00410 }
00411
00412 static final public DeclaracaoFuncional PDeclVar() throws ParseException {
00413 trace_call("PDeclVar");
00414 try {
00415 Id id;
00416
00417 Expressao expressao;
00418
00419 DeclaracaoFuncional retorno;
00420 jj_consume_token(VAR);
00421 id = PId();
00422 jj_consume_token(ASSIGN);
00423 expressao = PExpressao();
00424 {if (true) return new DecVariavel(id, expressao);}
00425 throw new Error("Missing return statement in function");
00426 } finally {
00427 trace_return("PDeclVar");
00428 }
00429 }
00430
00431 static final public DeclaracaoFuncional PDeclFuncao() throws ParseException {
00432 trace_call("PDeclFuncao");
00433 try {
00434 Id id;
00435
00436 Expressao expressao;
00437
00438 DeclaracaoFuncional retorno;
00439
00440 List lista;
00441 jj_consume_token(FUNC);
00442 id = PId();
00443 lista = PListaId();
00444 jj_consume_token(ASSIGN);
00445 expressao = PExpressao();
00446 {if (true) return new DecFuncao(id, new ValorFuncao(lista, expressao));}
00447 throw new Error("Missing return statement in function");
00448 } finally {
00449 trace_return("PDeclFuncao");
00450 }
00451 }
00452
00453 static final public List PDeclFuncional() throws ParseException {
00454 trace_call("PDeclFuncional");
00455 try {
00456 List retorno=null;
00457
00458 DeclaracaoFuncional decl;
00459 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00460 case VAR:
00461 decl = PDeclVar();
00462 break;
00463 case FUNC:
00464 decl = PDeclFuncao();
00465 break;
00466 default:
00467 jj_la1[4] = jj_gen;
00468 jj_consume_token(-1);
00469 throw new ParseException();
00470 }
00471 retorno = new ArrayList();
00472
00473 retorno.add(decl);
00474 label_2:
00475 while (true) {
00476 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00477 case COMMA:
00478 ;
00479 break;
00480 default:
00481 jj_la1[5] = jj_gen;
00482 break label_2;
00483 }
00484 if (jj_2_1(2147483647)) {
00485 jj_consume_token(COMMA);
00486 decl = PDeclVar();
00487 } else if (jj_2_2(2147483647)) {
00488 jj_consume_token(COMMA);
00489 decl = PDeclFuncao();
00490 } else {
00491 jj_consume_token(-1);
00492 throw new ParseException();
00493 }
00494 retorno.add(decl);
00495 }
00496 {if (true) return retorno;}
00497 throw new Error("Missing return statement in function");
00498 } finally {
00499 trace_return("PDeclFuncional");
00500 }
00501 }
00502
00503 static final public Expressao PExpDeclaracao() throws ParseException {
00504 trace_call("PExpDeclaracao");
00505 try {
00506 List declaracoes;
00507
00508 Expressao expressao;
00509 jj_consume_token(LET);
00510 declaracoes = PDeclFuncional();
00511 jj_consume_token(IN);
00512 expressao = PExpressao();
00513 {if (true) return new ExpDeclaracao(declaracoes, expressao);}
00514 throw new Error("Missing return statement in function");
00515 } finally {
00516 trace_return("PExpDeclaracao");
00517 }
00518 }
00519
00520 static final public Expressao PExpCondicional() throws ParseException {
00521 trace_call("PExpCondicional");
00522 try {
00523 Expressao expCond, expThen, expElse;
00524 jj_consume_token(IF);
00525 expCond = PExpressao();
00526 jj_consume_token(THEN);
00527 expThen = PExpressao();
00528 jj_consume_token(ELSE);
00529 expElse = PExpressao();
00530 {if (true) return new IfThenElse(expCond, expThen, expElse);}
00531 throw new Error("Missing return statement in function");
00532 } finally {
00533 trace_return("PExpCondicional");
00534 }
00535 }
00536
00537 static final public List PListaExpr() throws ParseException {
00538 trace_call("PListaExpr");
00539 try {
00540 List retorno = null;
00541
00542 Expressao expr;
00543 expr = PExpressao();
00544 retorno = new ArrayList();
00545
00546 retorno.add(expr);
00547 label_3:
00548 while (true) {
00549 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00550 case COMMA:
00551 ;
00552 break;
00553 default:
00554 jj_la1[6] = jj_gen;
00555 break label_3;
00556 }
00557 jj_consume_token(COMMA);
00558 expr = PExpressao();
00559 retorno.add(expr);
00560 }
00561 {if (true) return retorno;}
00562 throw new Error("Missing return statement in function");
00563 } finally {
00564 trace_return("PListaExpr");
00565 }
00566 }
00567
00568 static final public Expressao PExpUnaria() throws ParseException {
00569 trace_call("PExpUnaria");
00570 try {
00571 Expressao retorno;
00572 if (jj_2_3(2147483647)) {
00573 retorno = PExpMenos();
00574 } else if (jj_2_4(2147483647)) {
00575 retorno = PExpNot();
00576 } else if (jj_2_5(2147483647)) {
00577 retorno = PExpLength();
00578 } else if (jj_2_6(2147483647)) {
00579 retorno = PExpDeclaracao();
00580 } else if (jj_2_7(2147483647)) {
00581 retorno = PExpCondicional();
00582 } else if (jj_2_8(2147483647)) {
00583 retorno = PExpPrimaria();
00584 } else {
00585 jj_consume_token(-1);
00586 throw new ParseException();
00587 }
00588
00589
00590 {if (true) return retorno;}
00591 throw new Error("Missing return statement in function");
00592 } finally {
00593 trace_return("PExpUnaria");
00594 }
00595 }
00596
00597 static final public Expressao PExpBinaria() throws ParseException {
00598 trace_call("PExpBinaria");
00599 try {
00600 Expressao retorno, param2;
00601 Id id;
00602
00603 List list = null;
00604 retorno = PExpUnaria();
00605 label_4:
00606 while (true) {
00607 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00608 case AND:
00609 case OR:
00610 case LPAREN:
00611 case EQ:
00612 case CONCAT:
00613 case PLUS:
00614 case MINUS:
00615 ;
00616 break;
00617 default:
00618 jj_la1[7] = jj_gen;
00619 break label_4;
00620 }
00621 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00622 case PLUS:
00623 jj_consume_token(PLUS);
00624 param2 = PExpUnaria();
00625 retorno = new ExpSoma(retorno, param2);
00626 break;
00627 case MINUS:
00628 jj_consume_token(MINUS);
00629 param2 = PExpUnaria();
00630 retorno = new ExpSub(retorno, param2);
00631 break;
00632 case AND:
00633 jj_consume_token(AND);
00634 param2 = PExpUnaria();
00635 retorno = new ExpAnd(retorno, param2);
00636 break;
00637 case OR:
00638 jj_consume_token(OR);
00639 param2 = PExpUnaria();
00640 retorno = new ExpOr(retorno, param2);
00641 break;
00642 case EQ:
00643 jj_consume_token(EQ);
00644 param2 = PExpUnaria();
00645 retorno = new ExpEquals(retorno, param2);
00646 break;
00647 case CONCAT:
00648 jj_consume_token(CONCAT);
00649 param2 = PExpUnaria();
00650 retorno = new ExpConcat(retorno, param2);
00651 break;
00652 case LPAREN:
00653 jj_consume_token(LPAREN);
00654 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
00655 case NOT:
00656 case LENGTH:
00657 case TRUE:
00658 case FALSE:
00659 case LET:
00660 case IF:
00661 case FN:
00662 case INTEGER_LITERAL:
00663 case STRING_LITERAL:
00664 case IDENTIFIER:
00665 case LPAREN:
00666 case MINUS:
00667 list = PListaExpr();
00668 break;
00669 default:
00670 jj_la1[8] = jj_gen;
00671 ;
00672 }
00673 jj_consume_token(RPAREN);
00674 retorno = new Aplicacao((Expressao)retorno, list);
00675 break;
00676 default:
00677 jj_la1[9] = jj_gen;
00678 jj_consume_token(-1);
00679 throw new ParseException();
00680 }
00681 }
00682
00683
00684 {if (true) return retorno;}
00685 throw new Error("Missing return statement in function");
00686 } finally {
00687 trace_return("PExpBinaria");
00688 }
00689 }
00690
00691 static final public Expressao PExpressao() throws ParseException {
00692 trace_call("PExpressao");
00693 try {
00694 Expressao retorno;
00695 retorno = PExpBinaria();
00696 {if (true) return retorno;}
00697 throw new Error("Missing return statement in function");
00698 } finally {
00699 trace_return("PExpressao");
00700 }
00701 }
00702
00703 static final public Programa PPrograma() throws ParseException {
00704 trace_call("PPrograma");
00705 try {
00706 Expressao retorno;
00707 retorno = PExpressao();
00708
00709
00710 {if (true) return new Programa(retorno);}
00711 throw new Error("Missing return statement in function");
00712 } finally {
00713 trace_return("PPrograma");
00714 }
00715 }
00716
00717 static final private boolean jj_2_1(int xla) {
00718 jj_la = xla; jj_lastpos = jj_scanpos = token;
00719 try { return !jj_3_1(); }
00720 catch(LookaheadSuccess ls) { return true; }
00721 finally { jj_save(0, xla); }
00722 }
00723
00724 static final private boolean jj_2_2(int xla) {
00725 jj_la = xla; jj_lastpos = jj_scanpos = token;
00726 try { return !jj_3_2(); }
00727 catch(LookaheadSuccess ls) { return true; }
00728 finally { jj_save(1, xla); }
00729 }
00730
00731 static final private boolean jj_2_3(int xla) {
00732 jj_la = xla; jj_lastpos = jj_scanpos = token;
00733 try { return !jj_3_3(); }
00734 catch(LookaheadSuccess ls) { return true; }
00735 finally { jj_save(2, xla); }
00736 }
00737
00738 static final private boolean jj_2_4(int xla) {
00739 jj_la = xla; jj_lastpos = jj_scanpos = token;
00740 try { return !jj_3_4(); }
00741 catch(LookaheadSuccess ls) { return true; }
00742 finally { jj_save(3, xla); }
00743 }
00744
00745 static final private boolean jj_2_5(int xla) {
00746 jj_la = xla; jj_lastpos = jj_scanpos = token;
00747 try { return !jj_3_5(); }
00748 catch(LookaheadSuccess ls) { return true; }
00749 finally { jj_save(4, xla); }
00750 }
00751
00752 static final private boolean jj_2_6(int xla) {
00753 jj_la = xla; jj_lastpos = jj_scanpos = token;
00754 try { return !jj_3_6(); }
00755 catch(LookaheadSuccess ls) { return true; }
00756 finally { jj_save(5, xla); }
00757 }
00758
00759 static final private boolean jj_2_7(int xla) {
00760 jj_la = xla; jj_lastpos = jj_scanpos = token;
00761 try { return !jj_3_7(); }
00762 catch(LookaheadSuccess ls) { return true; }
00763 finally { jj_save(6, xla); }
00764 }
00765
00766 static final private boolean jj_2_8(int xla) {
00767 jj_la = xla; jj_lastpos = jj_scanpos = token;
00768 try { return !jj_3_8(); }
00769 catch(LookaheadSuccess ls) { return true; }
00770 finally { jj_save(7, xla); }
00771 }
00772
00773 static final private boolean jj_3R_15() {
00774 if (jj_scan_token(LPAREN)) return true;
00775 if (jj_3R_12()) return true;
00776 if (jj_scan_token(RPAREN)) return true;
00777 return false;
00778 }
00779
00780 static final private boolean jj_3R_40() {
00781 if (jj_scan_token(MINUS)) return true;
00782 if (jj_3R_26()) return true;
00783 return false;
00784 }
00785
00786 static final private boolean jj_3R_14() {
00787 if (jj_3R_21()) return true;
00788 return false;
00789 }
00790
00791 static final private boolean jj_3R_13() {
00792 if (jj_3R_20()) return true;
00793 return false;
00794 }
00795
00796 static final private boolean jj_3R_10() {
00797 Token xsp;
00798 xsp = jj_scanpos;
00799 if (jj_3R_13()) {
00800 jj_scanpos = xsp;
00801 if (jj_3R_14()) {
00802 jj_scanpos = xsp;
00803 if (jj_3R_15()) return true;
00804 }
00805 }
00806 return false;
00807 }
00808
00809 static final private boolean jj_3R_39() {
00810 if (jj_scan_token(PLUS)) return true;
00811 if (jj_3R_26()) return true;
00812 return false;
00813 }
00814
00815 static final private boolean jj_3R_27() {
00816 Token xsp;
00817 xsp = jj_scanpos;
00818 if (jj_3R_39()) {
00819 jj_scanpos = xsp;
00820 if (jj_3R_40()) {
00821 jj_scanpos = xsp;
00822 if (jj_3R_41()) {
00823 jj_scanpos = xsp;
00824 if (jj_3R_42()) {
00825 jj_scanpos = xsp;
00826 if (jj_3R_43()) {
00827 jj_scanpos = xsp;
00828 if (jj_3R_44()) {
00829 jj_scanpos = xsp;
00830 if (jj_3R_45()) return true;
00831 }
00832 }
00833 }
00834 }
00835 }
00836 }
00837 return false;
00838 }
00839
00840 static final private boolean jj_3R_48() {
00841 if (jj_scan_token(STRING_LITERAL)) return true;
00842 return false;
00843 }
00844
00845 static final private boolean jj_3_2() {
00846 if (jj_scan_token(COMMA)) return true;
00847 if (jj_scan_token(FUNC)) return true;
00848 return false;
00849 }
00850
00851 static final private boolean jj_3R_12() {
00852 if (jj_3R_19()) return true;
00853 return false;
00854 }
00855
00856 static final private boolean jj_3R_55() {
00857 if (jj_scan_token(COMMA)) return true;
00858 if (jj_3R_12()) return true;
00859 return false;
00860 }
00861
00862 static final private boolean jj_3R_22() {
00863 if (jj_scan_token(VAR)) return true;
00864 if (jj_3R_21()) return true;
00865 if (jj_scan_token(ASSIGN)) return true;
00866 if (jj_3R_12()) return true;
00867 return false;
00868 }
00869
00870 static final private boolean jj_3R_19() {
00871 if (jj_3R_26()) return true;
00872 Token xsp;
00873 while (true) {
00874 xsp = jj_scanpos;
00875 if (jj_3R_27()) { jj_scanpos = xsp; break; }
00876 }
00877 return false;
00878 }
00879
00880 static final private boolean jj_3_1() {
00881 if (jj_scan_token(COMMA)) return true;
00882 if (jj_scan_token(VAR)) return true;
00883 return false;
00884 }
00885
00886 static final private boolean jj_3R_21() {
00887 if (jj_scan_token(IDENTIFIER)) return true;
00888 return false;
00889 }
00890
00891 static final private boolean jj_3R_25() {
00892 if (jj_scan_token(COMMA)) return true;
00893 if (jj_3R_23()) return true;
00894 return false;
00895 }
00896
00897 static final private boolean jj_3R_53() {
00898 if (jj_scan_token(TRUE)) return true;
00899 return false;
00900 }
00901
00902 static final private boolean jj_3R_52() {
00903 if (jj_scan_token(FALSE)) return true;
00904 return false;
00905 }
00906
00907 static final private boolean jj_3R_47() {
00908 Token xsp;
00909 xsp = jj_scanpos;
00910 if (jj_3R_52()) {
00911 jj_scanpos = xsp;
00912 if (jj_3R_53()) return true;
00913 }
00914 return false;
00915 }
00916
00917 static final private boolean jj_3R_24() {
00918 if (jj_scan_token(COMMA)) return true;
00919 if (jj_3R_22()) return true;
00920 return false;
00921 }
00922
00923 static final private boolean jj_3R_18() {
00924 Token xsp;
00925 xsp = jj_scanpos;
00926 if (jj_3R_24()) {
00927 jj_scanpos = xsp;
00928 if (jj_3R_25()) return true;
00929 }
00930 return false;
00931 }
00932
00933 static final private boolean jj_3R_54() {
00934 if (jj_3R_12()) return true;
00935 Token xsp;
00936 while (true) {
00937 xsp = jj_scanpos;
00938 if (jj_3R_55()) { jj_scanpos = xsp; break; }
00939 }
00940 return false;
00941 }
00942
00943 static final private boolean jj_3R_51() {
00944 if (jj_3R_54()) return true;
00945 return false;
00946 }
00947
00948 static final private boolean jj_3_8() {
00949 if (jj_3R_10()) return true;
00950 return false;
00951 }
00952
00953 static final private boolean jj_3R_7() {
00954 if (jj_scan_token(LENGTH)) return true;
00955 if (jj_3R_10()) return true;
00956 return false;
00957 }
00958
00959 static final private boolean jj_3_7() {
00960 if (jj_3R_9()) return true;
00961 return false;
00962 }
00963
00964 static final private boolean jj_3R_31() {
00965 if (jj_3R_49()) return true;
00966 return false;
00967 }
00968
00969 static final private boolean jj_3R_45() {
00970 if (jj_scan_token(LPAREN)) return true;
00971 Token xsp;
00972 xsp = jj_scanpos;
00973 if (jj_3R_51()) jj_scanpos = xsp;
00974 if (jj_scan_token(RPAREN)) return true;
00975 return false;
00976 }
00977
00978 static final private boolean jj_3R_17() {
00979 if (jj_3R_23()) return true;
00980 return false;
00981 }
00982
00983 static final private boolean jj_3R_30() {
00984 if (jj_3R_48()) return true;
00985 return false;
00986 }
00987
00988 static final private boolean jj_3R_38() {
00989 if (jj_3R_10()) return true;
00990 return false;
00991 }
00992
00993 static final private boolean jj_3R_29() {
00994 if (jj_3R_47()) return true;
00995 return false;
00996 }
00997
00998 static final private boolean jj_3_6() {
00999 if (jj_3R_8()) return true;
01000 return false;
01001 }
01002
01003 static final private boolean jj_3R_16() {
01004 if (jj_3R_22()) return true;
01005 return false;
01006 }
01007
01008 static final private boolean jj_3R_28() {
01009 if (jj_3R_46()) return true;
01010 return false;
01011 }
01012
01013 static final private boolean jj_3R_46() {
01014 if (jj_scan_token(INTEGER_LITERAL)) return true;
01015 return false;
01016 }
01017
01018 static final private boolean jj_3R_37() {
01019 if (jj_3R_9()) return true;
01020 return false;
01021 }
01022
01023 static final private boolean jj_3R_11() {
01024 Token xsp;
01025 xsp = jj_scanpos;
01026 if (jj_3R_16()) {
01027 jj_scanpos = xsp;
01028 if (jj_3R_17()) return true;
01029 }
01030 while (true) {
01031 xsp = jj_scanpos;
01032 if (jj_3R_18()) { jj_scanpos = xsp; break; }
01033 }
01034 return false;
01035 }
01036
01037 static final private boolean jj_3_5() {
01038 if (jj_3R_7()) return true;
01039 return false;
01040 }
01041
01042 static final private boolean jj_3R_20() {
01043 Token xsp;
01044 xsp = jj_scanpos;
01045 if (jj_3R_28()) {
01046 jj_scanpos = xsp;
01047 if (jj_3R_29()) {
01048 jj_scanpos = xsp;
01049 if (jj_3R_30()) {
01050 jj_scanpos = xsp;
01051 if (jj_3R_31()) return true;
01052 }
01053 }
01054 }
01055 return false;
01056 }
01057
01058 static final private boolean jj_3R_44() {
01059 if (jj_scan_token(CONCAT)) return true;
01060 if (jj_3R_26()) return true;
01061 return false;
01062 }
01063
01064 static final private boolean jj_3R_36() {
01065 if (jj_3R_8()) return true;
01066 return false;
01067 }
01068
01069 static final private boolean jj_3_4() {
01070 if (jj_3R_6()) return true;
01071 return false;
01072 }
01073
01074 static final private boolean jj_3R_9() {
01075 if (jj_scan_token(IF)) return true;
01076 if (jj_3R_12()) return true;
01077 if (jj_scan_token(THEN)) return true;
01078 if (jj_3R_12()) return true;
01079 if (jj_scan_token(ELSE)) return true;
01080 if (jj_3R_12()) return true;
01081 return false;
01082 }
01083
01084 static final private boolean jj_3R_6() {
01085 if (jj_scan_token(NOT)) return true;
01086 if (jj_3R_10()) return true;
01087 return false;
01088 }
01089
01090 static final private boolean jj_3R_43() {
01091 if (jj_scan_token(EQ)) return true;
01092 if (jj_3R_26()) return true;
01093 return false;
01094 }
01095
01096 static final private boolean jj_3R_35() {
01097 if (jj_3R_7()) return true;
01098 return false;
01099 }
01100
01101 static final private boolean jj_3R_50() {
01102 if (jj_3R_21()) return true;
01103 return false;
01104 }
01105
01106 static final private boolean jj_3_3() {
01107 if (jj_3R_5()) return true;
01108 return false;
01109 }
01110
01111 static final private boolean jj_3R_32() {
01112 Token xsp;
01113 while (true) {
01114 xsp = jj_scanpos;
01115 if (jj_3R_50()) { jj_scanpos = xsp; break; }
01116 }
01117 return false;
01118 }
01119
01120 static final private boolean jj_3R_34() {
01121 if (jj_3R_6()) return true;
01122 return false;
01123 }
01124
01125 static final private boolean jj_3R_42() {
01126 if (jj_scan_token(OR)) return true;
01127 if (jj_3R_26()) return true;
01128 return false;
01129 }
01130
01131 static final private boolean jj_3R_49() {
01132 if (jj_scan_token(FN)) return true;
01133 if (jj_3R_32()) return true;
01134 if (jj_scan_token(DOT)) return true;
01135 if (jj_3R_12()) return true;
01136 return false;
01137 }
01138
01139 static final private boolean jj_3R_33() {
01140 if (jj_3R_5()) return true;
01141 return false;
01142 }
01143
01144 static final private boolean jj_3R_23() {
01145 if (jj_scan_token(FUNC)) return true;
01146 if (jj_3R_21()) return true;
01147 if (jj_3R_32()) return true;
01148 if (jj_scan_token(ASSIGN)) return true;
01149 if (jj_3R_12()) return true;
01150 return false;
01151 }
01152
01153 static final private boolean jj_3R_26() {
01154 Token xsp;
01155 xsp = jj_scanpos;
01156 if (jj_3R_33()) {
01157 jj_scanpos = xsp;
01158 if (jj_3R_34()) {
01159 jj_scanpos = xsp;
01160 if (jj_3R_35()) {
01161 jj_scanpos = xsp;
01162 if (jj_3R_36()) {
01163 jj_scanpos = xsp;
01164 if (jj_3R_37()) {
01165 jj_scanpos = xsp;
01166 if (jj_3R_38()) return true;
01167 }
01168 }
01169 }
01170 }
01171 }
01172 return false;
01173 }
01174
01175 static final private boolean jj_3R_8() {
01176 if (jj_scan_token(LET)) return true;
01177 if (jj_3R_11()) return true;
01178 if (jj_scan_token(IN)) return true;
01179 if (jj_3R_12()) return true;
01180 return false;
01181 }
01182
01183 static final private boolean jj_3R_41() {
01184 if (jj_scan_token(AND)) return true;
01185 if (jj_3R_26()) return true;
01186 return false;
01187 }
01188
01189 static final private boolean jj_3R_5() {
01190 if (jj_scan_token(MINUS)) return true;
01191 if (jj_3R_10()) return true;
01192 return false;
01193 }
01194
01195 static private boolean jj_initialized_once = false;
01196 static public Func2ParserTokenManager token_source;
01197 static JavaCharStream jj_input_stream;
01198 static public Token token, jj_nt;
01199 static private int jj_ntk;
01200 static private Token jj_scanpos, jj_lastpos;
01201 static private int jj_la;
01202 static public boolean lookingAhead = false;
01203 static private boolean jj_semLA;
01204 static private int jj_gen;
01205 static final private int[] jj_la1 = new int[10];
01206 static private int[] jj_la1_0;
01207 static private int[] jj_la1_1;
01208 static {
01209 jj_la1_0();
01210 jj_la1_1();
01211 }
01212 private static void jj_la1_0() {
01213 jj_la1_0 = new int[] {0x6000,0x8c06000,0x98c06000,0x10000000,0x210000,0x0,0x0,0x80000600,0x98c4f800,0x80000600,};
01214 }
01215 private static void jj_la1_1() {
01216 jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x40,0x40,0xe08000,0x800000,0xe08000,};
01217 }
01218 static final private JJCalls[] jj_2_rtns = new JJCalls[8];
01219 static private boolean jj_rescan = false;
01220 static private int jj_gc = 0;
01221
01222 public Func2Parser(java.io.InputStream stream) {
01223 this(stream, null);
01224 }
01225 public Func2Parser(java.io.InputStream stream, String encoding) {
01226 if (jj_initialized_once) {
01227 System.out.println("ERROR: Second call to constructor of static parser. You must");
01228 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false");
01229 System.out.println(" during parser generation.");
01230 throw new Error();
01231 }
01232 jj_initialized_once = true;
01233 try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
01234 token_source = new Func2ParserTokenManager(jj_input_stream);
01235 token = new Token();
01236 jj_ntk = -1;
01237 jj_gen = 0;
01238 for (int i = 0; i < 10; i++) jj_la1[i] = -1;
01239 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01240 }
01241
01242 static public void ReInit(java.io.InputStream stream) {
01243 ReInit(stream, null);
01244 }
01245 static public void ReInit(java.io.InputStream stream, String encoding) {
01246 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
01247 token_source.ReInit(jj_input_stream);
01248 token = new Token();
01249 jj_ntk = -1;
01250 jj_gen = 0;
01251 for (int i = 0; i < 10; i++) jj_la1[i] = -1;
01252 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01253 }
01254
01255 public Func2Parser(java.io.Reader stream) {
01256 if (jj_initialized_once) {
01257 System.out.println("ERROR: Second call to constructor of static parser. You must");
01258 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false");
01259 System.out.println(" during parser generation.");
01260 throw new Error();
01261 }
01262 jj_initialized_once = true;
01263 jj_input_stream = new JavaCharStream(stream, 1, 1);
01264 token_source = new Func2ParserTokenManager(jj_input_stream);
01265 token = new Token();
01266 jj_ntk = -1;
01267 jj_gen = 0;
01268 for (int i = 0; i < 10; i++) jj_la1[i] = -1;
01269 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01270 }
01271
01272 static public void ReInit(java.io.Reader stream) {
01273 jj_input_stream.ReInit(stream, 1, 1);
01274 token_source.ReInit(jj_input_stream);
01275 token = new Token();
01276 jj_ntk = -1;
01277 jj_gen = 0;
01278 for (int i = 0; i < 10; i++) jj_la1[i] = -1;
01279 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01280 }
01281
01282 public Func2Parser(Func2ParserTokenManager tm) {
01283 if (jj_initialized_once) {
01284 System.out.println("ERROR: Second call to constructor of static parser. You must");
01285 System.out.println(" either use ReInit() or set the JavaCC option STATIC to false");
01286 System.out.println(" during parser generation.");
01287 throw new Error();
01288 }
01289 jj_initialized_once = true;
01290 token_source = tm;
01291 token = new Token();
01292 jj_ntk = -1;
01293 jj_gen = 0;
01294 for (int i = 0; i < 10; i++) jj_la1[i] = -1;
01295 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01296 }
01297
01298 public void ReInit(Func2ParserTokenManager tm) {
01299 token_source = tm;
01300 token = new Token();
01301 jj_ntk = -1;
01302 jj_gen = 0;
01303 for (int i = 0; i < 10; i++) jj_la1[i] = -1;
01304 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
01305 }
01306
01307 static final private Token jj_consume_token(int kind) throws ParseException {
01308 Token oldToken;
01309 if ((oldToken = token).next != null) token = token.next;
01310 else token = token.next = token_source.getNextToken();
01311 jj_ntk = -1;
01312 if (token.kind == kind) {
01313 jj_gen++;
01314 if (++jj_gc > 100) {
01315 jj_gc = 0;
01316 for (int i = 0; i < jj_2_rtns.length; i++) {
01317 JJCalls c = jj_2_rtns[i];
01318 while (c != null) {
01319 if (c.gen < jj_gen) c.first = null;
01320 c = c.next;
01321 }
01322 }
01323 }
01324 trace_token(token, "");
01325 return token;
01326 }
01327 token = oldToken;
01328 jj_kind = kind;
01329 throw generateParseException();
01330 }
01331
01332 static private final class LookaheadSuccess extends java.lang.Error { }
01333 static final private LookaheadSuccess jj_ls = new LookaheadSuccess();
01334 static final private boolean jj_scan_token(int kind) {
01335 if (jj_scanpos == jj_lastpos) {
01336 jj_la--;
01337 if (jj_scanpos.next == null) {
01338 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
01339 } else {
01340 jj_lastpos = jj_scanpos = jj_scanpos.next;
01341 }
01342 } else {
01343 jj_scanpos = jj_scanpos.next;
01344 }
01345 if (jj_rescan) {
01346 int i = 0; Token tok = token;
01347 while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
01348 if (tok != null) jj_add_error_token(kind, i);
01349 }
01350 if (jj_scanpos.kind != kind) return true;
01351 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
01352 return false;
01353 }
01354
01355 static final public Token getNextToken() {
01356 if (token.next != null) token = token.next;
01357 else token = token.next = token_source.getNextToken();
01358 jj_ntk = -1;
01359 jj_gen++;
01360 trace_token(token, " (in getNextToken)");
01361 return token;
01362 }
01363
01364 static final public Token getToken(int index) {
01365 Token t = lookingAhead ? jj_scanpos : token;
01366 for (int i = 0; i < index; i++) {
01367 if (t.next != null) t = t.next;
01368 else t = t.next = token_source.getNextToken();
01369 }
01370 return t;
01371 }
01372
01373 static final private int jj_ntk() {
01374 if ((jj_nt=token.next) == null)
01375 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
01376 else
01377 return (jj_ntk = jj_nt.kind);
01378 }
01379
01380 static private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>();
01381 static private int[] jj_expentry;
01382 static private int jj_kind = -1;
01383 static private int[] jj_lasttokens = new int[100];
01384 static private int jj_endpos;
01385
01386 static private void jj_add_error_token(int kind, int pos) {
01387 if (pos >= 100) return;
01388 if (pos == jj_endpos + 1) {
01389 jj_lasttokens[jj_endpos++] = kind;
01390 } else if (jj_endpos != 0) {
01391 jj_expentry = new int[jj_endpos];
01392 for (int i = 0; i < jj_endpos; i++) {
01393 jj_expentry[i] = jj_lasttokens[i];
01394 }
01395 boolean exists = false;
01396 for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
01397 int[] oldentry = (int[])(e.nextElement());
01398 if (oldentry.length == jj_expentry.length) {
01399 exists = true;
01400 for (int i = 0; i < jj_expentry.length; i++) {
01401 if (oldentry[i] != jj_expentry[i]) {
01402 exists = false;
01403 break;
01404 }
01405 }
01406 if (exists) break;
01407 }
01408 }
01409 if (!exists) jj_expentries.addElement(jj_expentry);
01410 if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
01411 }
01412 }
01413
01414 static public ParseException generateParseException() {
01415 jj_expentries.removeAllElements();
01416 boolean[] la1tokens = new boolean[62];
01417 for (int i = 0; i < 62; i++) {
01418 la1tokens[i] = false;
01419 }
01420 if (jj_kind >= 0) {
01421 la1tokens[jj_kind] = true;
01422 jj_kind = -1;
01423 }
01424 for (int i = 0; i < 10; i++) {
01425 if (jj_la1[i] == jj_gen) {
01426 for (int j = 0; j < 32; j++) {
01427 if ((jj_la1_0[i] & (1<<j)) != 0) {
01428 la1tokens[j] = true;
01429 }
01430 if ((jj_la1_1[i] & (1<<j)) != 0) {
01431 la1tokens[32+j] = true;
01432 }
01433 }
01434 }
01435 }
01436 for (int i = 0; i < 62; i++) {
01437 if (la1tokens[i]) {
01438 jj_expentry = new int[1];
01439 jj_expentry[0] = i;
01440 jj_expentries.addElement(jj_expentry);
01441 }
01442 }
01443 jj_endpos = 0;
01444 jj_rescan_token();
01445 jj_add_error_token(0, 0);
01446 int[][] exptokseq = new int[jj_expentries.size()][];
01447 for (int i = 0; i < jj_expentries.size(); i++) {
01448 exptokseq[i] = (int[])jj_expentries.elementAt(i);
01449 }
01450 return new ParseException(token, exptokseq, tokenImage);
01451 }
01452
01453 static private int trace_indent = 0;
01454 static private boolean trace_enabled = true;
01455
01456 static final public void enable_tracing() {
01457 trace_enabled = true;
01458 }
01459
01460 static final public void disable_tracing() {
01461 trace_enabled = false;
01462 }
01463
01464 static final private void trace_call(String s) {
01465 if (trace_enabled) {
01466 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01467 System.out.println("Call: " + s);
01468 }
01469 trace_indent = trace_indent + 2;
01470 }
01471
01472 static final private void trace_return(String s) {
01473 trace_indent = trace_indent - 2;
01474 if (trace_enabled) {
01475 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01476 System.out.println("Return: " + s);
01477 }
01478 }
01479
01480 static final private void trace_token(Token t, String where) {
01481 if (trace_enabled) {
01482 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01483 System.out.print("Consumed token: <" + tokenImage[t.kind]);
01484 if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) {
01485 System.out.print(": \"" + t.image + "\"");
01486 }
01487 System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where);
01488 }
01489 }
01490
01491 static final private void trace_scan(Token t1, int t2) {
01492 if (trace_enabled) {
01493 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
01494 System.out.print("Visited token: <" + tokenImage[t1.kind]);
01495 if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) {
01496 System.out.print(": \"" + t1.image + "\"");
01497 }
01498 System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">");
01499 }
01500 }
01501
01502 static final private void jj_rescan_token() {
01503 jj_rescan = true;
01504 for (int i = 0; i < 8; i++) {
01505 try {
01506 JJCalls p = jj_2_rtns[i];
01507 do {
01508 if (p.gen > jj_gen) {
01509 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
01510 switch (i) {
01511 case 0: jj_3_1(); break;
01512 case 1: jj_3_2(); break;
01513 case 2: jj_3_3(); break;
01514 case 3: jj_3_4(); break;
01515 case 4: jj_3_5(); break;
01516 case 5: jj_3_6(); break;
01517 case 6: jj_3_7(); break;
01518 case 7: jj_3_8(); break;
01519 }
01520 }
01521 p = p.next;
01522 } while (p != null);
01523 } catch(LookaheadSuccess ls) { }
01524 }
01525 jj_rescan = false;
01526 }
01527
01528 static final private void jj_save(int index, int xla) {
01529 JJCalls p = jj_2_rtns[index];
01530 while (p.gen > jj_gen) {
01531 if (p.next == null) { p = p.next = new JJCalls(); break; }
01532 p = p.next;
01533 }
01534 p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
01535 }
01536
01537 static final class JJCalls {
01538 int gen;
01539 Token first;
01540 int arg;
01541 JJCalls next;
01542 }
01543
01544 }