dlg_p.c
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:17k
源码类别:

编译器/解释器

开发平台:

Others

  1. /*
  2.  * A n t l r  T r a n s l a t i o n  H e a d e r
  3.  *
  4.  * Terence Parr, Will Cohen, and Hank Dietz: 1989-1998
  5.  * Purdue University Electrical Engineering
  6.  * With AHPCRC, University of Minnesota
  7.  * ANTLR Version 1.33MR14
  8.  *
  9.  *   ../bin/antlr dlg_p.g
  10.  *
  11.  */
  12. #define ANTLR_VERSION 13314
  13. #include "pcctscfg.h"
  14. #include PCCTS_STDIO_H
  15. #include <ctype.h>
  16. #include "dlg.h"
  17. #ifdef MEMCHK
  18. #include "trax.h"
  19. #endif
  20. #define zzSET_SIZE 8
  21. #include "antlr.h"
  22. #include "tokens.h"
  23. #include "dlgdef.h"
  24. #include "mode.h"
  25. #ifndef PURIFY
  26. #define PURIFY(r,s) memset((char *) &(r),'',(s));
  27. #endif
  28. ANTLR_INFO
  29. int action_no = 0;    /* keep track of actions outputed */
  30. int nfa_allocated = 0; /* keeps track of number of nfa nodes */
  31. nfa_node **nfa_array = NULL;/* root of binary tree that stores nfa array */
  32. nfa_node nfa_model_node;   /* model to initialize new nodes */
  33. set used_chars;    /* used to label trans. arcs */
  34. set used_classes;    /* classes or chars used to label trans. arcs */
  35. set normal_chars;    /* mask to get rid elements that aren't used
  36. in set */
  37. int flag_paren = FALSE;
  38. int flag_brace = FALSE;
  39. int mode_counter = 0;  /* keep track of number of %%names */
  40. void
  41. #ifdef __USE_PROTOS
  42. grammar(void)
  43. #else
  44. grammar()
  45. #endif
  46. {
  47. zzRULE;
  48. zzBLOCK(zztasp1);
  49. zzMake0;
  50. {
  51. p_head(); p_class_hdr(); func_action = FALSE;
  52. {
  53. zzBLOCK(zztasp2);
  54. zzMake0;
  55. {
  56. while ( (setwd1[LA(1)]&0x1) ) {
  57. {
  58. zzBLOCK(zztasp3);
  59. zzMake0;
  60. {
  61. if ( (LA(1)==LEXACTION) ) {
  62. zzmatch(LEXACTION); zzCONSUME;
  63. }
  64. else {
  65. if ( (LA(1)==LEXMEMBER) ) {
  66. zzmatch(LEXMEMBER); zzCONSUME;
  67. }
  68. else {
  69. if ( (LA(1)==LEXPREFIX) ) {
  70. zzmatch(LEXPREFIX); zzCONSUME;
  71. }
  72. else {
  73. if ( (LA(1)==PARSERCLASS) ) {
  74. zzmatch(PARSERCLASS); zzCONSUME;
  75. }
  76. }
  77. }
  78. }
  79. zzEXIT(zztasp3);
  80. }
  81. }
  82. zzmatch(ACTION); zzCONSUME;
  83. zzLOOP(zztasp2);
  84. }
  85. zzEXIT(zztasp2);
  86. }
  87. }
  88. if ( gen_cpp ) p_includes();
  89. start_states();
  90. func_action = FALSE; p_tables(); p_tail();
  91. {
  92. zzBLOCK(zztasp2);
  93. zzMake0;
  94. {
  95. while ( (LA(1)==ACTION) ) {
  96. zzmatch(ACTION); zzCONSUME;
  97. zzLOOP(zztasp2);
  98. }
  99. zzEXIT(zztasp2);
  100. }
  101. }
  102. zzmatch(1);
  103. if (firstLexMember != 0) p_class_def1();
  104.  zzCONSUME;
  105. zzEXIT(zztasp1);
  106. return;
  107. fail:
  108. zzEXIT(zztasp1);
  109. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  110. zzresynch(setwd1, 0x2);
  111. }
  112. }
  113. void
  114. #ifdef __USE_PROTOS
  115. start_states(void)
  116. #else
  117. start_states()
  118. #endif
  119. {
  120. zzRULE;
  121. zzBLOCK(zztasp1);
  122. zzMake0;
  123. {
  124. {
  125. zzBLOCK(zztasp2);
  126. zzMake0;
  127. {
  128. if ( (LA(1)==PER_PER) ) {
  129. zzmatch(PER_PER); zzCONSUME;
  130. do_conversion();
  131. }
  132. else {
  133. if ( (LA(1)==NAME_PER_PER) ) {
  134. zzmatch(NAME_PER_PER); zzCONSUME;
  135. do_conversion();
  136. {
  137. zzBLOCK(zztasp3);
  138. zzMake0;
  139. {
  140. while ( (LA(1)==NAME_PER_PER) ) {
  141. zzmatch(NAME_PER_PER); zzCONSUME;
  142. do_conversion();
  143. zzLOOP(zztasp3);
  144. }
  145. zzEXIT(zztasp3);
  146. }
  147. }
  148. }
  149. else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
  150. }
  151. zzEXIT(zztasp2);
  152. }
  153. }
  154. zzmatch(PER_PER); zzCONSUME;
  155. zzEXIT(zztasp1);
  156. return;
  157. fail:
  158. zzEXIT(zztasp1);
  159. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  160. zzresynch(setwd1, 0x4);
  161. }
  162. }
  163. void
  164. #ifdef __USE_PROTOS
  165. do_conversion(void)
  166. #else
  167. do_conversion()
  168. #endif
  169. {
  170. zzRULE;
  171. zzBLOCK(zztasp1);
  172. zzMake0;
  173. {
  174. new_automaton_mode(); func_action = TRUE;
  175. rule_list();
  176. dfa_class_nop[mode_counter] =
  177. relabel(zzaArg(zztasp1,1 ).l,comp_level);
  178. if (comp_level)
  179. p_shift_table(mode_counter);
  180. dfa_basep[mode_counter] = dfa_allocated+1;
  181. make_dfa_model_node(dfa_class_nop[mode_counter]);
  182. nfa_to_dfa(zzaArg(zztasp1,1 ).l);
  183. ++mode_counter;
  184. func_action = FALSE;
  185. #ifdef HASH_STAT
  186. fprint_hash_stats(stderr);
  187. #endif
  188. zzEXIT(zztasp1);
  189. return;
  190. fail:
  191. zzEXIT(zztasp1);
  192. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  193. zzresynch(setwd1, 0x8);
  194. }
  195. }
  196. void
  197. #ifdef __USE_PROTOS
  198. rule_list(void)
  199. #else
  200. rule_list()
  201. #endif
  202. {
  203. zzRULE;
  204. zzBLOCK(zztasp1);
  205. zzMake0;
  206. {
  207. if ( (setwd1[LA(1)]&0x10) ) {
  208. rule();
  209. zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;
  210. {
  211. zzBLOCK(zztasp2);
  212. zzMake0;
  213. {
  214. while ( (setwd1[LA(1)]&0x20) ) {
  215. rule();
  216. {nfa_node *t1;
  217. t1 = new_nfa_node();
  218. (t1)->trans[0]=zzaRet.l;
  219. (t1)->trans[1]=zzaArg(zztasp2,1 ).l;
  220. /* all accept nodes "dead ends" */
  221. zzaRet.l=t1; zzaRet.r=NULL;
  222. }
  223. zzLOOP(zztasp2);
  224. }
  225. zzEXIT(zztasp2);
  226. }
  227. }
  228. }
  229. else {
  230. if ( (setwd1[LA(1)]&0x40) ) {
  231. zzaRet.l = new_nfa_node(); zzaRet.r = NULL;
  232. warning("no regular expressions", zzline);
  233. }
  234. else {zzFAIL(1,zzerr2,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
  235. }
  236. zzEXIT(zztasp1);
  237. return;
  238. fail:
  239. zzEXIT(zztasp1);
  240. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  241. zzresynch(setwd1, 0x80);
  242. }
  243. }
  244. void
  245. #ifdef __USE_PROTOS
  246. rule(void)
  247. #else
  248. rule()
  249. #endif
  250. {
  251. zzRULE;
  252. zzBLOCK(zztasp1);
  253. zzMake0;
  254. {
  255. if ( (setwd2[LA(1)]&0x1) ) {
  256. reg_expr();
  257. zzmatch(ACTION);
  258. zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r; (zzaArg(zztasp1,1 ).r)->accept=action_no;
  259.  zzCONSUME;
  260. }
  261. else {
  262. if ( (LA(1)==ACTION) ) {
  263. zzmatch(ACTION);
  264. zzaRet.l = NULL; zzaRet.r = NULL;
  265. error("no expression for action  ", zzline);
  266.  zzCONSUME;
  267. }
  268. else {zzFAIL(1,zzerr3,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
  269. }
  270. zzEXIT(zztasp1);
  271. return;
  272. fail:
  273. zzEXIT(zztasp1);
  274. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  275. zzresynch(setwd2, 0x2);
  276. }
  277. }
  278. void
  279. #ifdef __USE_PROTOS
  280. reg_expr(void)
  281. #else
  282. reg_expr()
  283. #endif
  284. {
  285. zzRULE;
  286. zzBLOCK(zztasp1);
  287. zzMake0;
  288. {
  289. and_expr();
  290. zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;
  291. {
  292. zzBLOCK(zztasp2);
  293. zzMake0;
  294. {
  295. while ( (LA(1)==OR) ) {
  296. zzmatch(OR); zzCONSUME;
  297. and_expr();
  298. {nfa_node *t1, *t2;
  299. t1 = new_nfa_node(); t2 = new_nfa_node();
  300. (t1)->trans[0]=zzaRet.l;
  301. (t1)->trans[1]=zzaArg(zztasp2,2 ).l;
  302. (zzaRet.r)->trans[1]=t2;
  303. (zzaArg(zztasp2,2 ).r)->trans[1]=t2;
  304. zzaRet.l=t1; zzaRet.r=t2;
  305. }
  306. zzLOOP(zztasp2);
  307. }
  308. zzEXIT(zztasp2);
  309. }
  310. }
  311. zzEXIT(zztasp1);
  312. return;
  313. fail:
  314. zzEXIT(zztasp1);
  315. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  316. zzresynch(setwd2, 0x4);
  317. }
  318. }
  319. void
  320. #ifdef __USE_PROTOS
  321. and_expr(void)
  322. #else
  323. and_expr()
  324. #endif
  325. {
  326. zzRULE;
  327. zzBLOCK(zztasp1);
  328. zzMake0;
  329. {
  330. repeat_expr();
  331. zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;
  332. {
  333. zzBLOCK(zztasp2);
  334. zzMake0;
  335. {
  336. while ( (setwd2[LA(1)]&0x8) ) {
  337. repeat_expr();
  338. (zzaRet.r)->trans[1]=zzaArg(zztasp2,1 ).l; zzaRet.r=zzaArg(zztasp2,1 ).r;
  339. zzLOOP(zztasp2);
  340. }
  341. zzEXIT(zztasp2);
  342. }
  343. }
  344. zzEXIT(zztasp1);
  345. return;
  346. fail:
  347. zzEXIT(zztasp1);
  348. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  349. zzresynch(setwd2, 0x10);
  350. }
  351. }
  352. void
  353. #ifdef __USE_PROTOS
  354. repeat_expr(void)
  355. #else
  356. repeat_expr()
  357. #endif
  358. {
  359. zzRULE;
  360. zzBLOCK(zztasp1);
  361. zzMake0;
  362. {
  363. if ( (setwd2[LA(1)]&0x20) ) {
  364. expr();
  365. zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;
  366. {
  367. zzBLOCK(zztasp2);
  368. zzMake0;
  369. {
  370. if ( (LA(1)==ZERO_MORE) ) {
  371. zzmatch(ZERO_MORE);
  372. { nfa_node *t1,*t2;
  373. (zzaRet.r)->trans[0] = zzaRet.l;
  374. t1 = new_nfa_node(); t2 = new_nfa_node();
  375. t1->trans[0]=zzaRet.l;
  376. t1->trans[1]=t2;
  377. (zzaRet.r)->trans[1]=t2;
  378. zzaRet.l=t1;zzaRet.r=t2;
  379. }
  380.  zzCONSUME;
  381. }
  382. else {
  383. if ( (LA(1)==ONE_MORE) ) {
  384. zzmatch(ONE_MORE);
  385. (zzaRet.r)->trans[0] = zzaRet.l;
  386.  zzCONSUME;
  387. }
  388. }
  389. zzEXIT(zztasp2);
  390. }
  391. }
  392. }
  393. else {
  394. if ( (LA(1)==ZERO_MORE) ) {
  395. zzmatch(ZERO_MORE);
  396. error("no expression for *", zzline);
  397.  zzCONSUME;
  398. }
  399. else {
  400. if ( (LA(1)==ONE_MORE) ) {
  401. zzmatch(ONE_MORE);
  402. error("no expression for +", zzline);
  403.  zzCONSUME;
  404. }
  405. else {zzFAIL(1,zzerr4,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
  406. }
  407. }
  408. zzEXIT(zztasp1);
  409. return;
  410. fail:
  411. zzEXIT(zztasp1);
  412. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  413. zzresynch(setwd2, 0x40);
  414. }
  415. }
  416. void
  417. #ifdef __USE_PROTOS
  418. expr(void)
  419. #else
  420. expr()
  421. #endif
  422. {
  423. zzRULE;
  424. zzBLOCK(zztasp1);
  425. zzMake0;
  426. {
  427. zzaRet.l = new_nfa_node(); zzaRet.r = new_nfa_node();
  428. if ( (LA(1)==L_BRACK) ) {
  429. zzmatch(L_BRACK); zzCONSUME;
  430. atom_list();
  431. zzmatch(R_BRACK);
  432. (zzaRet.l)->trans[0] = zzaRet.r;
  433. (zzaRet.l)->label = set_dup(zzaArg(zztasp1,2 ).label);
  434. set_orin(&used_chars,(zzaRet.l)->label);
  435.  zzCONSUME;
  436. }
  437. else {
  438. if ( (LA(1)==NOT) ) {
  439. zzmatch(NOT); zzCONSUME;
  440. zzmatch(L_BRACK); zzCONSUME;
  441. atom_list();
  442. zzmatch(R_BRACK);
  443. (zzaRet.l)->trans[0] = zzaRet.r;
  444. (zzaRet.l)->label = set_dif(normal_chars,zzaArg(zztasp1,3 ).label);
  445. set_orin(&used_chars,(zzaRet.l)->label);
  446.  zzCONSUME;
  447. }
  448. else {
  449. if ( (LA(1)==L_PAR) ) {
  450. zzmatch(L_PAR); zzCONSUME;
  451. reg_expr();
  452. zzmatch(R_PAR);
  453. (zzaRet.l)->trans[0] = zzaArg(zztasp1,2 ).l;
  454. (zzaArg(zztasp1,2 ).r)->trans[1] = zzaRet.r;
  455.  zzCONSUME;
  456. }
  457. else {
  458. if ( (LA(1)==L_BRACE) ) {
  459. zzmatch(L_BRACE); zzCONSUME;
  460. reg_expr();
  461. zzmatch(R_BRACE);
  462. (zzaRet.l)->trans[0] = zzaArg(zztasp1,2 ).l;
  463. (zzaRet.l)->trans[1] = zzaRet.r;
  464. (zzaArg(zztasp1,2 ).r)->trans[1] = zzaRet.r;
  465.  zzCONSUME;
  466. }
  467. else {
  468. if ( (setwd2[LA(1)]&0x80) ) {
  469. atom();
  470. (zzaRet.l)->trans[0] = zzaRet.r;
  471. (zzaRet.l)->label = set_dup(zzaArg(zztasp1,1 ).label);
  472. set_orin(&used_chars,(zzaRet.l)->label);
  473. }
  474. else {zzFAIL(1,zzerr5,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
  475. }
  476. }
  477. }
  478. }
  479. zzEXIT(zztasp1);
  480. return;
  481. fail:
  482. zzEXIT(zztasp1);
  483. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  484. zzresynch(setwd3, 0x1);
  485. }
  486. }
  487. void
  488. #ifdef __USE_PROTOS
  489. atom_list(void)
  490. #else
  491. atom_list()
  492. #endif
  493. {
  494. zzRULE;
  495. zzBLOCK(zztasp1);
  496. zzMake0;
  497. {
  498. set_free(zzaRet.label);
  499. {
  500. zzBLOCK(zztasp2);
  501. zzMake0;
  502. {
  503. while ( (setwd3[LA(1)]&0x2) ) {
  504. near_atom();
  505. set_orin(&(zzaRet.label),zzaArg(zztasp2,1 ).label);
  506. zzLOOP(zztasp2);
  507. }
  508. zzEXIT(zztasp2);
  509. }
  510. }
  511. zzEXIT(zztasp1);
  512. return;
  513. fail:
  514. zzEXIT(zztasp1);
  515. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  516. zzresynch(setwd3, 0x4);
  517. }
  518. }
  519. void
  520. #ifdef __USE_PROTOS
  521. near_atom(void)
  522. #else
  523. near_atom()
  524. #endif
  525. {
  526. zzRULE;
  527. zzBLOCK(zztasp1);
  528. zzMake0;
  529. {
  530. register int i;
  531. register int i_prime;
  532. anychar();
  533. zzaRet.letter=zzaArg(zztasp1,1 ).letter; zzaRet.label=set_of(zzaArg(zztasp1,1 ).letter);
  534. i_prime = zzaArg(zztasp1,1 ).letter + MIN_CHAR;
  535. if (case_insensitive && islower(i_prime))
  536. set_orel(toupper(i_prime)-MIN_CHAR,
  537. &(zzaRet.label));
  538. if (case_insensitive && isupper(i_prime))
  539. set_orel(tolower(i_prime)-MIN_CHAR,
  540. &(zzaRet.label));
  541. {
  542. zzBLOCK(zztasp2);
  543. zzMake0;
  544. {
  545. if ( (LA(1)==RANGE) ) {
  546. zzmatch(RANGE); zzCONSUME;
  547. anychar();
  548. if (case_insensitive){
  549. i_prime = zzaRet.letter+MIN_CHAR;
  550. zzaRet.letter = (islower(i_prime) ?
  551. toupper(i_prime) : i_prime)-MIN_CHAR;
  552. i_prime = zzaArg(zztasp2,2 ).letter+MIN_CHAR;
  553. zzaArg(zztasp2,2 ).letter = (islower(i_prime) ?
  554. toupper(i_prime) : i_prime)-MIN_CHAR;
  555. }
  556. /* check to see if range okay */
  557. if (zzaRet.letter > zzaArg(zztasp2,2 ).letter){
  558. error("invalid range  ", zzline);
  559. }
  560. for (i=zzaRet.letter; i<= (int)zzaArg(zztasp2,2 ).letter; ++i){
  561. set_orel(i,&(zzaRet.label));
  562. i_prime = i+MIN_CHAR;
  563. if (case_insensitive && islower(i_prime))
  564. set_orel(toupper(i_prime)-MIN_CHAR,
  565. &(zzaRet.label));
  566. if (case_insensitive && isupper(i_prime))
  567. set_orel(tolower(i_prime)-MIN_CHAR,
  568. &(zzaRet.label));
  569. }
  570. }
  571. zzEXIT(zztasp2);
  572. }
  573. }
  574. zzEXIT(zztasp1);
  575. return;
  576. fail:
  577. zzEXIT(zztasp1);
  578. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  579. zzresynch(setwd3, 0x8);
  580. }
  581. }
  582. void
  583. #ifdef __USE_PROTOS
  584. atom(void)
  585. #else
  586. atom()
  587. #endif
  588. {
  589. zzRULE;
  590. zzBLOCK(zztasp1);
  591. zzMake0;
  592. {
  593. register int i_prime;
  594. anychar();
  595. zzaRet.label = set_of(zzaArg(zztasp1,1 ).letter);
  596. i_prime = zzaArg(zztasp1,1 ).letter + MIN_CHAR;
  597. if (case_insensitive && islower(i_prime))
  598. set_orel(toupper(i_prime)-MIN_CHAR,
  599. &(zzaRet.label));
  600. if (case_insensitive && isupper(i_prime))
  601. set_orel(tolower(i_prime)-MIN_CHAR,
  602. &(zzaRet.label));
  603. zzEXIT(zztasp1);
  604. return;
  605. fail:
  606. zzEXIT(zztasp1);
  607. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  608. zzresynch(setwd3, 0x10);
  609. }
  610. }
  611. void
  612. #ifdef __USE_PROTOS
  613. anychar(void)
  614. #else
  615. anychar()
  616. #endif
  617. {
  618. zzRULE;
  619. zzBLOCK(zztasp1);
  620. zzMake0;
  621. {
  622. if ( (LA(1)==REGCHAR) ) {
  623. zzmatch(REGCHAR);
  624. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  625.  zzCONSUME;
  626. }
  627. else {
  628. if ( (LA(1)==OCTAL_VALUE) ) {
  629. zzmatch(OCTAL_VALUE);
  630. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  631.  zzCONSUME;
  632. }
  633. else {
  634. if ( (LA(1)==HEX_VALUE) ) {
  635. zzmatch(HEX_VALUE);
  636. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  637.  zzCONSUME;
  638. }
  639. else {
  640. if ( (LA(1)==DEC_VALUE) ) {
  641. zzmatch(DEC_VALUE);
  642. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  643.  zzCONSUME;
  644. }
  645. else {
  646. if ( (LA(1)==TAB) ) {
  647. zzmatch(TAB);
  648. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  649.  zzCONSUME;
  650. }
  651. else {
  652. if ( (LA(1)==NL) ) {
  653. zzmatch(NL);
  654. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  655.  zzCONSUME;
  656. }
  657. else {
  658. if ( (LA(1)==CR) ) {
  659. zzmatch(CR);
  660. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  661.  zzCONSUME;
  662. }
  663. else {
  664. if ( (LA(1)==BS) ) {
  665. zzmatch(BS);
  666. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  667.  zzCONSUME;
  668. }
  669. else {
  670. if ( (LA(1)==LIT) ) {
  671. zzmatch(LIT);
  672. zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;
  673.  zzCONSUME;
  674. }
  675. else {
  676. if ( (LA(1)==L_EOF) ) {
  677. zzmatch(L_EOF);
  678. zzaRet.letter = 0;
  679.  zzCONSUME;
  680. }
  681. else {zzFAIL(1,zzerr6,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
  682. }
  683. }
  684. }
  685. }
  686. }
  687. }
  688. }
  689. }
  690. }
  691. zzEXIT(zztasp1);
  692. return;
  693. fail:
  694. zzEXIT(zztasp1);
  695. /* empty action */
  696. zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  697. zzresynch(setwd3, 0x20);
  698. }
  699. }
  700. /* adds a new nfa to the binary tree and returns a pointer to it */
  701. nfa_node *new_nfa_node()
  702. {
  703. register nfa_node *t;
  704. static int nfa_size=0; /* elements nfa_array[] can hold */
  705. ++nfa_allocated;
  706. if (nfa_size<=nfa_allocated){
  707. /* need to redo array */
  708. if (!nfa_array){
  709. /* need some to do inital allocation */
  710. nfa_size=nfa_allocated+NFA_MIN;
  711. nfa_array=(nfa_node **) malloc(sizeof(nfa_node*)*
  712. nfa_size);
  713. }else{
  714. /* need more space */
  715. nfa_size=2*(nfa_allocated+1);
  716. nfa_array=(nfa_node **) realloc(nfa_array,
  717. sizeof(nfa_node*)*nfa_size);
  718. }
  719. }
  720. /* fill out entry in array */
  721. t = (nfa_node*) malloc(sizeof(nfa_node));
  722. nfa_array[nfa_allocated] = t;
  723. *t = nfa_model_node;
  724. t->node_no = nfa_allocated;
  725. return t;
  726. }
  727. /* initialize the model node used to fill in newly made nfa_nodes */
  728. void
  729. make_nfa_model_node()
  730. {
  731. nfa_model_node.node_no = -1; /* impossible value for real nfa node */
  732. nfa_model_node.nfa_set = 0;
  733. nfa_model_node.accept = 0;   /* error state default*/
  734. nfa_model_node.trans[0] = NULL;
  735. nfa_model_node.trans[1] = NULL;
  736. nfa_model_node.label = empty;
  737. }
  738. #ifdef DEBUG
  739. /* print out the pointer value and the node_number */
  740. fprint_dfa_pair(f, p)
  741. FILE *f;
  742. nfa_node *p;
  743. {
  744. if (p){
  745. fprintf(f, "%x (%d)", p, p->node_no);
  746. }else{
  747. fprintf(f, "(nil)");
  748. }
  749. }
  750. /* print out interest information on a set */
  751. fprint_set(f,s)
  752. FILE *f;
  753. set s;
  754. {
  755. unsigned int *x;
  756. fprintf(f, "n = %d,", s.n);
  757. if (s.setword){
  758. fprintf(f, "setword = %x,   ", s.setword);
  759. /* print out all the elements in the set */
  760. x = set_pdq(s);
  761. while (*x!=nil){
  762. fprintf(f, "%d ", *x);
  763. ++x;
  764. }
  765. }else{
  766. fprintf(f, "setword = (nil)");
  767. }
  768. }
  769. /* code to be able to dump out the nfas
  770. return 0 if okay dump
  771. return 1 if screwed up
  772. */
  773. int dump_nfas(first_node, last_node)
  774. int first_node;
  775. int last_node;
  776. {
  777. register int i;
  778. nfa_node *t;
  779. for (i=first_node; i<=last_node; ++i){
  780. t = NFA(i);
  781. if (!t) break;
  782. fprintf(stderr, "nfa_node %d {n", t->node_no);
  783. fprintf(stderr, "ntnfa_set = %dn", t->nfa_set);
  784. fprintf(stderr, "tacceptt=t%dn", t->accept);
  785. fprintf(stderr, "ttranst=t(");
  786. fprint_dfa_pair(stderr, t->trans[0]);
  787. fprintf(stderr, ",");
  788. fprint_dfa_pair(stderr, t->trans[1]);
  789. fprintf(stderr, ")n");
  790. fprintf(stderr, "tlabelt=t{ ");
  791. fprint_set(stderr, t->label);
  792. fprintf(stderr, "t}n");
  793. fprintf(stderr, "}nn");
  794. }
  795. return 0;
  796. }
  797. #endif
  798. /* DLG-specific syntax error message generator
  799. * (define USER_ZZSYN when compiling so don't get 2 definitions)
  800. */
  801. void
  802. #ifdef __USE_PROTOS
  803. zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text)
  804. #else
  805. zzsyn(text, tok, egroup, eset, etok, k, bad_text)
  806. char *text, *egroup, *bad_text;
  807. int tok;
  808. int etok;
  809. int k;
  810. SetWordType *eset;
  811. #endif
  812. {
  813. fprintf(stderr, ErrHdr, file_str[0]!=NULL?file_str[0]:"stdin", zzline);
  814. fprintf(stderr, " syntax error at "%s"", (tok==zzEOF_TOKEN)?"EOF":text);
  815. if ( !etok && !eset ) {fprintf(stderr, "n"); return;}
  816. if ( k==1 ) fprintf(stderr, " missing");
  817. else
  818. {
  819. fprintf(stderr, "; "%s" not", bad_text);
  820. if ( zzset_deg(eset)>1 ) fprintf(stderr, " in");
  821. }
  822. if ( zzset_deg(eset)>0 ) zzedecode(eset);
  823. else fprintf(stderr, " %s", zztokens[etok]);
  824. if ( strlen(egroup) > (size_t)0 ) fprintf(stderr, " in %s", egroup);
  825. fprintf(stderr, "n");
  826. }