/plugins/Beauty/tags/beauty-0.4.0/src/beauty/parsers/javacc/JavaCCParser.java

# · Java · 2619 lines · 2479 code · 106 blank · 34 comment · 339 complexity · a895c9e82aa189c4e50b5faf4e9482e8 MD5 · raw file

Large files are truncated click here to view the full file

  1. /* Generated By:JavaCC: Do not edit this line. JavaCCParser.java */
  2. package beauty.parsers.javacc;
  3. import java.io.*;
  4. import java.util.*;
  5. public class JavaCCParser implements JavaCCParserConstants {
  6. Token t;
  7. String lineSep = System.getProperty("line.separator");
  8. boolean IN_CU = false;
  9. public String getText() {
  10. return token_source.getText();
  11. }
  12. public void resetTokenSource() {
  13. token_source.reset();
  14. }
  15. private void add(Token t) {
  16. token_source.add(t);
  17. }
  18. private void add(String s) {
  19. token_source.add(s);
  20. }
  21. private void trim() {
  22. token_source.trim();
  23. }
  24. private void trimNL() {
  25. token_source.trimNL();
  26. }
  27. void Block() {
  28. try {
  29. Block(false);
  30. }
  31. catch(Exception e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. private void trimWhitespace() {
  36. token_source.trimWhitespace();
  37. }
  38. private void write() {
  39. token_source.write();
  40. }
  41. private void writeln() {
  42. token_source.writeln();
  43. }
  44. public void setLineSeparator(String le) {
  45. lineSep = le;
  46. token_source.setLineSeparator(le);
  47. }
  48. /*
  49. * Returns true if the next token is not in the FOLLOW list of "expansion".
  50. * It is used to decide when the end of an "expansion" has been reached.
  51. */
  52. boolean notTailOfExpansionUnit() {
  53. Token t = getToken(1);
  54. if (t.kind == BIT_OR || t.kind == COMMA || t.kind == RPAREN || t.kind == RBRACE || t.kind == RBRACKET) return false;
  55. return true;
  56. }
  57. public JavaCCParser(String fileName)
  58. {
  59. this(System.in);
  60. try { ReInit(new FileInputStream(new File(fileName))); }
  61. catch(Exception e) { e.printStackTrace(); }
  62. }
  63. public static void main(String args[]) {
  64. JavaCCParser parser;
  65. if (args.length == 0) {
  66. System.out.println("Java Parser Version 1.1: Reading from standard input . . .");
  67. parser = new JavaCCParser(System.in);
  68. } else if (args.length == 1) {
  69. System.out.println("Java Parser Version 1.1: Reading from file " + args[0] + " . . .");
  70. try {
  71. parser = new JavaCCParser(new java.io.FileInputStream(args[0]));
  72. } catch (java.io.FileNotFoundException e) {
  73. System.out.println("Java Parser Version 1.1: File " + args[0] + " not found.");
  74. return;
  75. }
  76. } else {
  77. System.out.println("Java Parser Version 1.1: Usage is one of:");
  78. System.out.println(" java JavaCCParser < inputfile");
  79. System.out.println("OR");
  80. System.out.println(" java JavaCCParser inputfile");
  81. return;
  82. }
  83. try {
  84. parser.CompilationUnit();
  85. System.out.println("Java Parser Version 1.1: Java program parsed successfully.");
  86. } catch (ParseException e) {
  87. System.out.println(e.getMessage());
  88. System.out.println("Java Parser Version 1.1: Encountered errors during parse.");
  89. }
  90. }
  91. /************************************************
  92. * THE JAVACC GRAMMAR SPECIFICATION STARTS HERE *
  93. ************************************************/
  94. final public void javacc_input() throws ParseException {
  95. javacc_options();
  96. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("PARSER_BEGIN")) {
  97. } else {
  98. jj_consume_token(-1);
  99. throw new ParseException();
  100. }
  101. t = jj_consume_token(IDENTIFIER);
  102. jj_consume_token(LPAREN);
  103. write(); add(t); add(" (");
  104. identifier();
  105. jj_consume_token(RPAREN);
  106. add(")"); write();
  107. CompilationUnit();
  108. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("PARSER_END")) {
  109. } else {
  110. jj_consume_token(-1);
  111. throw new ParseException();
  112. }
  113. t = jj_consume_token(IDENTIFIER);
  114. jj_consume_token(LPAREN);
  115. write(); add(t); add(" (");
  116. identifier();
  117. jj_consume_token(RPAREN);
  118. add(")"); write();
  119. label_1:
  120. while (true) {
  121. production();
  122. if (jj_2_1(1)) {
  123. ;
  124. } else {
  125. break label_1;
  126. }
  127. }
  128. jj_consume_token(0);
  129. }
  130. final public void javacc_options() throws ParseException {
  131. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("options")) {
  132. t = jj_consume_token(IDENTIFIER);
  133. jj_consume_token(LBRACE);
  134. add(t); add(" {"); write(); ++token_source.level;
  135. label_2:
  136. while (true) {
  137. option_binding();
  138. if (jj_2_2(1)) {
  139. ;
  140. } else {
  141. break label_2;
  142. }
  143. }
  144. jj_consume_token(RBRACE);
  145. write(); --token_source.level; add("}"); write();
  146. } else {
  147. ;
  148. }
  149. }
  150. final public void option_binding() throws ParseException {
  151. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("LOOKAHEAD")) {
  152. identifier();
  153. } else if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("IGNORE_CASE")) {
  154. identifier();
  155. } else {
  156. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  157. case IDENTIFIER:
  158. identifier();
  159. break;
  160. case STATIC:
  161. jj_consume_token(STATIC);
  162. add("static");
  163. break;
  164. default:
  165. jj_consume_token(-1);
  166. throw new ParseException();
  167. }
  168. }
  169. jj_consume_token(ASSIGN);
  170. add(" = ");
  171. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  172. case INTEGER_LITERAL:
  173. IntegerLiteral();
  174. break;
  175. case FALSE:
  176. case TRUE:
  177. BooleanLiteral();
  178. break;
  179. case STRING_LITERAL:
  180. StringLiteral();
  181. break;
  182. default:
  183. jj_consume_token(-1);
  184. throw new ParseException();
  185. }
  186. jj_consume_token(SEMICOLON);
  187. add(";"); write();
  188. }
  189. final public void production() throws ParseException {
  190. if (jj_2_3(1)) {
  191. javacode_production();
  192. } else if (jj_2_4(1)) {
  193. regular_expr_production();
  194. } else if (jj_2_5(1)) {
  195. token_manager_decls();
  196. } else {
  197. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  198. case BOOLEAN:
  199. case BYTE:
  200. case CHAR:
  201. case DOUBLE:
  202. case FLOAT:
  203. case INT:
  204. case LONG:
  205. case SHORT:
  206. case VOID:
  207. case IDENTIFIER:
  208. bnf_production();
  209. break;
  210. default:
  211. jj_consume_token(-1);
  212. throw new ParseException();
  213. }
  214. }
  215. }
  216. final public void javacode_production() throws ParseException {
  217. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("JAVACODE")) {
  218. } else {
  219. jj_consume_token(-1);
  220. throw new ParseException();
  221. }
  222. identifier();
  223. ResultType();
  224. identifier();
  225. FormalParameters();
  226. if (jj_2_6(2)) {
  227. jj_consume_token(THROWS);
  228. Name();
  229. label_3:
  230. while (true) {
  231. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  232. case COMMA:
  233. ;
  234. break;
  235. default:
  236. break label_3;
  237. }
  238. jj_consume_token(COMMA);
  239. Name();
  240. }
  241. } else {
  242. ;
  243. }
  244. if (jj_2_7(2)) {
  245. node_descriptor();
  246. } else {
  247. ;
  248. }
  249. Block();
  250. }
  251. final public void bnf_production() throws ParseException {
  252. ResultType();
  253. identifier();
  254. FormalParameters();
  255. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  256. case THROWS:
  257. jj_consume_token(THROWS);
  258. Name();
  259. label_4:
  260. while (true) {
  261. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  262. case COMMA:
  263. ;
  264. break;
  265. default:
  266. break label_4;
  267. }
  268. jj_consume_token(COMMA);
  269. Name();
  270. }
  271. break;
  272. default:
  273. ;
  274. }
  275. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  276. case 120:
  277. node_descriptor();
  278. break;
  279. default:
  280. ;
  281. }
  282. jj_consume_token(COLON);
  283. add(" :"); write();
  284. Block(true);
  285. jj_consume_token(LBRACE);
  286. write(); add("{"); write(); ++token_source.level;
  287. expansion_choices();
  288. jj_consume_token(RBRACE);
  289. writeln(); --token_source.level; add("}"); write();
  290. }
  291. final public void regular_expr_production() throws ParseException {
  292. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  293. case LT:
  294. if (jj_2_8(2)) {
  295. jj_consume_token(LT);
  296. jj_consume_token(STAR);
  297. jj_consume_token(GT);
  298. add("<*>"); write();
  299. } else {
  300. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  301. case LT:
  302. jj_consume_token(LT);
  303. t = jj_consume_token(IDENTIFIER);
  304. add("<"); add(t);
  305. label_5:
  306. while (true) {
  307. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  308. case COMMA:
  309. ;
  310. break;
  311. default:
  312. break label_5;
  313. }
  314. jj_consume_token(COMMA);
  315. t = jj_consume_token(IDENTIFIER);
  316. add(", "); add(t);
  317. }
  318. jj_consume_token(GT);
  319. add(">"); write();
  320. break;
  321. default:
  322. jj_consume_token(-1);
  323. throw new ParseException();
  324. }
  325. }
  326. break;
  327. default:
  328. ;
  329. }
  330. regexpr_kind();
  331. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  332. case LBRACKET:
  333. jj_consume_token(LBRACKET);
  334. add("[");
  335. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("IGNORE_CASE")) {
  336. } else {
  337. jj_consume_token(-1);
  338. throw new ParseException();
  339. }
  340. identifier();
  341. jj_consume_token(RBRACKET);
  342. add("]");
  343. break;
  344. default:
  345. ;
  346. }
  347. jj_consume_token(COLON);
  348. add(" : "); write();
  349. jj_consume_token(LBRACE);
  350. add("{"); write(); ++token_source.level;
  351. regexpr_spec();
  352. label_6:
  353. while (true) {
  354. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  355. case BIT_OR:
  356. ;
  357. break;
  358. default:
  359. break label_6;
  360. }
  361. jj_consume_token(BIT_OR);
  362. writeln(); add("| ");
  363. regexpr_spec();
  364. }
  365. jj_consume_token(RBRACE);
  366. writeln(); --token_source.level; add(token_source.ls + "}"); write();
  367. }
  368. final public void token_manager_decls() throws ParseException {
  369. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("TOKEN_MGR_DECLS")) {
  370. } else {
  371. jj_consume_token(-1);
  372. throw new ParseException();
  373. }
  374. t = jj_consume_token(IDENTIFIER);
  375. jj_consume_token(COLON);
  376. add(t); add(" : ");
  377. TokenMgrDeclBlock();
  378. }
  379. final public void regexpr_kind() throws ParseException {
  380. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("TOKEN")) {
  381. identifier();
  382. } else if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("SPECIAL_TOKEN")) {
  383. identifier();
  384. } else if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("SKIP")) {
  385. identifier();
  386. } else if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("MORE")) {
  387. identifier();
  388. } else {
  389. jj_consume_token(-1);
  390. throw new ParseException();
  391. }
  392. }
  393. final public void regexpr_spec() throws ParseException {
  394. regular_expression();
  395. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  396. case LBRACE:
  397. Block();
  398. break;
  399. default:
  400. ;
  401. }
  402. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  403. case COLON:
  404. jj_consume_token(COLON);
  405. t = jj_consume_token(IDENTIFIER);
  406. add(" : "); add(t);
  407. break;
  408. default:
  409. ;
  410. }
  411. }
  412. final public void expansion_choices() throws ParseException {
  413. expansion();
  414. label_7:
  415. while (true) {
  416. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  417. case BIT_OR:
  418. ;
  419. break;
  420. default:
  421. break label_7;
  422. }
  423. jj_consume_token(BIT_OR);
  424. writeln(); add("| ");
  425. expansion();
  426. write();
  427. }
  428. }
  429. final public void expansion() throws ParseException {
  430. if (jj_2_9(1)) {
  431. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("LOOKAHEAD")) {
  432. } else {
  433. jj_consume_token(-1);
  434. throw new ParseException();
  435. }
  436. t = jj_consume_token(IDENTIFIER);
  437. jj_consume_token(LPAREN);
  438. add(t); add(" ( ");
  439. local_lookahead();
  440. jj_consume_token(RPAREN);
  441. add(" ) "); writeln();
  442. } else {
  443. ;
  444. }
  445. label_8:
  446. while (true) {
  447. expansion_unit();
  448. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  449. case 120:
  450. node_descriptor();
  451. break;
  452. default:
  453. ;
  454. }
  455. if (notTailOfExpansionUnit()) {
  456. ;
  457. } else {
  458. break label_8;
  459. }
  460. }
  461. }
  462. final public void local_lookahead() throws ParseException {
  463. boolean commaAtEnd = false, emptyLA = true;
  464. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  465. case INTEGER_LITERAL:
  466. IntegerLiteral();
  467. emptyLA = false;
  468. break;
  469. default:
  470. ;
  471. }
  472. if (!emptyLA && (getToken(1).kind != RPAREN)) {
  473. jj_consume_token(COMMA);
  474. add(", ");
  475. commaAtEnd = true;
  476. } else {
  477. ;
  478. }
  479. if (getToken(1).kind != RPAREN && getToken(1).kind != LBRACE) {
  480. expansion_choices();
  481. emptyLA = false; commaAtEnd = false;
  482. } else {
  483. ;
  484. }
  485. if (!emptyLA && !commaAtEnd && (getToken(1).kind != RPAREN)) {
  486. jj_consume_token(COMMA);
  487. add(", ");
  488. commaAtEnd = true;
  489. } else {
  490. ;
  491. }
  492. if (emptyLA || commaAtEnd) {
  493. jj_consume_token(LBRACE);
  494. add("{ ");
  495. Expression();
  496. jj_consume_token(RBRACE);
  497. add(" }");
  498. } else {
  499. ;
  500. }
  501. }
  502. final public void expansion_unit() throws ParseException {
  503. if (jj_2_11(1)) {
  504. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("LOOKAHEAD")) {
  505. } else {
  506. jj_consume_token(-1);
  507. throw new ParseException();
  508. }
  509. t = jj_consume_token(IDENTIFIER);
  510. jj_consume_token(LPAREN);
  511. add(t); add(" ( ");
  512. local_lookahead();
  513. jj_consume_token(RPAREN);
  514. add(" ) "); writeln();
  515. } else {
  516. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  517. case LBRACE:
  518. Block();
  519. break;
  520. case LBRACKET:
  521. jj_consume_token(LBRACKET);
  522. writeln(); add(" [ "); writeln(); ++token_source.level;
  523. expansion_choices();
  524. jj_consume_token(RBRACKET);
  525. writeln(); --token_source.level; add(" ] "); writeln();
  526. break;
  527. case TRY:
  528. jj_consume_token(TRY);
  529. jj_consume_token(LBRACE);
  530. add("try {"); write();
  531. expansion_choices();
  532. jj_consume_token(RBRACE);
  533. write(); add("}");
  534. label_9:
  535. while (true) {
  536. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  537. case CATCH:
  538. ;
  539. break;
  540. default:
  541. break label_9;
  542. }
  543. jj_consume_token(CATCH);
  544. jj_consume_token(LPAREN);
  545. add("catch ( ");
  546. Name();
  547. t = jj_consume_token(IDENTIFIER);
  548. jj_consume_token(RPAREN);
  549. add(t); add(" ) ");
  550. Block();
  551. }
  552. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  553. case FINALLY:
  554. jj_consume_token(FINALLY);
  555. add("finally ");
  556. Block();
  557. break;
  558. default:
  559. ;
  560. }
  561. break;
  562. default:
  563. if (jj_2_12(2147483647)) {
  564. if (jj_2_10(2147483647)) {
  565. PrimaryExpression();
  566. jj_consume_token(ASSIGN);
  567. add(" = ");
  568. } else {
  569. ;
  570. }
  571. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  572. case STRING_LITERAL:
  573. case LT:
  574. regular_expression();
  575. break;
  576. case IDENTIFIER:
  577. identifier();
  578. Arguments();
  579. break;
  580. default:
  581. jj_consume_token(-1);
  582. throw new ParseException();
  583. }
  584. } else {
  585. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  586. case LPAREN:
  587. jj_consume_token(LPAREN);
  588. writeln(); add(" ( "); writeln(); ++token_source.level;
  589. expansion_choices();
  590. jj_consume_token(RPAREN);
  591. writeln(); --token_source.level; add(" )"); writeln();
  592. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  593. case HOOK:
  594. case PLUS:
  595. case STAR:
  596. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  597. case PLUS:
  598. jj_consume_token(PLUS);
  599. trimWhitespace(); add("+"); writeln();
  600. break;
  601. case STAR:
  602. jj_consume_token(STAR);
  603. trimWhitespace(); add("*"); writeln();
  604. break;
  605. case HOOK:
  606. jj_consume_token(HOOK);
  607. trimWhitespace(); add("?"); writeln();
  608. break;
  609. default:
  610. jj_consume_token(-1);
  611. throw new ParseException();
  612. }
  613. break;
  614. default:
  615. ;
  616. }
  617. break;
  618. default:
  619. jj_consume_token(-1);
  620. throw new ParseException();
  621. }
  622. }
  623. }
  624. }
  625. }
  626. final public void regular_expression() throws ParseException {
  627. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  628. case STRING_LITERAL:
  629. StringLiteral();
  630. break;
  631. default:
  632. if (jj_2_13(3)) {
  633. jj_consume_token(LT);
  634. add("<");
  635. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  636. case IDENTIFIER:
  637. case 120:
  638. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  639. case 120:
  640. jj_consume_token(120);
  641. add("#");
  642. break;
  643. default:
  644. ;
  645. }
  646. identifier();
  647. jj_consume_token(COLON);
  648. add(": ");
  649. break;
  650. default:
  651. ;
  652. }
  653. complex_regular_expression_choices();
  654. jj_consume_token(GT);
  655. add(">");
  656. } else if (jj_2_14(2)) {
  657. jj_consume_token(LT);
  658. add("<");
  659. identifier();
  660. jj_consume_token(GT);
  661. add(">");
  662. } else {
  663. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  664. case LT:
  665. jj_consume_token(LT);
  666. add("<");
  667. if (getToken(1).kind == IDENTIFIER && getToken(1).image.equals("EOF")) {
  668. } else {
  669. jj_consume_token(-1);
  670. throw new ParseException();
  671. }
  672. identifier();
  673. jj_consume_token(GT);
  674. add(">");
  675. break;
  676. default:
  677. jj_consume_token(-1);
  678. throw new ParseException();
  679. }
  680. }
  681. }
  682. }
  683. final public void complex_regular_expression_choices() throws ParseException {
  684. complex_regular_expression();
  685. label_10:
  686. while (true) {
  687. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  688. case BIT_OR:
  689. ;
  690. break;
  691. default:
  692. break label_10;
  693. }
  694. jj_consume_token(BIT_OR);
  695. add(token_source.ls + " | ");
  696. complex_regular_expression();
  697. write();
  698. }
  699. }
  700. final public void complex_regular_expression() throws ParseException {
  701. label_11:
  702. while (true) {
  703. complex_regular_expression_unit();
  704. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  705. case STRING_LITERAL:
  706. case LPAREN:
  707. case LBRACKET:
  708. case LT:
  709. case TILDE:
  710. ;
  711. break;
  712. default:
  713. break label_11;
  714. }
  715. }
  716. }
  717. final public void complex_regular_expression_unit() throws ParseException {
  718. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  719. case STRING_LITERAL:
  720. StringLiteral();
  721. break;
  722. case LT:
  723. jj_consume_token(LT);
  724. add("<");
  725. identifier();
  726. jj_consume_token(GT);
  727. add(">");
  728. break;
  729. case LBRACKET:
  730. case TILDE:
  731. character_list();
  732. break;
  733. case LPAREN:
  734. jj_consume_token(LPAREN);
  735. add("( ");
  736. complex_regular_expression_choices();
  737. jj_consume_token(RPAREN);
  738. add(" )");
  739. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  740. case HOOK:
  741. case PLUS:
  742. case STAR:
  743. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  744. case PLUS:
  745. jj_consume_token(PLUS);
  746. add("+");
  747. break;
  748. case STAR:
  749. jj_consume_token(STAR);
  750. add("*");
  751. break;
  752. case HOOK:
  753. jj_consume_token(HOOK);
  754. add("?");
  755. break;
  756. default:
  757. jj_consume_token(-1);
  758. throw new ParseException();
  759. }
  760. break;
  761. default:
  762. ;
  763. }
  764. break;
  765. default:
  766. jj_consume_token(-1);
  767. throw new ParseException();
  768. }
  769. }
  770. final public void character_list() throws ParseException {
  771. writeln();
  772. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  773. case TILDE:
  774. jj_consume_token(TILDE);
  775. add("~");
  776. break;
  777. default:
  778. ;
  779. }
  780. jj_consume_token(LBRACKET);
  781. add("[");
  782. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  783. case STRING_LITERAL:
  784. character_descriptor();
  785. label_12:
  786. while (true) {
  787. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  788. case COMMA:
  789. ;
  790. break;
  791. default:
  792. break label_12;
  793. }
  794. jj_consume_token(COMMA);
  795. add(",");
  796. character_descriptor();
  797. }
  798. break;
  799. default:
  800. ;
  801. }
  802. jj_consume_token(RBRACKET);
  803. add("]");
  804. }
  805. final public void character_descriptor() throws ParseException {
  806. StringLiteral();
  807. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  808. case MINUS:
  809. jj_consume_token(MINUS);
  810. add("-");
  811. StringLiteral();
  812. break;
  813. default:
  814. ;
  815. }
  816. }
  817. final public void identifier() throws ParseException {
  818. t = jj_consume_token(IDENTIFIER);
  819. add(t);
  820. }
  821. /**********************************************
  822. * THE JJTREE PRODUCTIONS START HERE *
  823. **********************************************/
  824. final public void node_descriptor() throws ParseException {
  825. jj_consume_token(120);
  826. add("#");
  827. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  828. case IDENTIFIER:
  829. identifier();
  830. break;
  831. case VOID:
  832. t = jj_consume_token(VOID);
  833. add(t);
  834. break;
  835. default:
  836. jj_consume_token(-1);
  837. throw new ParseException();
  838. }
  839. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  840. case LPAREN:
  841. jj_consume_token(LPAREN);
  842. add("(");
  843. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  844. case GT:
  845. jj_consume_token(GT);
  846. add(">");
  847. break;
  848. default:
  849. ;
  850. }
  851. node_descriptor_expression();
  852. jj_consume_token(RPAREN);
  853. add(")");
  854. break;
  855. default:
  856. ;
  857. }
  858. }
  859. void node_descriptor_expression() throws ParseException {
  860. Token tok;
  861. int nesting = 1;
  862. while (true) {
  863. tok = getToken(1);
  864. if (tok.kind == 0) {
  865. throw new ParseException();
  866. }
  867. if (tok.kind == LPAREN) nesting++;
  868. if (tok.kind == RPAREN) {
  869. nesting--;
  870. if (nesting == 0) break;
  871. }
  872. tok = getNextToken();
  873. }
  874. }
  875. /*****************************************
  876. * THE JAVA LANGUAGE GRAMMAR STARTS HERE *
  877. *****************************************/
  878. /*
  879. * Program structuring syntax follows.
  880. */
  881. final public void CompilationUnit() throws ParseException {
  882. IN_CU = true;
  883. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  884. case PACKAGE:
  885. PackageDeclaration();
  886. break;
  887. default:
  888. ;
  889. }
  890. label_13:
  891. while (true) {
  892. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  893. case IMPORT:
  894. ;
  895. break;
  896. default:
  897. break label_13;
  898. }
  899. ImportDeclaration();
  900. }
  901. label_14:
  902. while (true) {
  903. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  904. case ABSTRACT:
  905. case CLASS:
  906. case ENUM:
  907. case FINAL:
  908. case INTERFACE:
  909. case NATIVE:
  910. case PRIVATE:
  911. case PROTECTED:
  912. case PUBLIC:
  913. case STATIC:
  914. case STRICTFP:
  915. case SYNCHRONIZED:
  916. case TRANSIENT:
  917. case VOLATILE:
  918. case SEMICOLON:
  919. case AT:
  920. ;
  921. break;
  922. default:
  923. break label_14;
  924. }
  925. TypeDeclaration();
  926. }
  927. IN_CU = false;
  928. }
  929. final public void PackageDeclaration() throws ParseException {
  930. t = jj_consume_token(PACKAGE);
  931. add(t);
  932. Name();
  933. jj_consume_token(SEMICOLON);
  934. add(";"); write();
  935. }
  936. final public void ImportDeclaration() throws ParseException {
  937. jj_consume_token(IMPORT);
  938. add("import");
  939. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  940. case STATIC:
  941. jj_consume_token(STATIC);
  942. add("static");
  943. break;
  944. default:
  945. ;
  946. }
  947. Name();
  948. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  949. case DOT:
  950. jj_consume_token(DOT);
  951. jj_consume_token(STAR);
  952. add(".*");
  953. break;
  954. default:
  955. ;
  956. }
  957. jj_consume_token(SEMICOLON);
  958. add(";"); write();
  959. }
  960. /*
  961. * Modifiers. We match all modifiers in a single rule to reduce the chances of
  962. * syntax errors for simple modifier mistakes. It will also enable us to give
  963. * better error messages.
  964. */
  965. final public int Modifiers() throws ParseException {
  966. int modifiers = 0;
  967. label_15:
  968. while (true) {
  969. if (jj_2_15(2)) {
  970. ;
  971. } else {
  972. break label_15;
  973. }
  974. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  975. case PUBLIC:
  976. jj_consume_token(PUBLIC);
  977. modifiers |= ModifierSet.PUBLIC;
  978. break;
  979. case STATIC:
  980. jj_consume_token(STATIC);
  981. modifiers |= ModifierSet.STATIC;
  982. break;
  983. case PROTECTED:
  984. jj_consume_token(PROTECTED);
  985. modifiers |= ModifierSet.PROTECTED;
  986. break;
  987. case PRIVATE:
  988. jj_consume_token(PRIVATE);
  989. modifiers |= ModifierSet.PRIVATE;
  990. break;
  991. case FINAL:
  992. jj_consume_token(FINAL);
  993. modifiers |= ModifierSet.FINAL;
  994. break;
  995. case ABSTRACT:
  996. jj_consume_token(ABSTRACT);
  997. modifiers |= ModifierSet.ABSTRACT;
  998. break;
  999. case SYNCHRONIZED:
  1000. jj_consume_token(SYNCHRONIZED);
  1001. modifiers |= ModifierSet.SYNCHRONIZED;
  1002. break;
  1003. case NATIVE:
  1004. jj_consume_token(NATIVE);
  1005. modifiers |= ModifierSet.NATIVE;
  1006. break;
  1007. case TRANSIENT:
  1008. jj_consume_token(TRANSIENT);
  1009. modifiers |= ModifierSet.TRANSIENT;
  1010. break;
  1011. case VOLATILE:
  1012. jj_consume_token(VOLATILE);
  1013. modifiers |= ModifierSet.VOLATILE;
  1014. break;
  1015. case STRICTFP:
  1016. jj_consume_token(STRICTFP);
  1017. modifiers |= ModifierSet.STRICTFP;
  1018. break;
  1019. case AT:
  1020. Annotation();
  1021. break;
  1022. default:
  1023. jj_consume_token(-1);
  1024. throw new ParseException();
  1025. }
  1026. }
  1027. {if (true) return modifiers;}
  1028. throw new Error("Missing return statement in function");
  1029. }
  1030. /*
  1031. * Declaration syntax follows.
  1032. */
  1033. final public void TypeDeclaration() throws ParseException {
  1034. int modifiers;
  1035. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1036. case SEMICOLON:
  1037. jj_consume_token(SEMICOLON);
  1038. add(";"); write();
  1039. break;
  1040. case ABSTRACT:
  1041. case CLASS:
  1042. case ENUM:
  1043. case FINAL:
  1044. case INTERFACE:
  1045. case NATIVE:
  1046. case PRIVATE:
  1047. case PROTECTED:
  1048. case PUBLIC:
  1049. case STATIC:
  1050. case STRICTFP:
  1051. case SYNCHRONIZED:
  1052. case TRANSIENT:
  1053. case VOLATILE:
  1054. case AT:
  1055. modifiers = Modifiers();
  1056. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1057. case CLASS:
  1058. case INTERFACE:
  1059. ClassOrInterfaceDeclaration(modifiers);
  1060. break;
  1061. case ENUM:
  1062. EnumDeclaration(modifiers);
  1063. break;
  1064. case AT:
  1065. AnnotationTypeDeclaration(modifiers);
  1066. break;
  1067. default:
  1068. jj_consume_token(-1);
  1069. throw new ParseException();
  1070. }
  1071. break;
  1072. default:
  1073. jj_consume_token(-1);
  1074. throw new ParseException();
  1075. }
  1076. }
  1077. final public void ClassOrInterfaceDeclaration(int modifiers) throws ParseException {
  1078. boolean isInterface = false;
  1079. add(ModifierSet.toString(modifiers) + " ");
  1080. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1081. case CLASS:
  1082. jj_consume_token(CLASS);
  1083. add("class");
  1084. break;
  1085. case INTERFACE:
  1086. jj_consume_token(INTERFACE);
  1087. add("interface"); isInterface = true;
  1088. break;
  1089. default:
  1090. jj_consume_token(-1);
  1091. throw new ParseException();
  1092. }
  1093. t = jj_consume_token(IDENTIFIER);
  1094. add(t);
  1095. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1096. case LT:
  1097. TypeParameters();
  1098. break;
  1099. default:
  1100. ;
  1101. }
  1102. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1103. case EXTENDS:
  1104. ExtendsList(isInterface);
  1105. break;
  1106. default:
  1107. ;
  1108. }
  1109. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1110. case IMPLEMENTS:
  1111. ImplementsList(isInterface);
  1112. break;
  1113. default:
  1114. ;
  1115. }
  1116. ClassOrInterfaceBody(isInterface);
  1117. }
  1118. final public void ExtendsList(boolean isInterface) throws ParseException {
  1119. boolean extendsMoreThanOne = false;
  1120. jj_consume_token(EXTENDS);
  1121. add("extends");
  1122. ClassOrInterfaceType();
  1123. label_16:
  1124. while (true) {
  1125. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1126. case COMMA:
  1127. ;
  1128. break;
  1129. default:
  1130. break label_16;
  1131. }
  1132. jj_consume_token(COMMA);
  1133. add(",");
  1134. ClassOrInterfaceType();
  1135. extendsMoreThanOne = true;
  1136. }
  1137. if (extendsMoreThanOne && !isInterface)
  1138. {if (true) throw new ParseException("A class cannot extend more than one other class");}
  1139. }
  1140. final public void ImplementsList(boolean isInterface) throws ParseException {
  1141. jj_consume_token(IMPLEMENTS);
  1142. add("implements");
  1143. ClassOrInterfaceType();
  1144. label_17:
  1145. while (true) {
  1146. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1147. case COMMA:
  1148. ;
  1149. break;
  1150. default:
  1151. break label_17;
  1152. }
  1153. jj_consume_token(COMMA);
  1154. add(",");
  1155. ClassOrInterfaceType();
  1156. }
  1157. if (isInterface)
  1158. {if (true) throw new ParseException("An interface cannot implement other interfaces");}
  1159. }
  1160. final public void EnumDeclaration(int modifiers) throws ParseException {
  1161. add(ModifierSet.toString(modifiers) + " ");
  1162. jj_consume_token(ENUM);
  1163. add("enum");
  1164. t = jj_consume_token(IDENTIFIER);
  1165. add(t);
  1166. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1167. case IMPLEMENTS:
  1168. ImplementsList(false);
  1169. break;
  1170. default:
  1171. ;
  1172. }
  1173. EnumBody();
  1174. }
  1175. final public void EnumBody() throws ParseException {
  1176. jj_consume_token(LBRACE);
  1177. add("{");
  1178. EnumConstant();
  1179. label_18:
  1180. while (true) {
  1181. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1182. case COMMA:
  1183. ;
  1184. break;
  1185. default:
  1186. break label_18;
  1187. }
  1188. jj_consume_token(COMMA);
  1189. add(",");
  1190. EnumConstant();
  1191. }
  1192. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1193. case SEMICOLON:
  1194. jj_consume_token(SEMICOLON);
  1195. add(";"); write();
  1196. label_19:
  1197. while (true) {
  1198. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1199. case ABSTRACT:
  1200. case BOOLEAN:
  1201. case BYTE:
  1202. case CHAR:
  1203. case CLASS:
  1204. case DOUBLE:
  1205. case ENUM:
  1206. case FINAL:
  1207. case FLOAT:
  1208. case INT:
  1209. case INTERFACE:
  1210. case LONG:
  1211. case NATIVE:
  1212. case PRIVATE:
  1213. case PROTECTED:
  1214. case PUBLIC:
  1215. case SHORT:
  1216. case STATIC:
  1217. case STRICTFP:
  1218. case SYNCHRONIZED:
  1219. case TRANSIENT:
  1220. case VOID:
  1221. case VOLATILE:
  1222. case IDENTIFIER:
  1223. case LBRACE:
  1224. case SEMICOLON:
  1225. case AT:
  1226. case LT:
  1227. ;
  1228. break;
  1229. default:
  1230. break label_19;
  1231. }
  1232. ClassOrInterfaceBodyDeclaration(false);
  1233. }
  1234. break;
  1235. default:
  1236. ;
  1237. }
  1238. jj_consume_token(RBRACE);
  1239. add("}"); write();
  1240. }
  1241. final public void EnumConstant() throws ParseException {
  1242. t = jj_consume_token(IDENTIFIER);
  1243. add(t);
  1244. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1245. case LPAREN:
  1246. Arguments();
  1247. break;
  1248. default:
  1249. ;
  1250. }
  1251. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1252. case LBRACE:
  1253. ClassOrInterfaceBody(false);
  1254. break;
  1255. default:
  1256. ;
  1257. }
  1258. }
  1259. final public void TypeParameters() throws ParseException {
  1260. jj_consume_token(LT);
  1261. add("<");
  1262. TypeParameter();
  1263. label_20:
  1264. while (true) {
  1265. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1266. case COMMA:
  1267. ;
  1268. break;
  1269. default:
  1270. break label_20;
  1271. }
  1272. jj_consume_token(COMMA);
  1273. add(",");
  1274. TypeParameter();
  1275. }
  1276. jj_consume_token(GT);
  1277. add("> ");
  1278. }
  1279. final public void TypeParameter() throws ParseException {
  1280. t = jj_consume_token(IDENTIFIER);
  1281. add(t);
  1282. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1283. case EXTENDS:
  1284. TypeBound();
  1285. break;
  1286. default:
  1287. ;
  1288. }
  1289. }
  1290. final public void TypeBound() throws ParseException {
  1291. jj_consume_token(EXTENDS);
  1292. add("extends");
  1293. ClassOrInterfaceType();
  1294. label_21:
  1295. while (true) {
  1296. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1297. case BIT_AND:
  1298. ;
  1299. break;
  1300. default:
  1301. break label_21;
  1302. }
  1303. jj_consume_token(BIT_AND);
  1304. add("&");
  1305. ClassOrInterfaceType();
  1306. }
  1307. }
  1308. final public void ClassOrInterfaceBody(boolean isInterface) throws ParseException {
  1309. jj_consume_token(LBRACE);
  1310. add("{"); write(); ++token_source.level;
  1311. label_22:
  1312. while (true) {
  1313. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1314. case ABSTRACT:
  1315. case BOOLEAN:
  1316. case BYTE:
  1317. case CHAR:
  1318. case CLASS:
  1319. case DOUBLE:
  1320. case ENUM:
  1321. case FINAL:
  1322. case FLOAT:
  1323. case INT:
  1324. case INTERFACE:
  1325. case LONG:
  1326. case NATIVE:
  1327. case PRIVATE:
  1328. case PROTECTED:
  1329. case PUBLIC:
  1330. case SHORT:
  1331. case STATIC:
  1332. case STRICTFP:
  1333. case SYNCHRONIZED:
  1334. case TRANSIENT:
  1335. case VOID:
  1336. case VOLATILE:
  1337. case IDENTIFIER:
  1338. case LBRACE:
  1339. case SEMICOLON:
  1340. case AT:
  1341. case LT:
  1342. ;
  1343. break;
  1344. default:
  1345. break label_22;
  1346. }
  1347. ClassOrInterfaceBodyDeclaration(isInterface);
  1348. }
  1349. jj_consume_token(RBRACE);
  1350. add("}"); --token_source.level; write();
  1351. }
  1352. final public void ClassOrInterfaceBodyDeclaration(boolean isInterface) throws ParseException {
  1353. boolean isNestedInterface = false;
  1354. int modifiers;
  1355. if (jj_2_18(2)) {
  1356. Initializer();
  1357. if (isInterface)
  1358. {if (true) throw new ParseException("An interface cannot have initializers");}
  1359. } else {
  1360. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1361. case ABSTRACT:
  1362. case BOOLEAN:
  1363. case BYTE:
  1364. case CHAR:
  1365. case CLASS:
  1366. case DOUBLE:
  1367. case ENUM:
  1368. case FINAL:
  1369. case FLOAT:
  1370. case INT:
  1371. case INTERFACE:
  1372. case LONG:
  1373. case NATIVE:
  1374. case PRIVATE:
  1375. case PROTECTED:
  1376. case PUBLIC:
  1377. case SHORT:
  1378. case STATIC:
  1379. case STRICTFP:
  1380. case SYNCHRONIZED:
  1381. case TRANSIENT:
  1382. case VOID:
  1383. case VOLATILE:
  1384. case IDENTIFIER:
  1385. case AT:
  1386. case LT:
  1387. modifiers = Modifiers();
  1388. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1389. case CLASS:
  1390. case INTERFACE:
  1391. ClassOrInterfaceDeclaration(modifiers);
  1392. break;
  1393. case ENUM:
  1394. EnumDeclaration(modifiers);
  1395. break;
  1396. default:
  1397. if (jj_2_16(2147483647)) {
  1398. ConstructorDeclaration(modifiers);
  1399. } else if (jj_2_17(2147483647)) {
  1400. FieldDeclaration(modifiers);
  1401. } else {
  1402. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1403. case BOOLEAN:
  1404. case BYTE:
  1405. case CHAR:
  1406. case DOUBLE:
  1407. case FLOAT:
  1408. case INT:
  1409. case LONG:
  1410. case SHORT:
  1411. case VOID:
  1412. case IDENTIFIER:
  1413. case LT:
  1414. MethodDeclaration(modifiers);
  1415. break;
  1416. default:
  1417. jj_consume_token(-1);
  1418. throw new ParseException();
  1419. }
  1420. }
  1421. }
  1422. break;
  1423. case SEMICOLON:
  1424. jj_consume_token(SEMICOLON);
  1425. add(";"); write();
  1426. break;
  1427. default:
  1428. jj_consume_token(-1);
  1429. throw new ParseException();
  1430. }
  1431. }
  1432. }
  1433. final public void FieldDeclaration(int modifiers) throws ParseException {
  1434. add(ModifierSet.toString(modifiers) + " ");
  1435. Type();
  1436. VariableDeclarator();
  1437. label_23:
  1438. while (true) {
  1439. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1440. case COMMA:
  1441. ;
  1442. break;
  1443. default:
  1444. break label_23;
  1445. }
  1446. jj_consume_token(COMMA);
  1447. add(",");
  1448. VariableDeclarator();
  1449. }
  1450. jj_consume_token(SEMICOLON);
  1451. add(";"); write();
  1452. }
  1453. final public void VariableDeclarator() throws ParseException {
  1454. VariableDeclaratorId();
  1455. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1456. case ASSIGN:
  1457. jj_consume_token(ASSIGN);
  1458. add(" = ");
  1459. VariableInitializer();
  1460. break;
  1461. default:
  1462. ;
  1463. }
  1464. }
  1465. final public void VariableDeclaratorId() throws ParseException {
  1466. t = jj_consume_token(IDENTIFIER);
  1467. add(t);
  1468. label_24:
  1469. while (true) {
  1470. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1471. case LBRACKET:
  1472. ;
  1473. break;
  1474. default:
  1475. break label_24;
  1476. }
  1477. jj_consume_token(LBRACKET);
  1478. jj_consume_token(RBRACKET);
  1479. add("[]");
  1480. }
  1481. }
  1482. final public void VariableInitializer() throws ParseException {
  1483. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1484. case LBRACE:
  1485. ArrayInitializer();
  1486. break;
  1487. case BOOLEAN:
  1488. case BYTE:
  1489. case CHAR:
  1490. case DOUBLE:
  1491. case FALSE:
  1492. case FLOAT:
  1493. case INT:
  1494. case LONG:
  1495. case NEW:
  1496. case NULL:
  1497. case SHORT:
  1498. case SUPER:
  1499. case THIS:
  1500. case TRUE:
  1501. case VOID:
  1502. case INTEGER_LITERAL:
  1503. case FLOATING_POINT_LITERAL:
  1504. case CHARACTER_LITERAL:
  1505. case STRING_LITERAL:
  1506. case IDENTIFIER:
  1507. case LPAREN:
  1508. case BANG:
  1509. case TILDE:
  1510. case INCR:
  1511. case DECR:
  1512. case PLUS:
  1513. case MINUS:
  1514. Expression();
  1515. break;
  1516. default:
  1517. jj_consume_token(-1);
  1518. throw new ParseException();
  1519. }
  1520. }
  1521. final public void ArrayInitializer() throws ParseException {
  1522. jj_consume_token(LBRACE);
  1523. add("{");
  1524. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1525. case BOOLEAN:
  1526. case BYTE:
  1527. case CHAR:
  1528. case DOUBLE:
  1529. case FALSE:
  1530. case FLOAT:
  1531. case INT:
  1532. case LONG:
  1533. case NEW:
  1534. case NULL:
  1535. case SHORT:
  1536. case SUPER:
  1537. case THIS:
  1538. case TRUE:
  1539. case VOID:
  1540. case INTEGER_LITERAL:
  1541. case FLOATING_POINT_LITERAL:
  1542. case CHARACTER_LITERAL:
  1543. case STRING_LITERAL:
  1544. case IDENTIFIER:
  1545. case LPAREN:
  1546. case LBRACE:
  1547. case BANG:
  1548. case TILDE:
  1549. case INCR:
  1550. case DECR:
  1551. case PLUS:
  1552. case MINUS:
  1553. VariableInitializer();
  1554. label_25:
  1555. while (true) {
  1556. if (jj_2_19(2)) {
  1557. ;
  1558. } else {
  1559. break label_25;
  1560. }
  1561. jj_consume_token(COMMA);
  1562. add(",");
  1563. VariableInitializer();
  1564. }
  1565. break;
  1566. default:
  1567. ;
  1568. }
  1569. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1570. case COMMA:
  1571. jj_consume_token(COMMA);
  1572. add(",");
  1573. break;
  1574. default:
  1575. ;
  1576. }
  1577. jj_consume_token(RBRACE);
  1578. add("}"); write();
  1579. }
  1580. final public void MethodDeclaration(int modifiers) throws ParseException {
  1581. add(ModifierSet.toString(modifiers) + " ");
  1582. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1583. case LT:
  1584. TypeParameters();
  1585. break;
  1586. default:
  1587. ;
  1588. }
  1589. ResultType();
  1590. MethodDeclarator();
  1591. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1592. case THROWS:
  1593. jj_consume_token(THROWS);
  1594. add("throws");
  1595. NameList();
  1596. break;
  1597. default:
  1598. ;
  1599. }
  1600. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1601. case LBRACE:
  1602. Block();
  1603. break;
  1604. case SEMICOLON:
  1605. jj_consume_token(SEMICOLON);
  1606. add(";"); write();
  1607. break;
  1608. default:
  1609. jj_consume_token(-1);
  1610. throw new ParseException();
  1611. }
  1612. }
  1613. final public void MethodDeclarator() throws ParseException {
  1614. t = jj_consume_token(IDENTIFIER);
  1615. add(t);
  1616. FormalParameters();
  1617. label_26:
  1618. while (true) {
  1619. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1620. case LBRACKET:
  1621. ;
  1622. break;
  1623. default:
  1624. break label_26;
  1625. }
  1626. jj_consume_token(LBRACKET);
  1627. jj_consume_token(RBRACKET);
  1628. add("[]");
  1629. }
  1630. }
  1631. final public void FormalParameters() throws ParseException {
  1632. boolean added = false;
  1633. jj_consume_token(LPAREN);
  1634. add("(");
  1635. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1636. case BOOLEAN:
  1637. case BYTE:
  1638. case CHAR:
  1639. case DOUBLE:
  1640. case FINAL:
  1641. case FLOAT:
  1642. case INT:
  1643. case LONG:
  1644. case SHORT:
  1645. case IDENTIFIER:
  1646. FormalParameter();
  1647. added = true;
  1648. label_27:
  1649. while (true) {
  1650. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1651. case COMMA:
  1652. ;
  1653. break;
  1654. default:
  1655. break label_27;
  1656. }
  1657. jj_consume_token(COMMA);
  1658. add(",");
  1659. FormalParameter();
  1660. }
  1661. break;
  1662. default:
  1663. ;
  1664. }
  1665. jj_consume_token(RPAREN);
  1666. if (!added) trim(); add(")");
  1667. }
  1668. final public void FormalParameter() throws ParseException {
  1669. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1670. case FINAL:
  1671. jj_consume_token(FINAL);
  1672. add("final");
  1673. break;
  1674. default:
  1675. ;
  1676. }
  1677. Type();
  1678. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1679. case ELLIPSIS:
  1680. jj_consume_token(ELLIPSIS);
  1681. trim(); add("...");
  1682. break;
  1683. default:
  1684. ;
  1685. }
  1686. VariableDeclaratorId();
  1687. }
  1688. final public void ConstructorDeclaration(int modifiers) throws ParseException {
  1689. add(ModifierSet.toString(modifiers) + " ");
  1690. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1691. case LT:
  1692. TypeParameters();
  1693. break;
  1694. default:
  1695. ;
  1696. }
  1697. t = jj_consume_token(IDENTIFIER);
  1698. add(t);
  1699. FormalParameters();
  1700. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1701. case THROWS:
  1702. jj_consume_token(THROWS);
  1703. add("throws");
  1704. NameList();
  1705. break;
  1706. default:
  1707. ;
  1708. }
  1709. jj_consume_token(LBRACE);
  1710. add("{"); write(); ++token_source.level;
  1711. if (jj_2_20(2147483647)) {
  1712. ExplicitConstructorInvocation();
  1713. } else {
  1714. ;
  1715. }
  1716. label_28:
  1717. while (true) {
  1718. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1719. case ASSERT:
  1720. case BOOLEAN:
  1721. case BREAK:
  1722. case BYTE:
  1723. case CHAR:
  1724. case CLASS:
  1725. case CONTINUE:
  1726. case DO:
  1727. case DOUBLE:
  1728. case FALSE:
  1729. case FINAL:
  1730. case FLOAT:
  1731. case FOR:
  1732. case IF:
  1733. case INT:
  1734. case INTERFACE:
  1735. case LONG:
  1736. case NEW:
  1737. case NULL:
  1738. case RETURN:
  1739. case SHORT:
  1740. case SUPER:
  1741. case SWITCH:
  1742. case SYNCHRONIZED:
  1743. case THIS:
  1744. case THROW:
  1745. case TRUE:
  1746. case TRY:
  1747. case VOID:
  1748. case WHILE:
  1749. case INTEGER_LITERAL:
  1750. case FLOATING_POINT_LITERAL:
  1751. case CHARACTER_LITERAL:
  1752. case STRING_LITERAL:
  1753. case IDENTIFIER:
  1754. case LPAREN:
  1755. case LBRACE:
  1756. case SEMICOLON:
  1757. case INCR:
  1758. case DECR:
  1759. ;
  1760. break;
  1761. default:
  1762. break label_28;
  1763. }
  1764. BlockStatement();
  1765. }
  1766. jj_consume_token(RBRACE);
  1767. add("}"); --token_source.level; write();
  1768. }
  1769. final public void ExplicitConstructorInvocation() throws ParseException {
  1770. if (jj_2_22(2147483647)) {
  1771. jj_consume_token(THIS);
  1772. add("this");
  1773. Arguments();
  1774. jj_consume_token(SEMICOLON);
  1775. add(";"); write();
  1776. } else {
  1777. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1778. case BOOLEAN:
  1779. case BYTE:
  1780. case CHAR:
  1781. case DOUBLE:
  1782. case FALSE:
  1783. case FLOAT:
  1784. case INT:
  1785. case LONG:
  1786. case NEW:
  1787. case NULL:
  1788. case SHORT:
  1789. case SUPER:
  1790. case THIS:
  1791. case TRUE:
  1792. case VOID:
  1793. case INTEGER_LITERAL:
  1794. case FLOATING_POINT_LITERAL:
  1795. case CHARACTER_LITERAL:
  1796. case STRING_LITERAL:
  1797. case IDENTIFIER:
  1798. case LPAREN:
  1799. if (jj_2_21(2)) {
  1800. PrimaryExpression();
  1801. jj_consume_token(DOT);
  1802. } else {
  1803. ;
  1804. }
  1805. jj_consume_token(SUPER);
  1806. add("super");
  1807. Arguments();
  1808. jj_consume_token(SEMICOLON);
  1809. add(";"); write();
  1810. break;
  1811. default:
  1812. jj_consume_token(-1);
  1813. throw new ParseException();
  1814. }
  1815. }
  1816. }
  1817. final public void Initializer() throws ParseException {
  1818. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1819. case STATIC:
  1820. jj_consume_token(STATIC);
  1821. add("static ");
  1822. break;
  1823. default:
  1824. ;
  1825. }
  1826. Block();
  1827. }
  1828. /*
  1829. * Type, name and expression syntax follows.
  1830. */
  1831. final public void Type() throws ParseException {
  1832. if (jj_2_23(2)) {
  1833. ReferenceType();
  1834. } else {
  1835. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1836. case BOOLEAN:
  1837. case BYTE:
  1838. case CHAR:
  1839. case DOUBLE:
  1840. case FLOAT:
  1841. case INT:
  1842. case LONG:
  1843. case SHORT:
  1844. PrimitiveType();
  1845. break;
  1846. default:
  1847. jj_consume_token(-1);
  1848. throw new ParseException();
  1849. }
  1850. }
  1851. }
  1852. final public void ReferenceType() throws ParseException {
  1853. switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  1854. case BOOLEAN:
  1855. case BYTE:
  1856. case CHAR:
  1857. case DOUBLE:
  1858. case FLOAT:
  1859. case INT:
  1860. case LONG:
  1861. case SHORT:
  1862. PrimitiveType();
  1863. label_29:
  1864. while (true) {
  1865. jj_consume_token(LBRACKET);
  1866. jj_consume_token(RBRACKET);
  1867. add("[]");