PageRenderTime 56ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 1ms

/src/ca/usask/cs/giraffe/compiler/parser/CParser.java

https://bitbucket.org/holycause/k5
Java | 8719 lines | 7345 code | 414 blank | 960 comment | 1334 complexity | f899d290bfbbc62a00ba072a61ed263c MD5 | raw file
Possible License(s): GPL-2.0

Large files files are truncated, but you can click here to view the full file

  1. /* Generated by: FreeCC 0.9.3. CParser.java */
  2. package ca.usask.cs.giraffe.compiler.parser;
  3. import ca.usask.cs.giraffe.core.GiraffeLogger;
  4. import java.util.*;
  5. @SuppressWarnings("unused")
  6. public class CParser implements CConstants {
  7. // Hastable for storing typedef types
  8. private static Set types=new HashSet();
  9. // Stack for determining when the parser
  10. // is parsing a typdef definition.
  11. private static Stack typedefParsingStack=new Stack();
  12. // Returns true if the given string is
  13. // a typedef type.
  14. private static boolean isType(String type) {
  15. return types.contains(type);
  16. }
  17. // Add a typedef type to those already defined
  18. private static void addType(String type) {
  19. types.add(type);
  20. }
  21. // Prints out all the types used in parsing the c source
  22. private static void printTypes() {
  23. for(Iterator i=types.iterator();
  24. i.hasNext();
  25. ) {
  26. GiraffeLogger.debug(""+i.next());
  27. }
  28. }
  29. private boolean buildTree=true;
  30. private boolean tokensAreNodes=true;
  31. private boolean specialTokensAreNodes=true;
  32. private java.util.ArrayList<Node>nodes=new java.util.ArrayList<Node>();
  33. private java.util.ArrayList<java.lang.Integer>marks=new java.util.ArrayList<java.lang.Integer>();
  34. private int mark;
  35. // current mark
  36. private boolean node_created;
  37. /**
  38. * Determines whether the current node was actually closed and
  39. * pushed. This should only be called in the final user action of a
  40. * node scope.
  41. */
  42. public boolean nodeCreated() {
  43. return node_created;
  44. }
  45. /**
  46. * Returns the root node of the AST. It only makes sense to call
  47. * this after a successful parse.
  48. */
  49. public Node rootNode() {
  50. return nodes.get(0);
  51. }
  52. /**
  53. * push a node onto the top of the node stack
  54. */
  55. public void pushNode(Node n) {
  56. nodes.add(n);
  57. }
  58. /**
  59. * Returns the node on the top of the stack, and remove it from the
  60. * stack.
  61. */
  62. public Node popNode() {
  63. return nodes.remove(nodes.size()-1);
  64. }
  65. /**
  66. * Returns the node currently on the top of the stack.
  67. */
  68. public Node peekNode() {
  69. return nodes.get(nodes.size()-1);
  70. }
  71. /**
  72. * Puts the node on the top of the stack. However, unlike pushNode()
  73. * it replaces the node that is currently on the top of the stack.
  74. * This is effectively equivalent to popNode() followed by pushNode(n)
  75. */
  76. public void pokeNode(Node n) {
  77. pokeNode(n,false);
  78. }
  79. /**
  80. * Puts the node on the top of the stack. If clearNodeScope is true,
  81. * it removes all the nodes in the current node scope and pushes
  82. * n onto the top. Otherwise, it simply replaces the node at the
  83. * top of the stack with n.
  84. */
  85. public void pokeNode(Node n,boolean clearNodeScope) {
  86. if (clearNodeScope) {
  87. clearNodeScope();
  88. nodes.add(n);
  89. }
  90. else {
  91. nodes.set(nodes.size()-1,n);
  92. }
  93. }
  94. /** Returns the number of children on the stack in the current node
  95. * scope.
  96. */
  97. public int nodeArity() {
  98. return nodes.size()-mark;
  99. }
  100. public void clearNodeScope() {
  101. while (nodes.size()>mark) {
  102. popNode();
  103. }
  104. }
  105. public void openNodeScope(Node n) {
  106. marks.add(mark);
  107. mark=nodes.size();
  108. n.open();
  109. }
  110. /* A definite node is constructed from a specified number of
  111. * children. That number of nodes are popped from the stack and
  112. * made the children of the definite node. Then the definite node
  113. * is pushed on to the stack. */
  114. public void closeNodeScope(Node n,int num) {
  115. mark=marks.remove(marks.size()-1);
  116. java.util.ArrayList<Node>nodes=new java.util.ArrayList<Node>();
  117. for(int i=0;
  118. i<num;
  119. i++) {
  120. nodes.add(popNode());
  121. }
  122. java.util.Collections.reverse(nodes);
  123. for(Node child : nodes) {
  124. if (specialTokensAreNodes&&(child instanceof Token)) {
  125. Token token=(Token) child;
  126. Token specialToken=token;
  127. while (specialToken!=null) {
  128. specialToken=specialToken.specialToken;
  129. }
  130. while (specialToken!=null&&specialToken!=token) {
  131. n.addChild(specialToken);
  132. specialToken=specialToken.next;
  133. }
  134. }
  135. n.addChild(child);
  136. }
  137. n.close();
  138. pushNode(n);
  139. node_created=true;
  140. }
  141. /**
  142. * A conditional node is constructed if its condition is true. All
  143. * the nodes that have been pushed since the node was opened are
  144. * made children of the conditional node, which is then pushed
  145. * on to the stack. If the condition is false the node is not
  146. * constructed and they are left on the stack.
  147. */
  148. public void closeNodeScope(Node n,boolean condition) {
  149. if (condition) {
  150. int a=nodeArity();
  151. mark=marks.remove(marks.size()-1);
  152. java.util.ArrayList<Node>nodes=new java.util.ArrayList<Node>();
  153. while (a-->0) {
  154. nodes.add(popNode());
  155. }
  156. java.util.Collections.reverse(nodes);
  157. for(Node child : nodes) {
  158. if (specialTokensAreNodes&&(child instanceof Token)) {
  159. Token token=(Token) child;
  160. Token specialToken=token;
  161. while (specialToken.specialToken!=null) {
  162. specialToken=specialToken.specialToken;
  163. }
  164. while (specialToken!=null&&specialToken!=token) {
  165. n.addChild(specialToken);
  166. specialToken=specialToken.next;
  167. }
  168. }
  169. n.addChild(child);
  170. }
  171. n.close();
  172. pushNode(n);
  173. node_created=true;
  174. }
  175. else {
  176. mark=marks.remove(marks.size()-1);
  177. node_created=false;
  178. }
  179. }
  180. public boolean getBuildTree() {
  181. return buildTree;
  182. }
  183. public void setBuildTree(boolean buildTree) {
  184. this.buildTree=buildTree;
  185. }
  186. private boolean isSpecialToken(Node n) {
  187. if (n instanceof Token) {
  188. Token t=(Token) n;
  189. return t.next!=null&&t.next.specialToken==t;
  190. }
  191. return false;
  192. }
  193. /**
  194. * @deprecated
  195. * Kludge so that existing jjtree-based code that uses
  196. * parser.jjtree.foo can work without change.
  197. */
  198. CParser jjtree=this;
  199. /** Generated Lexer. */
  200. public CLexer token_source;
  201. SimpleCharStream jj_input_stream;
  202. public void setInputSource(String inputSource) {
  203. token_source.setInputSource(inputSource);
  204. }
  205. String getInputSource() {
  206. return token_source.getInputSource();
  207. }
  208. Token current_token;
  209. /** Next token. */
  210. private Token jj_nt;
  211. private int jj_ntk;
  212. private Token jj_scanpos,jj_lastpos;
  213. private int jj_la;
  214. /** Whether we are looking ahead. */
  215. private boolean jj_lookingAhead=false;
  216. private boolean jj_semLA;
  217. private int jj_gen;
  218. final private int[] jj_la1=new int[79];
  219. static private int[] jj_la1_0;
  220. static private int[] jj_la1_1;
  221. static private int[] jj_la1_2;
  222. static private int[] jj_la1_3;
  223. static {
  224. jj_la1_init_0();
  225. jj_la1_init_1();
  226. jj_la1_init_2();
  227. jj_la1_init_3();
  228. }
  229. private static void jj_la1_init_0() {
  230. jj_la1_0=new int[]{0x0,0xa0a00000,0x100000,0xa0a00000,0x42400000,0x100000,0x0,0x0,0x40000000,0x0,0x0,0x100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4068c00,0x0,0x0,0x0,0x100000,0x0,0x100000,0x0,0x0,0x0,0x0,0x4068c00,0x0,0x0,0x0,0x4068c00,0x0,0x0,0x4068c00,0x0,0x8000000,0x10080000,0x1000000,0x4068c00,0x8000000,0x0,0x0,0x4068c00,0x4068c00,0x10080000,0x4068c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4068c00,0x4000000,0x0,0x0,0x0,0x0,0x68c00,0x68c00,0x0,0x68c00};
  231. }
  232. private static void jj_la1_init_1() {
  233. jj_la1_1=new int[]{0x80400000,0x800,0x10,0x800,0x93669,0x10,0x400000,0x400000,0x8,0x10000000,0x20000000,0x10,0x10000000,0x80400000,0xc0400000,0x400000,0x400000,0x10000000,0x20000000,0x0,0x80400000,0x80000000,0x80400000,0x400000,0x0,0x80000000,0x10,0x0,0x10,0x10000000,0x80000000,0x10000000,0x10000000,0x84400000,0x80000000,0x0,0x80000000,0x80400000,0x80000000,0x80000000,0x80400000,0x80000000,0x4068002,0x4004,0x4100,0x80400000,0x20000,0x48002,0x2000000,0x80400000,0x80400000,0x4004,0x80400000,0x10000000,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0x0,0x0,0x80000000,0x80000000,0x80000000,0x80400000,0x400000,0x10000000,0x0};
  234. }
  235. private static void jj_la1_init_2() {
  236. jj_la1_2=new int[]{0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x0,0x0,0x0,0x0,0x8,0x0,0x2,0x60400008,0x0,0x2,0x0,0x0,0x8,0x0,0x0,0xa,0x0,0x0,0x60400008,0xa,0x8,0xa,0x60400008,0x2,0x2,0x60400008,0x2,0x0,0x0,0x0,0x60400008,0x0,0x0,0x0,0x60400008,0x60400008,0x0,0x60400008,0x0,0x1ff80,0x20000,0x40000,0x80000,0x100000,0x200000,0x400000,0x1800000,0x1800000,0x1e000000,0x1e000000,0x60000000,0x60000000,0x80000008,0x80000008,0x60400008,0x60400008,0x60400008,0x0,0x2,0x2,0x0,0x0,0x0,0x0};
  237. }
  238. private static void jj_la1_init_3() {
  239. jj_la1_3=new int[]{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1e,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1e,0x1e,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1e,0x1e,0x18,0x0,0x66,0x66,0x0,0x0,0x0,0x0};
  240. }
  241. final private JJCalls[] jj_2_rtns=new JJCalls[43];
  242. private boolean jj_rescan=false;
  243. private int jj_gc=0;
  244. public CParser(java.io.Reader stream) {
  245. jj_input_stream=new SimpleCharStream(stream,1,1);
  246. token_source=new CLexer(this,jj_input_stream);
  247. current_token=new Token();
  248. jj_ntk=-1;
  249. for(int i=0;
  250. i<79;
  251. i++) jj_la1[i]=-1;
  252. for(int i=0;
  253. i<jj_2_rtns.length;
  254. i++) jj_2_rtns[i]=new JJCalls();
  255. }
  256. /** Constructor with generated Token Manager. */
  257. public CParser(CLexer tm) {
  258. token_source=tm;
  259. current_token=new Token();
  260. jj_ntk=-1;
  261. for(int i=0;
  262. i<79;
  263. i++) jj_la1[i]=-1;
  264. for(int i=0;
  265. i<jj_2_rtns.length;
  266. i++) jj_2_rtns[i]=new JJCalls();
  267. }
  268. private Token jj_consume_token(int kind) throws ParseException {
  269. Token oldToken=current_token;
  270. if (current_token.next!=null) current_token=current_token.next;
  271. else current_token=current_token.next=token_source.getNextToken();
  272. jj_ntk=-1;
  273. if (current_token.kind==kind) {
  274. jj_gen++;
  275. if (++jj_gc>100) {
  276. jj_gc=0;
  277. for(int i=0;
  278. i<jj_2_rtns.length;
  279. i++) {
  280. JJCalls c=jj_2_rtns[i];
  281. while (c!=null) {
  282. if (c.gen<jj_gen) c.first=null;
  283. c=c.next;
  284. }
  285. }
  286. }
  287. if (buildTree&&tokensAreNodes) {
  288. pushNode(current_token);
  289. }
  290. return current_token;
  291. }
  292. current_token=oldToken;
  293. jj_kind=kind;
  294. throw generateParseException();
  295. }
  296. @SuppressWarnings("serial")
  297. static private final class LookaheadSuccess extends java.lang.Error {
  298. }
  299. final private LookaheadSuccess jj_ls=new LookaheadSuccess();
  300. private boolean jj_scan_token(int kind) {
  301. if (jj_scanpos==jj_lastpos) {
  302. jj_la--;
  303. if (jj_scanpos.next==null) {
  304. jj_lastpos=jj_scanpos=jj_scanpos.next=token_source.getNextToken();
  305. }
  306. else {
  307. jj_lastpos=jj_scanpos=jj_scanpos.next;
  308. }
  309. }
  310. else {
  311. jj_scanpos=jj_scanpos.next;
  312. }
  313. if (jj_rescan) {
  314. int i=0;
  315. Token tok=current_token;
  316. while (tok!=null&&tok!=jj_scanpos) {
  317. i++;
  318. tok=tok.next;
  319. }
  320. if (tok!=null) jj_add_error_token(kind,i);
  321. }
  322. if (jj_scanpos.kind!=kind) return true;
  323. if (jj_la==0&&jj_scanpos==jj_lastpos) throw jj_ls;
  324. return false;
  325. }
  326. /** Get the next Token. */
  327. final public Token getNextToken() {
  328. if (current_token.next!=null) current_token=current_token.next;
  329. else current_token=current_token.next=token_source.getNextToken();
  330. jj_ntk=-1;
  331. jj_gen++;
  332. return current_token;
  333. }
  334. /** Get the specific Token. */
  335. final public Token getToken(int index) {
  336. Token t=current_token;
  337. for(int i=0;
  338. i<index;
  339. i++) {
  340. if (t.next!=null) t=t.next;
  341. else t=t.next=token_source.getNextToken();
  342. }
  343. return t;
  344. }
  345. private int jj_ntk() {
  346. if ((jj_nt=current_token.next)==null) return(jj_ntk=(current_token.next=token_source.getNextToken()).kind);
  347. else return(jj_ntk=jj_nt.kind);
  348. }
  349. private java.util.ArrayList<int[]>jj_expentries=new java.util.ArrayList<int[]>();
  350. private int[] jj_expentry;
  351. private int jj_kind=-1;
  352. private int[] jj_lasttokens=new int[100];
  353. private int jj_endpos;
  354. private void jj_add_error_token(int kind,int pos) {
  355. if (pos>=100) return;
  356. if (pos==jj_endpos+1) {
  357. jj_lasttokens[jj_endpos++]=kind;
  358. }
  359. else if (jj_endpos!=0) {
  360. jj_expentry=new int[jj_endpos];
  361. for(int i=0;
  362. i<jj_endpos;
  363. i++) {
  364. jj_expentry[i]=jj_lasttokens[i];
  365. }
  366. jj_entries_loop:
  367. for(java.util.Iterator<int[]>it=jj_expentries.iterator();
  368. it.hasNext();
  369. ) {
  370. int[] oldentry=(int[])(it.next());
  371. if (oldentry.length==jj_expentry.length) {
  372. for(int i=0;
  373. i<jj_expentry.length;
  374. i++) {
  375. if (oldentry[i]!=jj_expentry[i]) {
  376. continue jj_entries_loop;
  377. }
  378. }
  379. jj_expentries.add(jj_expentry);
  380. break jj_entries_loop;
  381. }
  382. }
  383. if (pos!=0) jj_lasttokens[(jj_endpos=pos)-1]=kind;
  384. }
  385. }
  386. public ParseException generateParseException() {
  387. jj_expentries.clear();
  388. boolean[] la1tokens=new boolean[103];
  389. if (jj_kind>=0) {
  390. la1tokens[jj_kind]=true;
  391. jj_kind=-1;
  392. }
  393. for(int i=0;
  394. i<79;
  395. i++) {
  396. if (jj_la1[i]==jj_gen) {
  397. for(int j=0;
  398. j<32;
  399. j++) {
  400. if ((jj_la1_0[i]&(1<<j))!=0) {
  401. la1tokens[0+j]=true;
  402. }
  403. if ((jj_la1_1[i]&(1<<j))!=0) {
  404. la1tokens[32+j]=true;
  405. }
  406. if ((jj_la1_2[i]&(1<<j))!=0) {
  407. la1tokens[64+j]=true;
  408. }
  409. if ((jj_la1_3[i]&(1<<j))!=0) {
  410. la1tokens[96+j]=true;
  411. }
  412. }
  413. }
  414. }
  415. for(int i=0;
  416. i<103;
  417. i++) {
  418. if (la1tokens[i]) {
  419. jj_expentry=new int[1];
  420. jj_expentry[0]=i;
  421. jj_expentries.add(jj_expentry);
  422. }
  423. }
  424. jj_endpos=0;
  425. jj_rescan_token();
  426. jj_add_error_token(0,0);
  427. int[][] exptokseq=new int[jj_expentries.size()][];
  428. for(int i=0;
  429. i<jj_expentries.size();
  430. i++) {
  431. exptokseq[i]=(int[]) jj_expentries.get(i);
  432. }
  433. return new ParseException(current_token,exptokseq,tokenImage);
  434. }
  435. /** Enable tracing. */
  436. final public void enable_tracing() {
  437. }
  438. /** Disable tracing. */
  439. final public void disable_tracing() {
  440. }
  441. private void jj_rescan_token() {
  442. jj_rescan=true;
  443. for(int i=0;
  444. i<43;
  445. i++) {
  446. try {
  447. JJCalls p=jj_2_rtns[i];
  448. do {
  449. if (p.gen>jj_gen) {
  450. jj_la=p.arg;
  451. jj_lastpos=jj_scanpos=p.first;
  452. switch(i) {
  453. case 0:
  454. jj_3_1();
  455. break;
  456. case 1:
  457. jj_3_2();
  458. break;
  459. case 2:
  460. jj_3_3();
  461. break;
  462. case 3:
  463. jj_3_4();
  464. break;
  465. case 4:
  466. jj_3_5();
  467. break;
  468. case 5:
  469. jj_3_6();
  470. break;
  471. case 6:
  472. jj_3_7();
  473. break;
  474. case 7:
  475. jj_3_8();
  476. break;
  477. case 8:
  478. jj_3_9();
  479. break;
  480. case 9:
  481. jj_3_10();
  482. break;
  483. case 10:
  484. jj_3_11();
  485. break;
  486. case 11:
  487. jj_3_12();
  488. break;
  489. case 12:
  490. jj_3_13();
  491. break;
  492. case 13:
  493. jj_3_14();
  494. break;
  495. case 14:
  496. jj_3_15();
  497. break;
  498. case 15:
  499. jj_3_16();
  500. break;
  501. case 16:
  502. jj_3_17();
  503. break;
  504. case 17:
  505. jj_3_18();
  506. break;
  507. case 18:
  508. jj_3_19();
  509. break;
  510. case 19:
  511. jj_3_20();
  512. break;
  513. case 20:
  514. jj_3_21();
  515. break;
  516. case 21:
  517. jj_3_22();
  518. break;
  519. case 22:
  520. jj_3_23();
  521. break;
  522. case 23:
  523. jj_3_24();
  524. break;
  525. case 24:
  526. jj_3_25();
  527. break;
  528. case 25:
  529. jj_3_26();
  530. break;
  531. case 26:
  532. jj_3_27();
  533. break;
  534. case 27:
  535. jj_3_28();
  536. break;
  537. case 28:
  538. jj_3_29();
  539. break;
  540. case 29:
  541. jj_3_30();
  542. break;
  543. case 30:
  544. jj_3_31();
  545. break;
  546. case 31:
  547. jj_3_32();
  548. break;
  549. case 32:
  550. jj_3_33();
  551. break;
  552. case 33:
  553. jj_3_34();
  554. break;
  555. case 34:
  556. jj_3_35();
  557. break;
  558. case 35:
  559. jj_3_36();
  560. break;
  561. case 36:
  562. jj_3_37();
  563. break;
  564. case 37:
  565. jj_3_38();
  566. break;
  567. case 38:
  568. jj_3_39();
  569. break;
  570. case 39:
  571. jj_3_40();
  572. break;
  573. case 40:
  574. jj_3_41();
  575. break;
  576. case 41:
  577. jj_3_42();
  578. break;
  579. case 42:
  580. jj_3_43();
  581. break;
  582. }
  583. }
  584. p=p.next;
  585. }
  586. while (p!=null);
  587. }
  588. catch(LookaheadSuccess ls) {
  589. }
  590. }
  591. jj_rescan=false;
  592. }
  593. private void jj_save(int index,int xla) {
  594. JJCalls p=jj_2_rtns[index];
  595. while (p.gen>jj_gen) {
  596. if (p.next==null) {
  597. p=p.next=new JJCalls();
  598. break;
  599. }
  600. p=p.next;
  601. }
  602. p.gen=jj_gen+xla-jj_la;
  603. p.first=current_token;
  604. p.arg=xla;
  605. }
  606. static final class JJCalls {
  607. int gen;
  608. Token first;
  609. int arg;
  610. JJCalls next;
  611. }
  612. // C.jj, line 235
  613. final public void TranslationUnit() throws ParseException {
  614. // C.jj, line 237
  615. TranslationUnit node1=null;
  616. if (buildTree) {
  617. node1=new TranslationUnit();
  618. Token jjtStartToken=getToken(1);
  619. node1.setBeginLine(jjtStartToken.beginLine);
  620. node1.setBeginColumn(jjtStartToken.beginColumn);
  621. node1.setInputSource(this.getInputSource());
  622. openNodeScope(node1);
  623. }
  624. boolean hitException1=false;
  625. try {
  626. // C.jj, line 237
  627. label_1:
  628. while (true) {
  629. // C.jj, line 237
  630. // C.jj, line 237
  631. ExternalDeclaration();
  632. if (!(jj_2_1(1))) {
  633. break label_1;
  634. }
  635. }
  636. // C.jj, line 238
  637. printTypes();
  638. }
  639. catch(Exception e1) {
  640. hitException1=false;
  641. if (e1 instanceof ParseException) throw(ParseException) e1;
  642. if (e1 instanceof RuntimeException) throw(RuntimeException) e1;
  643. throw new RuntimeException(e1);
  644. }
  645. finally {
  646. if (buildTree) {
  647. if (!hitException1) {
  648. closeNodeScope(node1,nodeArity()>1);
  649. Token jjtEndToken=getToken(0);
  650. node1.setEndLine(jjtEndToken.endLine);
  651. node1.setEndColumn(jjtEndToken.endColumn);
  652. }
  653. else {
  654. clearNodeScope();
  655. mark=marks.remove(marks.size()-1);
  656. }
  657. }
  658. }
  659. }
  660. // C.jj, line 241
  661. final public void ExternalDeclaration() throws ParseException {
  662. // C.jj, line 243
  663. ExternalDeclaration node2=null;
  664. if (buildTree) {
  665. node2=new ExternalDeclaration();
  666. Token jjtStartToken=getToken(1);
  667. node2.setBeginLine(jjtStartToken.beginLine);
  668. node2.setBeginColumn(jjtStartToken.beginColumn);
  669. node2.setInputSource(this.getInputSource());
  670. openNodeScope(node2);
  671. }
  672. boolean hitException2=false;
  673. try {
  674. // C.jj, line 243
  675. if (jj_2_2(2147483647)) {
  676. // C.jj, line 243
  677. // C.jj, line 243
  678. FunctionDefinition();
  679. }
  680. else if (jj_2_3(1)) {
  681. // C.jj, line 243
  682. // C.jj, line 243
  683. Declaration();
  684. }
  685. else {
  686. jj_consume_token(-1);
  687. throw new ParseException();
  688. }
  689. }
  690. catch(Exception e2) {
  691. hitException2=false;
  692. if (e2 instanceof ParseException) throw(ParseException) e2;
  693. if (e2 instanceof RuntimeException) throw(RuntimeException) e2;
  694. throw new RuntimeException(e2);
  695. }
  696. finally {
  697. if (buildTree) {
  698. if (!hitException2) {
  699. closeNodeScope(node2,nodeArity()>1);
  700. Token jjtEndToken=getToken(0);
  701. node2.setEndLine(jjtEndToken.endLine);
  702. node2.setEndColumn(jjtEndToken.endColumn);
  703. }
  704. else {
  705. clearNodeScope();
  706. mark=marks.remove(marks.size()-1);
  707. }
  708. }
  709. }
  710. }
  711. //Removed Declaration list
  712. //Since declarations are statements now
  713. // C.jj, line 248
  714. final public void FunctionDefinition() throws ParseException {
  715. // C.jj, line 250
  716. FunctionDefinition node3=null;
  717. if (buildTree) {
  718. node3=new FunctionDefinition();
  719. Token jjtStartToken=getToken(1);
  720. node3.setBeginLine(jjtStartToken.beginLine);
  721. node3.setBeginColumn(jjtStartToken.beginColumn);
  722. node3.setInputSource(this.getInputSource());
  723. openNodeScope(node3);
  724. }
  725. boolean hitException3=false;
  726. try {
  727. // C.jj, line 250
  728. if (jj_2_4(2147483647)) {
  729. // C.jj, line 250
  730. // C.jj, line 250
  731. DeclarationSpecifiers();
  732. }
  733. // C.jj, line 250
  734. Declarator();
  735. // C.jj, line 252
  736. CompoundStatement();
  737. }
  738. catch(Exception e3) {
  739. hitException3=false;
  740. if (e3 instanceof ParseException) throw(ParseException) e3;
  741. if (e3 instanceof RuntimeException) throw(RuntimeException) e3;
  742. throw new RuntimeException(e3);
  743. }
  744. finally {
  745. if (buildTree) {
  746. if (!hitException3) {
  747. closeNodeScope(node3,nodeArity()>1);
  748. Token jjtEndToken=getToken(0);
  749. node3.setEndLine(jjtEndToken.endLine);
  750. node3.setEndColumn(jjtEndToken.endColumn);
  751. }
  752. else {
  753. clearNodeScope();
  754. mark=marks.remove(marks.size()-1);
  755. }
  756. }
  757. }
  758. }
  759. // C.jj, line 255
  760. final public void Declaration() throws ParseException {
  761. // C.jj, line 257
  762. Declaration node4=null;
  763. if (buildTree) {
  764. node4=new Declaration();
  765. Token jjtStartToken=getToken(1);
  766. node4.setBeginLine(jjtStartToken.beginLine);
  767. node4.setBeginColumn(jjtStartToken.beginColumn);
  768. node4.setInputSource(this.getInputSource());
  769. openNodeScope(node4);
  770. }
  771. boolean hitException4=false;
  772. try {
  773. // C.jj, line 257
  774. DeclarationSpecifiers();
  775. // C.jj, line 257
  776. int int1=(jj_ntk==-1)?jj_ntk():
  777. jj_ntk;
  778. if (int1==IDENTIFIER||int1==63||int1==67) {
  779. // C.jj, line 257
  780. // C.jj, line 257
  781. InitDeclaratorList();
  782. }
  783. else {
  784. jj_la1[0]=jj_gen;
  785. }
  786. // C.jj, line 257
  787. jj_consume_token(57);
  788. }
  789. catch(Exception e4) {
  790. hitException4=false;
  791. if (e4 instanceof ParseException) throw(ParseException) e4;
  792. if (e4 instanceof RuntimeException) throw(RuntimeException) e4;
  793. throw new RuntimeException(e4);
  794. }
  795. finally {
  796. if (buildTree) {
  797. if (!hitException4) {
  798. closeNodeScope(node4,nodeArity()>1);
  799. Token jjtEndToken=getToken(0);
  800. node4.setEndLine(jjtEndToken.endLine);
  801. node4.setEndColumn(jjtEndToken.endColumn);
  802. }
  803. else {
  804. clearNodeScope();
  805. mark=marks.remove(marks.size()-1);
  806. }
  807. }
  808. }
  809. }
  810. //Changed to allow mid-function declarations
  811. //Removed, but added declaration as type of Statement
  812. // C.jj, line 263
  813. final public void DeclarationList() throws ParseException {
  814. // C.jj, line 265
  815. DeclarationList node5=null;
  816. if (buildTree) {
  817. node5=new DeclarationList();
  818. Token jjtStartToken=getToken(1);
  819. node5.setBeginLine(jjtStartToken.beginLine);
  820. node5.setBeginColumn(jjtStartToken.beginColumn);
  821. node5.setInputSource(this.getInputSource());
  822. openNodeScope(node5);
  823. }
  824. boolean hitException5=false;
  825. try {
  826. // C.jj, line 265
  827. label_2:
  828. while (true) {
  829. // C.jj, line 265
  830. // C.jj, line 265
  831. Declaration();
  832. if (!(jj_2_5(2147483647))) {
  833. break label_2;
  834. }
  835. }
  836. }
  837. catch(Exception e5) {
  838. hitException5=false;
  839. if (e5 instanceof ParseException) throw(ParseException) e5;
  840. if (e5 instanceof RuntimeException) throw(RuntimeException) e5;
  841. throw new RuntimeException(e5);
  842. }
  843. finally {
  844. if (buildTree) {
  845. if (!hitException5) {
  846. closeNodeScope(node5,nodeArity()>1);
  847. Token jjtEndToken=getToken(0);
  848. node5.setEndLine(jjtEndToken.endLine);
  849. node5.setEndColumn(jjtEndToken.endColumn);
  850. }
  851. else {
  852. clearNodeScope();
  853. mark=marks.remove(marks.size()-1);
  854. }
  855. }
  856. }
  857. }
  858. // C.jj, line 268
  859. final public void DeclarationSpecifiers() throws ParseException {
  860. // C.jj, line 270
  861. DeclarationSpecifiers node6=null;
  862. if (buildTree) {
  863. node6=new DeclarationSpecifiers();
  864. Token jjtStartToken=getToken(1);
  865. node6.setBeginLine(jjtStartToken.beginLine);
  866. node6.setBeginColumn(jjtStartToken.beginColumn);
  867. node6.setInputSource(this.getInputSource());
  868. openNodeScope(node6);
  869. }
  870. boolean hitException6=false;
  871. try {
  872. switch((jj_ntk==-1)?jj_ntk():
  873. jj_ntk) {
  874. case REGISTER:
  875. case TYPEDEF:
  876. case EXTERN:
  877. case STATIC:
  878. case AUTO:
  879. // C.jj, line 270
  880. // C.jj, line 270
  881. StorageClassSpecifier();
  882. // C.jj, line 270
  883. if (jj_2_6(2147483647)) {
  884. // C.jj, line 270
  885. // C.jj, line 271
  886. DeclarationSpecifiers();
  887. }
  888. break;
  889. default:
  890. jj_la1[1]=jj_gen;
  891. if (jj_2_9(1)) {
  892. // C.jj, line 272
  893. // C.jj, line 272
  894. TypeSpecifier();
  895. // C.jj, line 272
  896. if (jj_2_7(2147483647)) {
  897. // C.jj, line 272
  898. // C.jj, line 273
  899. DeclarationSpecifiers();
  900. }
  901. }
  902. else {
  903. switch((jj_ntk==-1)?jj_ntk():
  904. jj_ntk) {
  905. case VOLATILE:
  906. case CONST:
  907. // C.jj, line 274
  908. // C.jj, line 274
  909. TypeQualifier();
  910. // C.jj, line 274
  911. if (jj_2_8(2147483647)) {
  912. // C.jj, line 274
  913. // C.jj, line 275
  914. DeclarationSpecifiers();
  915. }
  916. break;
  917. default:
  918. jj_la1[2]=jj_gen;
  919. jj_consume_token(-1);
  920. throw new ParseException();
  921. }
  922. }
  923. }
  924. }
  925. catch(Exception e6) {
  926. hitException6=false;
  927. if (e6 instanceof ParseException) throw(ParseException) e6;
  928. if (e6 instanceof RuntimeException) throw(RuntimeException) e6;
  929. throw new RuntimeException(e6);
  930. }
  931. finally {
  932. if (buildTree) {
  933. if (!hitException6) {
  934. closeNodeScope(node6,nodeArity()>1);
  935. Token jjtEndToken=getToken(0);
  936. node6.setEndLine(jjtEndToken.endLine);
  937. node6.setEndColumn(jjtEndToken.endColumn);
  938. }
  939. else {
  940. clearNodeScope();
  941. mark=marks.remove(marks.size()-1);
  942. }
  943. }
  944. }
  945. }
  946. // C.jj, line 278
  947. final public void StorageClassSpecifier() throws ParseException {
  948. // C.jj, line 280
  949. StorageClassSpecifier node7=null;
  950. if (buildTree) {
  951. node7=new StorageClassSpecifier();
  952. Token jjtStartToken=getToken(1);
  953. node7.setBeginLine(jjtStartToken.beginLine);
  954. node7.setBeginColumn(jjtStartToken.beginColumn);
  955. node7.setInputSource(this.getInputSource());
  956. openNodeScope(node7);
  957. }
  958. boolean hitException7=false;
  959. try {
  960. // C.jj, line 280
  961. switch((jj_ntk==-1)?jj_ntk():
  962. jj_ntk) {
  963. case AUTO:
  964. // C.jj, line 280
  965. // C.jj, line 280
  966. jj_consume_token(AUTO);
  967. break;
  968. case REGISTER:
  969. // C.jj, line 280
  970. // C.jj, line 280
  971. jj_consume_token(REGISTER);
  972. break;
  973. case STATIC:
  974. // C.jj, line 280
  975. // C.jj, line 280
  976. jj_consume_token(STATIC);
  977. break;
  978. case EXTERN:
  979. // C.jj, line 280
  980. // C.jj, line 280
  981. jj_consume_token(EXTERN);
  982. break;
  983. case TYPEDEF:
  984. // C.jj, line 280
  985. // C.jj, line 280
  986. jj_consume_token(TYPEDEF);
  987. // C.jj, line 281
  988. typedefParsingStack.push(Boolean.TRUE);
  989. break;
  990. default:
  991. jj_la1[3]=jj_gen;
  992. jj_consume_token(-1);
  993. throw new ParseException();
  994. }
  995. }
  996. catch(Exception e7) {
  997. hitException7=false;
  998. if (e7 instanceof ParseException) throw(ParseException) e7;
  999. if (e7 instanceof RuntimeException) throw(RuntimeException) e7;
  1000. throw new RuntimeException(e7);
  1001. }
  1002. finally {
  1003. if (buildTree) {
  1004. if (!hitException7) {
  1005. closeNodeScope(node7,nodeArity()>1);
  1006. Token jjtEndToken=getToken(0);
  1007. node7.setEndLine(jjtEndToken.endLine);
  1008. node7.setEndColumn(jjtEndToken.endColumn);
  1009. }
  1010. else {
  1011. clearNodeScope();
  1012. mark=marks.remove(marks.size()-1);
  1013. }
  1014. }
  1015. }
  1016. }
  1017. // C.jj, line 286
  1018. final public void TypeSpecifier() throws ParseException {
  1019. // C.jj, line 288
  1020. TypeSpecifier node8=null;
  1021. if (buildTree) {
  1022. node8=new TypeSpecifier();
  1023. Token jjtStartToken=getToken(1);
  1024. node8.setBeginLine(jjtStartToken.beginLine);
  1025. node8.setBeginColumn(jjtStartToken.beginColumn);
  1026. node8.setInputSource(this.getInputSource());
  1027. openNodeScope(node8);
  1028. }
  1029. boolean hitException8=false;
  1030. try {
  1031. // C.jj, line 288
  1032. switch((jj_ntk==-1)?jj_ntk():
  1033. jj_ntk) {
  1034. case VOID:
  1035. // C.jj, line 288
  1036. // C.jj, line 288
  1037. jj_consume_token(VOID);
  1038. break;
  1039. case CHAR:
  1040. // C.jj, line 288
  1041. // C.jj, line 288
  1042. jj_consume_token(CHAR);
  1043. break;
  1044. case SHORT:
  1045. // C.jj, line 288
  1046. // C.jj, line 288
  1047. jj_consume_token(SHORT);
  1048. break;
  1049. case INT:
  1050. // C.jj, line 288
  1051. // C.jj, line 288
  1052. jj_consume_token(INT);
  1053. break;
  1054. case LONG:
  1055. // C.jj, line 288
  1056. // C.jj, line 288
  1057. jj_consume_token(LONG);
  1058. break;
  1059. case FLOAT:
  1060. // C.jj, line 288
  1061. // C.jj, line 288
  1062. jj_consume_token(FLOAT);
  1063. break;
  1064. case DOUBLE:
  1065. // C.jj, line 288
  1066. // C.jj, line 288
  1067. jj_consume_token(DOUBLE);
  1068. break;
  1069. case SIGNED:
  1070. // C.jj, line 288
  1071. // C.jj, line 288
  1072. jj_consume_token(SIGNED);
  1073. break;
  1074. case BOOL:
  1075. // C.jj, line 288
  1076. // C.jj, line 288
  1077. jj_consume_token(BOOL);
  1078. break;
  1079. case UNSIGNED:
  1080. // C.jj, line 289
  1081. // C.jj, line 289
  1082. jj_consume_token(UNSIGNED);
  1083. break;
  1084. case STRUCT:
  1085. case UNION:
  1086. // C.jj, line 289
  1087. // C.jj, line 289
  1088. StructOrUnionSpecifier();
  1089. break;
  1090. case ENUM:
  1091. // C.jj, line 289
  1092. // C.jj, line 289
  1093. EnumSpecifier();
  1094. break;
  1095. default:
  1096. jj_la1[4]=jj_gen;
  1097. if (isType(getToken(1).image)) {
  1098. // C.jj, line 289
  1099. // C.jj, line 289
  1100. TypedefName();
  1101. }
  1102. else {
  1103. jj_consume_token(-1);
  1104. throw new ParseException();
  1105. }
  1106. }
  1107. }
  1108. catch(Exception e8) {
  1109. hitException8=false;
  1110. if (e8 instanceof ParseException) throw(ParseException) e8;
  1111. if (e8 instanceof RuntimeException) throw(RuntimeException) e8;
  1112. throw new RuntimeException(e8);
  1113. }
  1114. finally {
  1115. if (buildTree) {
  1116. if (!hitException8) {
  1117. closeNodeScope(node8,nodeArity()>1);
  1118. Token jjtEndToken=getToken(0);
  1119. node8.setEndLine(jjtEndToken.endLine);
  1120. node8.setEndColumn(jjtEndToken.endColumn);
  1121. }
  1122. else {
  1123. clearNodeScope();
  1124. mark=marks.remove(marks.size()-1);
  1125. }
  1126. }
  1127. }
  1128. }
  1129. // C.jj, line 292
  1130. final public void TypeQualifier() throws ParseException {
  1131. // C.jj, line 294
  1132. TypeQualifier node9=null;
  1133. if (buildTree) {
  1134. node9=new TypeQualifier();
  1135. Token jjtStartToken=getToken(1);
  1136. node9.setBeginLine(jjtStartToken.beginLine);
  1137. node9.setBeginColumn(jjtStartToken.beginColumn);
  1138. node9.setInputSource(this.getInputSource());
  1139. openNodeScope(node9);
  1140. }
  1141. boolean hitException9=false;
  1142. try {
  1143. // C.jj, line 294
  1144. switch((jj_ntk==-1)?jj_ntk():
  1145. jj_ntk) {
  1146. case CONST:
  1147. // C.jj, line 294
  1148. // C.jj, line 294
  1149. jj_consume_token(CONST);
  1150. break;
  1151. case VOLATILE:
  1152. // C.jj, line 294
  1153. // C.jj, line 294
  1154. jj_consume_token(VOLATILE);
  1155. break;
  1156. default:
  1157. jj_la1[5]=jj_gen;
  1158. jj_consume_token(-1);
  1159. throw new ParseException();
  1160. }
  1161. }
  1162. catch(Exception e9) {
  1163. hitException9=false;
  1164. if (e9 instanceof ParseException) throw(ParseException) e9;
  1165. if (e9 instanceof RuntimeException) throw(RuntimeException) e9;
  1166. throw new RuntimeException(e9);
  1167. }
  1168. finally {
  1169. if (buildTree) {
  1170. if (!hitException9) {
  1171. closeNodeScope(node9,nodeArity()>1);
  1172. Token jjtEndToken=getToken(0);
  1173. node9.setEndLine(jjtEndToken.endLine);
  1174. node9.setEndColumn(jjtEndToken.endColumn);
  1175. }
  1176. else {
  1177. clearNodeScope();
  1178. mark=marks.remove(marks.size()-1);
  1179. }
  1180. }
  1181. }
  1182. }
  1183. // C.jj, line 297
  1184. final public void StructOrUnionSpecifier() throws ParseException {
  1185. // C.jj, line 299
  1186. StructOrUnionSpecifier node10=null;
  1187. if (buildTree) {
  1188. node10=new StructOrUnionSpecifier();
  1189. Token jjtStartToken=getToken(1);
  1190. node10.setBeginLine(jjtStartToken.beginLine);
  1191. node10.setBeginColumn(jjtStartToken.beginColumn);
  1192. node10.setInputSource(this.getInputSource());
  1193. openNodeScope(node10);
  1194. }
  1195. boolean hitException10=false;
  1196. try {
  1197. // C.jj, line 299
  1198. typedefParsingStack.push(Boolean.FALSE);
  1199. // C.jj, line 303
  1200. StructOrUnion();
  1201. // C.jj, line 303
  1202. if (jj_2_10(3)) {
  1203. // C.jj, line 303
  1204. // C.jj, line 303
  1205. int int2=(jj_ntk==-1)?jj_ntk():
  1206. jj_ntk;
  1207. if (int2==IDENTIFIER) {
  1208. // C.jj, line 303
  1209. // C.jj, line 303
  1210. jj_consume_token(IDENTIFIER);
  1211. }
  1212. else {
  1213. jj_la1[6]=jj_gen;
  1214. }
  1215. // C.jj, line 303
  1216. jj_consume_token(58);
  1217. // C.jj, line 303
  1218. StructDeclarationList();
  1219. // C.jj, line 303
  1220. jj_consume_token(59);
  1221. }
  1222. else {
  1223. switch((jj_ntk==-1)?jj_ntk():
  1224. jj_ntk) {
  1225. case IDENTIFIER:
  1226. // C.jj, line 303
  1227. // C.jj, line 303
  1228. jj_consume_token(IDENTIFIER);
  1229. break;
  1230. default:
  1231. jj_la1[7]=jj_gen;
  1232. jj_consume_token(-1);
  1233. throw new ParseException();
  1234. }
  1235. }
  1236. // C.jj, line 305
  1237. typedefParsingStack.pop();
  1238. }
  1239. catch(Exception e10) {
  1240. hitException10=false;
  1241. if (e10 instanceof ParseException) throw(ParseException) e10;
  1242. if (e10 instanceof RuntimeException) throw(RuntimeException) e10;
  1243. throw new RuntimeException(e10);
  1244. }
  1245. finally {
  1246. if (buildTree) {
  1247. if (!hitException10) {
  1248. closeNodeScope(node10,nodeArity()>1);
  1249. Token jjtEndToken=getToken(0);
  1250. node10.setEndLine(jjtEndToken.endLine);
  1251. node10.setEndColumn(jjtEndToken.endColumn);
  1252. }
  1253. else {
  1254. clearNodeScope();
  1255. mark=marks.remove(marks.size()-1);
  1256. }
  1257. }
  1258. }
  1259. }
  1260. // C.jj, line 310
  1261. final public void StructOrUnion() throws ParseException {
  1262. // C.jj, line 312
  1263. StructOrUnion node11=null;
  1264. if (buildTree) {
  1265. node11=new StructOrUnion();
  1266. Token jjtStartToken=getToken(1);
  1267. node11.setBeginLine(jjtStartToken.beginLine);
  1268. node11.setBeginColumn(jjtStartToken.beginColumn);
  1269. node11.setInputSource(this.getInputSource());
  1270. openNodeScope(node11);
  1271. }
  1272. boolean hitException11=false;
  1273. try {
  1274. // C.jj, line 312
  1275. switch((jj_ntk==-1)?jj_ntk():
  1276. jj_ntk) {
  1277. case STRUCT:
  1278. // C.jj, line 312
  1279. // C.jj, line 312
  1280. jj_consume_token(STRUCT);
  1281. break;
  1282. case UNION:
  1283. // C.jj, line 312
  1284. // C.jj, line 312
  1285. jj_consume_token(UNION);
  1286. break;
  1287. default:
  1288. jj_la1[8]=jj_gen;
  1289. jj_consume_token(-1);
  1290. throw new ParseException();
  1291. }
  1292. }
  1293. catch(Exception e11) {
  1294. hitException11=false;
  1295. if (e11 instanceof ParseException) throw(ParseException) e11;
  1296. if (e11 instanceof RuntimeException) throw(RuntimeException) e11;
  1297. throw new RuntimeException(e11);
  1298. }
  1299. finally {
  1300. if (buildTree) {
  1301. if (!hitException11) {
  1302. closeNodeScope(node11,nodeArity()>1);
  1303. Token jjtEndToken=getToken(0);
  1304. node11.setEndLine(jjtEndToken.endLine);
  1305. node11.setEndColumn(jjtEndToken.endColumn);
  1306. }
  1307. else {
  1308. clearNodeScope();
  1309. mark=marks.remove(marks.size()-1);
  1310. }
  1311. }
  1312. }
  1313. }
  1314. // C.jj, line 317
  1315. final public void StructDeclarationList() throws ParseException {
  1316. // C.jj, line 319
  1317. StructDeclarationList node12=null;
  1318. if (buildTree) {
  1319. node12=new StructDeclarationList();
  1320. Token jjtStartToken=getToken(1);
  1321. node12.setBeginLine(jjtStartToken.beginLine);
  1322. node12.setBeginColumn(jjtStartToken.beginColumn);
  1323. node12.setInputSource(this.getInputSource());
  1324. openNodeScope(node12);
  1325. }
  1326. boolean hitException12=false;
  1327. try {
  1328. // C.jj, line 319
  1329. label_3:
  1330. while (true) {
  1331. // C.jj, line 319
  1332. // C.jj, line 319
  1333. StructDeclaration();
  1334. if (!(jj_2_11(1))) {
  1335. break label_3;
  1336. }
  1337. }
  1338. }
  1339. catch(Exception e12) {
  1340. hitException12=false;
  1341. if (e12 instanceof ParseException) throw(ParseException) e12;
  1342. if (e12 instanceof RuntimeException) throw(RuntimeException) e12;
  1343. throw new RuntimeException(e12);
  1344. }
  1345. finally {
  1346. if (buildTree) {
  1347. if (!hitException12) {
  1348. closeNodeScope(node12,nodeArity()>1);
  1349. Token jjtEndToken=getToken(0);
  1350. node12.setEndLine(jjtEndToken.endLine);
  1351. node12.setEndColumn(jjtEndToken.endColumn);
  1352. }
  1353. else {
  1354. clearNodeScope();
  1355. mark=marks.remove(marks.size()-1);
  1356. }
  1357. }
  1358. }
  1359. }
  1360. // C.jj, line 322
  1361. final public void InitDeclaratorList() throws ParseException {
  1362. // C.jj, line 324
  1363. InitDeclaratorList node13=null;
  1364. if (buildTree) {
  1365. node13=new InitDeclaratorList();
  1366. Token jjtStartToken=getToken(1);
  1367. node13.setBeginLine(jjtStartToken.beginLine);
  1368. node13.setBeginColumn(jjtStartToken.beginColumn);
  1369. node13.setInputSource(this.getInputSource());
  1370. openNodeScope(node13);
  1371. }
  1372. boolean hitException13=false;
  1373. try {
  1374. // C.jj, line 324
  1375. InitDeclarator();
  1376. // C.jj, line 324
  1377. label_4:
  1378. while (true) {
  1379. int int3=(jj_ntk==-1)?jj_ntk():
  1380. jj_ntk;
  1381. if (!(int3==60)) {
  1382. jj_la1[9]=jj_gen;
  1383. break label_4;
  1384. }
  1385. // C.jj, line 324
  1386. // C.jj, line 324
  1387. jj_consume_token(60);
  1388. // C.jj, line 324
  1389. InitDeclarator();
  1390. }
  1391. // C.jj, line 325
  1392. // Finished with a typedefDeclaration??
  1393. if (!(typedefParsingStack.empty())&&((Boolean) typedefParsingStack.peek()).booleanValue()) {
  1394. typedefParsingStack.pop();
  1395. }
  1396. }
  1397. catch(Exception e13) {
  1398. hitException13=false;
  1399. if (e13 instanceof ParseException) throw(ParseException) e13;
  1400. if (e13 instanceof RuntimeException) throw(RuntimeException) e13;
  1401. throw new RuntimeException(e13);
  1402. }
  1403. finally {
  1404. if (buildTree) {
  1405. if (!hitException13) {
  1406. closeNodeScope(node13,nodeArity()>1);
  1407. Token jjtEndToken=getToken(0);
  1408. node13.setEndLine(jjtEndToken.endLine);
  1409. node13.setEndColumn(jjtEndToken.e

Large files files are truncated, but you can click here to view the full file