Preprocessor.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:12k
源码类别:

编译器/解释器

开发平台:

Others

  1. // $ANTLR 2.7.0a11: "preproc.g" -> "Preprocessor.java"$
  2. package antlr.preprocessor;
  3. import antlr.TokenBuffer;
  4. import antlr.TokenStreamException;
  5. import antlr.TokenStreamIOException;
  6. import antlr.ANTLRException;
  7. import antlr.LLkParser;
  8. import antlr.Token;
  9. import antlr.TokenStream;
  10. import antlr.RecognitionException;
  11. import antlr.NoViableAltException;
  12. import antlr.MismatchedTokenException;
  13. import antlr.SemanticException;
  14. import antlr.ParserSharedInputState;
  15. import antlr.collections.impl.BitSet;
  16. import antlr.collections.AST;
  17. import antlr.ASTPair;
  18. import antlr.collections.impl.ASTArray;
  19. import antlr.collections.impl.IndexedVector;
  20. import java.util.Hashtable;
  21. import antlr.preprocessor.Grammar;
  22. public class Preprocessor extends antlr.LLkParser
  23.        implements PreprocessorTokenTypes
  24.  {
  25. protected Preprocessor(TokenBuffer tokenBuf, int k) {
  26.   super(tokenBuf,k);
  27.   tokenNames = _tokenNames;
  28. }
  29. public Preprocessor(TokenBuffer tokenBuf) {
  30.   this(tokenBuf,1);
  31. }
  32. protected Preprocessor(TokenStream lexer, int k) {
  33.   super(lexer,k);
  34.   tokenNames = _tokenNames;
  35. }
  36. public Preprocessor(TokenStream lexer) {
  37.   this(lexer,1);
  38. }
  39. public Preprocessor(ParserSharedInputState state) {
  40.   super(state,1);
  41.   tokenNames = _tokenNames;
  42. }
  43. public final void grammarFile(
  44. Hierarchy hier, String file
  45. ) throws RecognitionException, TokenStreamException {
  46. Token  hdr = null;
  47. Grammar gr;
  48. IndexedVector opt=null;
  49. try {      // for error handling
  50. {
  51. _loop3:
  52. do {
  53. if ((LA(1)==HEADER_ACTION)) {
  54. hdr = LT(1);
  55. match(HEADER_ACTION);
  56. hier.getFile(file).addHeaderAction(hdr.getText());
  57. }
  58. else {
  59. break _loop3;
  60. }
  61. } while (true);
  62. }
  63. {
  64. switch ( LA(1)) {
  65. case OPTIONS_START:
  66. {
  67. opt=optionSpec(null);
  68. break;
  69. }
  70. case EOF:
  71. case ACTION:
  72. case LITERAL_class:
  73. {
  74. break;
  75. }
  76. default:
  77. {
  78. throw new NoViableAltException(LT(1), getFilename());
  79. }
  80. }
  81. }
  82. {
  83. _loop6:
  84. do {
  85. if ((LA(1)==ACTION||LA(1)==LITERAL_class)) {
  86. gr=class_def(hier);
  87. if ( opt!=null ) {
  88. hier.getFile(file).setOptions(opt);
  89. }
  90. if ( gr!=null ) {
  91. gr.setFileName(file);
  92. hier.addGrammar(gr);
  93. }
  94. }
  95. else {
  96. break _loop6;
  97. }
  98. } while (true);
  99. }
  100. match(Token.EOF_TYPE);
  101. }
  102. catch (RecognitionException ex) {
  103. reportError(ex);
  104. consume();
  105. consumeUntil(_tokenSet_0);
  106. }
  107. }
  108. public final IndexedVector  optionSpec(
  109. Grammar gr
  110. ) throws RecognitionException, TokenStreamException {
  111. IndexedVector options;
  112. Token  op = null;
  113. Token  rhs = null;
  114. options = new IndexedVector();
  115. try {      // for error handling
  116. match(OPTIONS_START);
  117. {
  118. _loop16:
  119. do {
  120. if ((LA(1)==ID)) {
  121. op = LT(1);
  122. match(ID);
  123. rhs = LT(1);
  124. match(ASSIGN_RHS);
  125. Option newOp = new Option(op.getText(),rhs.getText(),gr);
  126. options.appendElement(newOp.getName(),newOp);
  127. if ( gr!=null && op.getText().equals("importVocab") ) {
  128. gr.specifiedVocabulary = true;
  129. gr.importVocab = rhs.getText();
  130. }
  131. else if ( gr!=null && op.getText().equals("exportVocab") ) {
  132. // don't want ';' included in outputVocab.
  133. // This is heinously inconsistent!  Ugh.
  134. gr.exportVocab = rhs.getText().substring(0,rhs.getText().length()-1);
  135. }
  136. }
  137. else {
  138. break _loop16;
  139. }
  140. } while (true);
  141. }
  142. match(RCURLY);
  143. }
  144. catch (RecognitionException ex) {
  145. reportError(ex);
  146. consume();
  147. consumeUntil(_tokenSet_1);
  148. }
  149. return options;
  150. }
  151. public final Grammar  class_def(
  152. Hierarchy hier
  153. ) throws RecognitionException, TokenStreamException {
  154. Grammar gr;
  155. Token  preamble = null;
  156. Token  sub = null;
  157. Token  sup = null;
  158. Token  tk = null;
  159. Token  memberA = null;
  160. gr=null;
  161. IndexedVector rules = new IndexedVector(100);
  162. IndexedVector classOptions = null;
  163. try {      // for error handling
  164. {
  165. switch ( LA(1)) {
  166. case ACTION:
  167. {
  168. preamble = LT(1);
  169. match(ACTION);
  170. break;
  171. }
  172. case LITERAL_class:
  173. {
  174. break;
  175. }
  176. default:
  177. {
  178. throw new NoViableAltException(LT(1), getFilename());
  179. }
  180. }
  181. }
  182. match(LITERAL_class);
  183. sub = LT(1);
  184. match(ID);
  185. match(LITERAL_extends);
  186. sup = LT(1);
  187. match(ID);
  188. match(SEMI);
  189. gr = (Grammar)hier.getGrammar(sub.getText());
  190. if ( gr!=null ) {
  191. antlr.Tool.toolError("redefinition of grammar "+gr.getName()+" ignored");
  192. gr=null;
  193. }
  194. else {
  195. gr = new Grammar(sub.getText(), sup.getText(), rules);
  196. if ( preamble!=null ) {
  197. gr.setPreambleAction(preamble.getText());
  198. }
  199. }
  200. {
  201. switch ( LA(1)) {
  202. case OPTIONS_START:
  203. {
  204. classOptions=optionSpec(gr);
  205. break;
  206. }
  207. case ACTION:
  208. case ID:
  209. case TOKENS_SPEC:
  210. case LITERAL_protected:
  211. case LITERAL_private:
  212. case LITERAL_public:
  213. {
  214. break;
  215. }
  216. default:
  217. {
  218. throw new NoViableAltException(LT(1), getFilename());
  219. }
  220. }
  221. }
  222. if ( gr!=null ) {
  223. gr.setOptions(classOptions);
  224. }
  225. {
  226. switch ( LA(1)) {
  227. case TOKENS_SPEC:
  228. {
  229. tk = LT(1);
  230. match(TOKENS_SPEC);
  231. gr.setTokenSection(tk.getText());
  232. break;
  233. }
  234. case ACTION:
  235. case ID:
  236. case LITERAL_protected:
  237. case LITERAL_private:
  238. case LITERAL_public:
  239. {
  240. break;
  241. }
  242. default:
  243. {
  244. throw new NoViableAltException(LT(1), getFilename());
  245. }
  246. }
  247. }
  248. {
  249. switch ( LA(1)) {
  250. case ACTION:
  251. {
  252. memberA = LT(1);
  253. match(ACTION);
  254. gr.setMemberAction(memberA.getText());
  255. break;
  256. }
  257. case ID:
  258. case LITERAL_protected:
  259. case LITERAL_private:
  260. case LITERAL_public:
  261. {
  262. break;
  263. }
  264. default:
  265. {
  266. throw new NoViableAltException(LT(1), getFilename());
  267. }
  268. }
  269. }
  270. {
  271. int _cnt13=0;
  272. _loop13:
  273. do {
  274. if ((_tokenSet_2.member(LA(1)))) {
  275. rule(gr);
  276. }
  277. else {
  278. if ( _cnt13>=1 ) { break _loop13; } else {throw new NoViableAltException(LT(1), getFilename());}
  279. }
  280. _cnt13++;
  281. } while (true);
  282. }
  283. }
  284. catch (RecognitionException ex) {
  285. reportError(ex);
  286. consume();
  287. consumeUntil(_tokenSet_3);
  288. }
  289. return gr;
  290. }
  291. public final void rule(
  292. Grammar gr
  293. ) throws RecognitionException, TokenStreamException {
  294. Token  r = null;
  295. Token  arg = null;
  296. Token  ret = null;
  297. Token  init = null;
  298. Token  blk = null;
  299. IndexedVector o = null; // options for rule
  300. String vis = null;
  301. boolean bang=false;
  302. String eg=null;
  303. try {      // for error handling
  304. {
  305. switch ( LA(1)) {
  306. case LITERAL_protected:
  307. {
  308. match(LITERAL_protected);
  309. vis="protected";
  310. break;
  311. }
  312. case LITERAL_private:
  313. {
  314. match(LITERAL_private);
  315. vis="private";
  316. break;
  317. }
  318. case LITERAL_public:
  319. {
  320. match(LITERAL_public);
  321. vis="public";
  322. break;
  323. }
  324. case ID:
  325. {
  326. break;
  327. }
  328. default:
  329. {
  330. throw new NoViableAltException(LT(1), getFilename());
  331. }
  332. }
  333. }
  334. r = LT(1);
  335. match(ID);
  336. {
  337. switch ( LA(1)) {
  338. case BANG:
  339. {
  340. match(BANG);
  341. bang=true;
  342. break;
  343. }
  344. case ACTION:
  345. case OPTIONS_START:
  346. case ARG_ACTION:
  347. case LITERAL_returns:
  348. case RULE_BLOCK:
  349. {
  350. break;
  351. }
  352. default:
  353. {
  354. throw new NoViableAltException(LT(1), getFilename());
  355. }
  356. }
  357. }
  358. {
  359. switch ( LA(1)) {
  360. case ARG_ACTION:
  361. {
  362. arg = LT(1);
  363. match(ARG_ACTION);
  364. break;
  365. }
  366. case ACTION:
  367. case OPTIONS_START:
  368. case LITERAL_returns:
  369. case RULE_BLOCK:
  370. {
  371. break;
  372. }
  373. default:
  374. {
  375. throw new NoViableAltException(LT(1), getFilename());
  376. }
  377. }
  378. }
  379. {
  380. switch ( LA(1)) {
  381. case LITERAL_returns:
  382. {
  383. match(LITERAL_returns);
  384. ret = LT(1);
  385. match(ARG_ACTION);
  386. break;
  387. }
  388. case ACTION:
  389. case OPTIONS_START:
  390. case RULE_BLOCK:
  391. {
  392. break;
  393. }
  394. default:
  395. {
  396. throw new NoViableAltException(LT(1), getFilename());
  397. }
  398. }
  399. }
  400. {
  401. switch ( LA(1)) {
  402. case OPTIONS_START:
  403. {
  404. o=optionSpec(null);
  405. break;
  406. }
  407. case ACTION:
  408. case RULE_BLOCK:
  409. {
  410. break;
  411. }
  412. default:
  413. {
  414. throw new NoViableAltException(LT(1), getFilename());
  415. }
  416. }
  417. }
  418. {
  419. switch ( LA(1)) {
  420. case ACTION:
  421. {
  422. init = LT(1);
  423. match(ACTION);
  424. break;
  425. }
  426. case RULE_BLOCK:
  427. {
  428. break;
  429. }
  430. default:
  431. {
  432. throw new NoViableAltException(LT(1), getFilename());
  433. }
  434. }
  435. }
  436. blk = LT(1);
  437. match(RULE_BLOCK);
  438. eg=exceptionGroup();
  439. String rtext = blk.getText()+eg;
  440. Rule ppr = new Rule(r.getText(),rtext,o,gr);
  441. if ( arg!=null ) {
  442. ppr.setArgs(arg.getText());
  443. }
  444. if ( ret!=null ) {
  445. ppr.setReturnValue(ret.getText());
  446. }
  447. if ( init!=null ) {
  448. ppr.setInitAction(init.getText());
  449. }
  450. if ( bang ) {
  451. ppr.setBang();
  452. }
  453. ppr.setVisibility(vis);
  454. if ( gr!=null ) {
  455. gr.addRule(ppr);
  456. }
  457. }
  458. catch (RecognitionException ex) {
  459. reportError(ex);
  460. consume();
  461. consumeUntil(_tokenSet_4);
  462. }
  463. }
  464. public final String  exceptionGroup() throws RecognitionException, TokenStreamException {
  465. String g;
  466. String e=null; g="";
  467. try {      // for error handling
  468. {
  469. _loop26:
  470. do {
  471. if ((LA(1)==LITERAL_exception)) {
  472. e=exceptionSpec();
  473. g += e;
  474. }
  475. else {
  476. break _loop26;
  477. }
  478. } while (true);
  479. }
  480. }
  481. catch (RecognitionException ex) {
  482. reportError(ex);
  483. consume();
  484. consumeUntil(_tokenSet_4);
  485. }
  486. return g;
  487. }
  488. public final String  exceptionSpec() throws RecognitionException, TokenStreamException {
  489. String es;
  490. Token  aa = null;
  491. String h=null;
  492. es = System.getProperty("line.separator")+"exception ";
  493. try {      // for error handling
  494. match(LITERAL_exception);
  495. {
  496. switch ( LA(1)) {
  497. case ARG_ACTION:
  498. {
  499. aa = LT(1);
  500. match(ARG_ACTION);
  501. es += aa.getText();
  502. break;
  503. }
  504. case EOF:
  505. case ACTION:
  506. case LITERAL_class:
  507. case ID:
  508. case LITERAL_protected:
  509. case LITERAL_private:
  510. case LITERAL_public:
  511. case LITERAL_exception:
  512. case LITERAL_catch:
  513. {
  514. break;
  515. }
  516. default:
  517. {
  518. throw new NoViableAltException(LT(1), getFilename());
  519. }
  520. }
  521. }
  522. {
  523. _loop30:
  524. do {
  525. if ((LA(1)==LITERAL_catch)) {
  526. h=exceptionHandler();
  527. es += h;
  528. }
  529. else {
  530. break _loop30;
  531. }
  532. } while (true);
  533. }
  534. }
  535. catch (RecognitionException ex) {
  536. reportError(ex);
  537. consume();
  538. consumeUntil(_tokenSet_5);
  539. }
  540. return es;
  541. }
  542. public final String  exceptionHandler() throws RecognitionException, TokenStreamException {
  543. String h;
  544. Token  a1 = null;
  545. Token  a2 = null;
  546. h=null;
  547. try {      // for error handling
  548. match(LITERAL_catch);
  549. a1 = LT(1);
  550. match(ARG_ACTION);
  551. a2 = LT(1);
  552. match(ACTION);
  553. h = System.getProperty("line.separator")+
  554.  "catch "+a1.getText()+" "+a2.getText();
  555. }
  556. catch (RecognitionException ex) {
  557. reportError(ex);
  558. consume();
  559. consumeUntil(_tokenSet_6);
  560. }
  561. return h;
  562. }
  563. public static final String[] _tokenNames = {
  564. "<0>",
  565. "EOF",
  566. "<2>",
  567. "NULL_TREE_LOOKAHEAD",
  568. ""tokens"",
  569. "HEADER_ACTION",
  570. "ACTION",
  571. ""class"",
  572. "ID",
  573. ""extends"",
  574. "SEMI",
  575. "TOKENS_SPEC",
  576. "OPTIONS_START",
  577. "ASSIGN_RHS",
  578. "RCURLY",
  579. ""protected"",
  580. ""private"",
  581. ""public"",
  582. "BANG",
  583. "ARG_ACTION",
  584. ""returns"",
  585. "RULE_BLOCK",
  586. ""exception"",
  587. ""catch"",
  588. "SUBRULE_BLOCK",
  589. "ALT",
  590. "ELEMENT",
  591. "ID_OR_KEYWORD",
  592. "CURLY_BLOCK_SCARF",
  593. "WS",
  594. "NEWLINE",
  595. "COMMENT",
  596. "SL_COMMENT",
  597. "ML_COMMENT",
  598. "CHAR_LITERAL",
  599. "STRING_LITERAL",
  600. "ESC",
  601. "DIGIT",
  602. "XDIGIT"
  603. };
  604. private static final long _tokenSet_0_data_[] = { 2L, 0L };
  605. public static final BitSet _tokenSet_0 = new BitSet(_tokenSet_0_data_);
  606. private static final long _tokenSet_1_data_[] = { 2329026L, 0L };
  607. public static final BitSet _tokenSet_1 = new BitSet(_tokenSet_1_data_);
  608. private static final long _tokenSet_2_data_[] = { 229632L, 0L };
  609. public static final BitSet _tokenSet_2 = new BitSet(_tokenSet_2_data_);
  610. private static final long _tokenSet_3_data_[] = { 194L, 0L };
  611. public static final BitSet _tokenSet_3 = new BitSet(_tokenSet_3_data_);
  612. private static final long _tokenSet_4_data_[] = { 229826L, 0L };
  613. public static final BitSet _tokenSet_4 = new BitSet(_tokenSet_4_data_);
  614. private static final long _tokenSet_5_data_[] = { 4424130L, 0L };
  615. public static final BitSet _tokenSet_5 = new BitSet(_tokenSet_5_data_);
  616. private static final long _tokenSet_6_data_[] = { 12812738L, 0L };
  617. public static final BitSet _tokenSet_6 = new BitSet(_tokenSet_6_data_);
  618. }