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

编译器/解释器

开发平台:

Others

  1. <<
  2. /* parser.dlg -- DLG Description of scanner
  3.  *
  4.  * Generated from: antlr.g
  5.  *
  6.  * Terence Parr, Will Cohen, and Hank Dietz: 1989-1998
  7.  * Purdue University Electrical Engineering
  8.  * With AHPCRC, University of Minnesota
  9.  * ANTLR Version 1.33MR14
  10.  */
  11. #define ANTLR_VERSION 13314
  12. #include "pcctscfg.h"
  13. #include PCCTS_STDIO_H
  14. #include "set.h"
  15. #include <ctype.h>
  16. #include "syn.h"
  17. #include "hash.h"
  18. #include "generic.h"
  19. #define zzcr_attr(attr,tok,t)
  20. #include "antlr.h"
  21. #include "tokens.h"
  22. #include "dlgdef.h"
  23. LOOKAHEAD
  24. void zzerraction()
  25. {
  26. (*zzerr)("invalid token");
  27. zzadvance();
  28. zzskip();
  29. }
  30. >>
  31. <<%%lexaction
  32. /* maintained, but not used for now */
  33. set AST_nodes_refd_in_actions = set_init;
  34. int inAlt = 0;
  35. set attribsRefdFromAction;
  36. int UsedOldStyleAttrib = 0;
  37. int UsedNewStyleLabel = 0;
  38. #ifdef __USE_PROTOS
  39. char *inline_set(char *);
  40. #else
  41. char *inline_set();
  42. #endif
  43. /* MR1 10-Apr-97  MR1  Previously unable to put right shift operator     */
  44. /* MR1 in DLG action                     */
  45. int tokenActionActive=0;                                            /* MR1 */
  46.   
  47. >>
  48. <<%%lexaction
  49. static char *
  50. #ifdef __USE_PROTOS
  51. getFileNameFromTheLineInfo(char *toStr, char *fromStr)
  52. #else
  53. getFileNameFromTheLineInfo(toStr, fromStr)
  54. char *toStr, *fromStr;
  55. #endif
  56. {
  57. int i, j, k;
  58.   if (!fromStr || !toStr) return toStr;
  59.   /* find the first " */
  60.   for (i=0;
  61. (i<MaxFileName) &&
  62. (fromStr[i] != 'n') &&
  63. (fromStr[i] != 'r') &&
  64. (fromStr[i] != '"');
  65. i++) /* nothing */ ;
  66.   if ( (i == MaxFileName) ||
  67. (fromStr[i] == 'n') ||
  68. (fromStr[i] == 'r') ) {
  69. return toStr;
  70. }
  71.   /* find the second " */
  72.   for (j=i+1;
  73. (j<MaxFileName) &&
  74. (fromStr[j] != 'n') &&
  75. (fromStr[j] != 'r') &&
  76. (fromStr[j] != '"');
  77. j++) /* nothing */ ;
  78.   if ((j == MaxFileName) ||
  79. (fromStr[j] == 'n') ||
  80. (fromStr[j] == 'r') ) {
  81. return toStr;
  82. }
  83.   /* go back until the last / or  */
  84.   for (k=j-1;
  85. (fromStr[k] != '"') &&
  86. (fromStr[k] != '/') &&
  87. (fromStr[k] != '\');
  88. k--) /* nothing */ ;
  89.   /* copy the string after " / or  into toStr */
  90.   for (i=k+1; fromStr[i] != '"'; i++) {
  91. toStr[i-k-1] = fromStr[i];
  92. }
  93.   toStr[i-k-1] = '';
  94.   return toStr;
  95. }
  96. /* MR14 end of a block to support #line in antlr source code */
  97.   
  98. >>
  99. <<%%lexaction
  100. #ifdef __USE_PROTOS
  101. void mark_label_used_in_sem_pred(LabelEntry *le)              /* MR10 */
  102. #else
  103. void mark_label_used_in_sem_pred(le)                          /* MR10 */
  104. LabelEntry    *le;
  105. #endif
  106. {
  107. TokNode   *tn;
  108. require (le->elem->ntype == nToken,"mark_label_used... ntype != nToken");
  109. tn=(TokNode *)le->elem;
  110. require (tn->label != 0,"mark_label_used... TokNode has no label");
  111. tn->label_used_in_semantic_pred=1;
  112. }
  113. >>
  114. %%START
  115. @
  116. <<
  117. NLA = Eof;
  118. /* L o o k  F o r  A n o t h e r  F i l e */
  119. {
  120. FILE *new_input;
  121. new_input = NextFile();
  122. if ( new_input == NULL ) { NLA=Eof; return; }
  123. fclose( input );
  124. input = new_input;
  125. zzrdstream( input );
  126. zzskip(); /* Skip the Eof (@) char i.e continue */
  127. }
  128. >>
  129. [t ]+
  130. <<
  131. NLA = 76;
  132. zzskip();   
  133. >>
  134. n|r|rn
  135. <<
  136. NLA = 77;
  137. zzline++; zzskip();   
  138. >>
  139. [
  140. <<
  141. NLA = 78;
  142. zzmode(ACTIONS); zzmore();
  143. istackreset();
  144. pushint(']');   
  145. >>
  146. <<
  147. <<
  148. NLA = 79;
  149. action_file=CurFile; action_line=zzline;
  150. zzmode(ACTIONS); zzmore();
  151. list_free(&CurActionLabels,0);       /* MR10 */
  152. numericActionLabel=0;                /* MR10 */
  153. istackreset();
  154. pushint('>');   
  155. >>
  156. "
  157. <<
  158. NLA = 80;
  159. zzmode(STRINGS); zzmore();   
  160. >>
  161. /*
  162. <<
  163. NLA = 81;
  164. zzmode(COMMENTS); zzskip();   
  165. >>
  166. */
  167. <<
  168. NLA = 82;
  169. warn("Missing /*; found dangling */"); zzskip();   
  170. >>
  171. //
  172. <<
  173. NLA = 83;
  174. zzmode(CPP_COMMENTS); zzskip();   
  175. >>
  176. #line[ t]* [0-9]+ {[ t]* "~["]+" ([ t]* [0-9]*)* } (n|r|rn)
  177. <<
  178. NLA = 84;
  179. zzline = atoi(zzbegexpr+5) - 1; zzline++; zzmore();
  180. getFileNameFromTheLineInfo(FileStr[CurFile], zzbegexpr);
  181. >>
  182. #line ~[nr]* (n|r|rn)
  183. <<
  184. NLA = 85;
  185. zzline++; zzmore();
  186. >>
  187. >>
  188. <<
  189. NLA = 86;
  190. warn("Missing <<; found dangling >>"); zzskip();   
  191. >>
  192. .
  193. <<
  194. NLA = WildCard;
  195. >>
  196. @
  197. <<
  198. NLA = 88;
  199. FoundException = 1; /* MR6 */
  200. FoundAtOperator = 1;  
  201. >>
  202. {\}#header
  203. <<
  204. NLA = 92;
  205. >>
  206. {\}#first
  207. <<
  208. NLA = 93;
  209. >>
  210. {\}#parser
  211. <<
  212. NLA = 94;
  213. >>
  214. {\}#tokdefs
  215. <<
  216. NLA = 95;
  217. >>
  218. }
  219. <<
  220. NLA = 96;
  221. >>
  222. class
  223. <<
  224. NLA = 97;
  225. >>
  226. {
  227. <<
  228. NLA = 100;
  229. >>
  230. !
  231. <<
  232. NLA = 101;
  233. >>
  234. <
  235. <<
  236. NLA = 102;
  237. >>
  238. >
  239. <<
  240. NLA = 103;
  241. >>
  242. :
  243. <<
  244. NLA = 104;
  245. >>
  246. ;
  247. <<
  248. NLA = 105;
  249. >>
  250. {\}#lexaction
  251. <<
  252. NLA = 106;
  253. >>
  254. {\}#lexmember
  255. <<
  256. NLA = 107;
  257. >>
  258. {\}#lexprefix
  259. <<
  260. NLA = 108;
  261. >>
  262. {\}#pred
  263. <<
  264. NLA = 109;
  265. >>
  266. ||
  267. <<
  268. NLA = 110;
  269. >>
  270. &&
  271. <<
  272. NLA = 111;
  273. >>
  274. (
  275. <<
  276. NLA = 112;
  277. >>
  278. )
  279. <<
  280. NLA = 113;
  281. >>
  282. {\}#lexclass
  283. <<
  284. NLA = 114;
  285. >>
  286. {\}#errclass
  287. <<
  288. NLA = 115;
  289. >>
  290. {\}#tokclass
  291. <<
  292. NLA = 116;
  293. >>
  294. ..
  295. <<
  296. NLA = 117;
  297. >>
  298. {\}#token
  299. <<
  300. NLA = 118;
  301. >>
  302. =
  303. <<
  304. NLA = 119;
  305. >>
  306. [0-9]+
  307. <<
  308. NLA = 120;
  309. >>
  310. |
  311. <<
  312. NLA = 121;
  313. >>
  314. ~
  315. <<
  316. NLA = 122;
  317. >>
  318. ^
  319. <<
  320. NLA = 123;
  321. >>
  322. {\}#pragma
  323. <<
  324. NLA = 124;
  325. >>
  326. approx
  327. <<
  328. NLA = 125;
  329. >>
  330. LL(1)
  331. <<
  332. NLA = 126;
  333. >>
  334. LL(2)
  335. <<
  336. NLA = 127;
  337. >>
  338. *
  339. <<
  340. NLA = 128;
  341. >>
  342. +
  343. <<
  344. NLA = 129;
  345. >>
  346. ?
  347. <<
  348. NLA = 130;
  349. >>
  350. =>
  351. <<
  352. NLA = 131;
  353. >>
  354. exception
  355. <<
  356. NLA = 132;
  357. >>
  358. default
  359. <<
  360. NLA = 133;
  361. >>
  362. catch
  363. <<
  364. NLA = 134;
  365. >>
  366. [a-z] [A-Za-z0-9_]*
  367. <<
  368. NLA = NonTerminal;
  369. while ( zzchar==' ' || zzchar=='t' ) {
  370. zzadvance();
  371. }
  372. if ( zzchar == ':' && inAlt ) NLA = LABEL;
  373. >>
  374. [A-Z] [A-Za-z0-9_]*
  375. <<
  376. NLA = TokenTerm;
  377. while ( zzchar==' ' || zzchar=='t' ) {
  378. zzadvance();
  379. }
  380. if ( zzchar == ':' && inAlt ) NLA = LABEL;
  381. >>
  382. {\}#[A-Za-z0-9_]*
  383. <<
  384. NLA = 135;
  385. warn(eMsg1("unknown meta-op: %s",LATEXT(1))); zzskip();   
  386. >>
  387. %%STRINGS
  388. @
  389. <<
  390. NLA = Eof;
  391. >>
  392. "
  393. <<
  394. NLA = QuotedTerm;
  395. zzmode(START);   
  396. >>
  397. n|r|rn
  398. <<
  399. NLA = 3;
  400. zzline++;
  401. warn("eoln found in string");
  402. zzskip();
  403. >>
  404. \(n|r|rn)
  405. <<
  406. NLA = 4;
  407. zzline++; zzmore();   
  408. >>
  409. \~[]
  410. <<
  411. NLA = 5;
  412. zzmore();   
  413. >>
  414. ~[nr"\]+
  415. <<
  416. NLA = 6;
  417. zzmore();   
  418. >>
  419. %%ACTION_STRINGS
  420. @
  421. <<
  422. NLA = Eof;
  423. >>
  424. "
  425. <<
  426. NLA = 7;
  427. zzmode(ACTIONS); zzmore();   
  428. >>
  429. n|r|rn
  430. <<
  431. NLA = 8;
  432. zzline++;
  433. warn("eoln found in string (in user action)");
  434. zzskip();
  435. >>
  436. \(n|r|rn)
  437. <<
  438. NLA = 9;
  439. zzline++; zzmore();   
  440. >>
  441. \~[]
  442. <<
  443. NLA = 10;
  444. zzmore();   
  445. >>
  446. ~[nr"\]+
  447. <<
  448. NLA = 11;
  449. zzmore();   
  450. >>
  451. %%ACTION_CHARS
  452. @
  453. <<
  454. NLA = Eof;
  455. >>
  456. '
  457. <<
  458. NLA = 12;
  459. zzmode(ACTIONS); zzmore();   
  460. >>
  461. n|r|rn
  462. <<
  463. NLA = 13;
  464. zzline++;
  465. warn("eoln found in char literal (in user action)");
  466. zzskip();
  467. >>
  468. \~[]
  469. <<
  470. NLA = 14;
  471. zzmore();   
  472. >>
  473. ~[nr'\]+
  474. <<
  475. NLA = 15;
  476. zzmore();   
  477. >>
  478. %%ACTION_COMMENTS
  479. @
  480. <<
  481. NLA = Eof;
  482. >>
  483. */
  484. <<
  485. NLA = 16;
  486. zzmode(ACTIONS); zzmore();   
  487. >>
  488. *
  489. <<
  490. NLA = 17;
  491. zzmore();   
  492. >>
  493. n|r|rn
  494. <<
  495. NLA = 18;
  496. zzline++; zzmore(); DAWDLE;   
  497. >>
  498. ~[nr*]+
  499. <<
  500. NLA = 19;
  501. zzmore();   
  502. >>
  503. %%TOK_DEF_COMMENTS
  504. @
  505. <<
  506. NLA = Eof;
  507. >>
  508. */
  509. <<
  510. NLA = 20;
  511. zzmode(PARSE_ENUM_FILE);
  512. zzmore();   
  513. >>
  514. *
  515. <<
  516. NLA = 21;
  517. zzmore();   
  518. >>
  519. n|r|rn
  520. <<
  521. NLA = 22;
  522. zzline++; zzmore(); DAWDLE;   
  523. >>
  524. ~[nr*]+
  525. <<
  526. NLA = 23;
  527. zzmore();   
  528. >>
  529. %%TOK_DEF_CPP_COMMENTS
  530. @
  531. <<
  532. NLA = Eof;
  533. >>
  534. n|r|rn
  535. <<
  536. NLA = 24;
  537. zzline++; zzmode(PARSE_ENUM_FILE); zzskip(); DAWDLE;   
  538. >>
  539. ~[nr]+
  540. <<
  541. NLA = 25;
  542. zzskip();   
  543. >>
  544. %%ACTION_CPP_COMMENTS
  545. @
  546. <<
  547. NLA = Eof;
  548. >>
  549. n|r|rn
  550. <<
  551. NLA = 26;
  552. zzline++; zzmode(ACTIONS); zzmore(); DAWDLE;   
  553. >>
  554. ~[nr]+
  555. <<
  556. NLA = 27;
  557. zzmore();   
  558. >>
  559. %%CPP_COMMENTS
  560. @
  561. <<
  562. NLA = Eof;
  563. >>
  564. n|r|rn
  565. <<
  566. NLA = 28;
  567. zzline++; zzmode(START); zzskip(); DAWDLE;   
  568. >>
  569. ~[nr]+
  570. <<
  571. NLA = 29;
  572. zzskip();   
  573. >>
  574. %%COMMENTS
  575. @
  576. <<
  577. NLA = Eof;
  578. >>
  579. */
  580. <<
  581. NLA = 30;
  582. zzmode(START); zzskip();   
  583. >>
  584. *
  585. <<
  586. NLA = 31;
  587. zzskip();   
  588. >>
  589. n|r|rn
  590. <<
  591. NLA = 32;
  592. zzline++; zzskip(); DAWDLE;   
  593. >>
  594. ~[nr*]+
  595. <<
  596. NLA = 33;
  597. zzskip();   
  598. >>
  599. %%ACTIONS
  600. @
  601. <<
  602. NLA = Eof;
  603. >>
  604. >>
  605. <<
  606. NLA = Action;
  607. /* these do not nest */
  608. zzmode(START);
  609. NLATEXT[0] = ' ';
  610. NLATEXT[1] = ' ';
  611. zzbegexpr[0] = ' ';
  612. zzbegexpr[1] = ' ';
  613. if ( zzbufovf ) {
  614. err( eMsgd("action buffer overflow; size %d",ZZLEXBUFSIZE));
  615. }
  616. /* MR1 10-Apr-97  MR1  Previously unable to put right shift operator */
  617. /* MR1 in DLG action */
  618. /* MR1 Doesn't matter what kind of action it is - reset*/
  619.       tokenActionActive=0;  /* MR1 */
  620. >>
  621. >>?
  622. <<
  623. NLA = Pred;
  624. /* these do not nest */
  625. zzmode(START);
  626. NLATEXT[0] = ' ';
  627. NLATEXT[1] = ' ';
  628. zzbegexpr[0] = '';
  629. if ( zzbufovf ) {
  630. err( eMsgd("predicate buffer overflow; size %d",ZZLEXBUFSIZE));
  631. };
  632. #ifdef __cplusplus__
  633. /* MR10 */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
  634. #else
  635. #ifdef __STDC__
  636. /* MR10 */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
  637. #else
  638. /* MR10 */                    list_apply(CurActionLabels,mark_label_used_in_sem_pred);
  639. #endif
  640. #endif
  641. >>
  642. ]
  643. <<
  644. NLA = PassAction;
  645. if ( topint() == ']' ) {
  646. popint();
  647. if ( istackempty() ) /* terminate action */
  648. {
  649. zzmode(START);
  650. NLATEXT[0] = ' ';
  651. zzbegexpr[0] = ' ';
  652. if ( zzbufovf ) {
  653. err( eMsgd("parameter buffer overflow; size %d",ZZLEXBUFSIZE));
  654. }
  655. }
  656. else {
  657. /* terminate $[..] and #[..] */
  658. if ( GenCC ) zzreplstr("))");
  659. else zzreplstr(")");
  660. zzmore();
  661. }
  662. }
  663. else if ( topint() == '|' ) { /* end of simple [...] */
  664. popint();
  665. zzmore();
  666. }
  667. else zzmore();
  668. >>
  669. consumeUntil( [ t]* {~[}]+} [ t]* )
  670. <<
  671. NLA = 37;
  672. zzmore();
  673. zzreplstr(inline_set(zzbegexpr+
  674. strlen("consumeUntil(")));
  675. >>
  676. consumeUntil( ~[)]+ )
  677. <<
  678. NLA = 38;
  679. zzmore();   
  680. >>
  681. n|r|rn
  682. <<
  683. NLA = 39;
  684. zzline++; zzmore(); DAWDLE;   
  685. >>
  686. >
  687. <<
  688. NLA = 40;
  689. zzmore();   
  690. >>
  691. $
  692. <<
  693. NLA = 41;
  694. zzmore();   
  695. >>
  696. $$
  697. <<
  698. NLA = 42;
  699. if ( !GenCC ) {zzreplstr("zzaRet"); zzmore();}
  700. else err("$$ use invalid in C++ mode");   
  701. >>
  702. $[]
  703. <<
  704. NLA = 43;
  705. if ( !GenCC ) {zzreplstr("zzempty_attr"); zzmore();}
  706. else err("$[] use invalid in C++ mode");   
  707. >>
  708. $[
  709. <<
  710. NLA = 44;
  711. pushint(']');
  712. if ( !GenCC ) zzreplstr("zzconstr_attr(");
  713. else err("$[..] use invalid in C++ mode");
  714. zzmore();
  715. >>
  716. $[0-9]+
  717. <<
  718. NLA = 45;
  719. {
  720. static char buf[100];
  721. numericActionLabel=1;       /* MR10 */
  722. if ( strlen(zzbegexpr)>(size_t)85 )
  723. fatal("$i attrib ref too big");
  724. set_orel(atoi(zzbegexpr+1), &attribsRefdFromAction);
  725. if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%d,%s)",
  726. BlkLevel-1,zzbegexpr+1);
  727. else sprintf(buf,"_t%d%s",
  728. BlkLevel-1,zzbegexpr+1);
  729. zzreplstr(buf);
  730. zzmore();
  731. UsedOldStyleAttrib = 1;
  732. if ( UsedNewStyleLabel )
  733. err("cannot mix old-style $i with new-style labels");
  734. }
  735. >>
  736. $[0-9]+.
  737. <<
  738. NLA = 46;
  739. {
  740. static char buf[100];
  741. numericActionLabel=1;       /* MR10 */
  742. if ( strlen(zzbegexpr)>(size_t)85 )
  743. fatal("$i.field attrib ref too big");
  744. zzbegexpr[strlen(zzbegexpr)-1] = ' ';
  745. set_orel(atoi(zzbegexpr+1), &attribsRefdFromAction);
  746. if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%d,%s).",
  747. BlkLevel-1,zzbegexpr+1);
  748. else sprintf(buf,"_t%d%s.",
  749. BlkLevel-1,zzbegexpr+1);
  750. zzreplstr(buf);
  751. zzmore();
  752. UsedOldStyleAttrib = 1;
  753. if ( UsedNewStyleLabel )
  754. err("cannot mix old-style $i with new-style labels");
  755. }
  756. >>
  757. $[0-9]+.[0-9]+
  758. <<
  759. NLA = 47;
  760. {
  761. static char buf[100];
  762. static char i[20], j[20];
  763. char *p,*q;
  764. numericActionLabel=1;       /* MR10 */
  765. if (strlen(zzbegexpr)>(size_t)85) fatal("$i.j attrib ref too big");
  766. for (p=zzbegexpr+1,q= &i[0]; *p!='.'; p++) {
  767. if ( q == &i[20] )
  768. fatalFL("i of $i.j attrib ref too big",
  769. FileStr[CurFile], zzline );
  770. *q++ = *p;
  771. }
  772. *q = '';
  773. for (p++, q= &j[0]; *p!=''; p++) {
  774. if ( q == &j[20] )
  775. fatalFL("j of $i.j attrib ref too big",
  776. FileStr[CurFile], zzline );
  777. *q++ = *p;
  778. }
  779. *q = '';
  780. if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%s,%s)",i,j);
  781. else sprintf(buf,"_t%s%s",i,j);
  782. zzreplstr(buf);
  783. zzmore();
  784. UsedOldStyleAttrib = 1;
  785. if ( UsedNewStyleLabel )
  786. err("cannot mix old-style $i with new-style labels");
  787. }
  788. >>
  789. $[_a-zA-Z][_a-zA-Z0-9]*
  790. <<
  791. NLA = 48;
  792. { static char buf[300]; LabelEntry *el;
  793. zzbegexpr[0] = ' ';
  794. if ( CurRule != NULL &&
  795. strcmp(CurRule, &zzbegexpr[1])==0 ) {
  796. if ( !GenCC ) zzreplstr("zzaRet");
  797. }
  798. else if ( CurRetDef != NULL &&
  799. strmember(CurRetDef, &zzbegexpr[1])) {
  800. if ( HasComma( CurRetDef ) ) {
  801. require (strlen(zzbegexpr)<=(size_t)285,
  802. "$retval attrib ref too big");
  803. sprintf(buf,"_retv.%s",&zzbegexpr[1]);
  804. zzreplstr(buf);
  805. }
  806. else zzreplstr("_retv");
  807. }
  808. else if ( CurParmDef != NULL &&
  809. strmember(CurParmDef, &zzbegexpr[1])) {
  810. ;
  811. }
  812. else if ( Elabel==NULL ) {
  813. { err("$-variables in actions outside of rules are not allowed"); }
  814. } else if ( (el=(LabelEntry *)hash_get(Elabel, &zzbegexpr[1]))!=NULL ) {
  815. /* MR10 */
  816. /* MR10 */                      /* element labels might exist without an elem when */
  817. /* MR10 */                      /*  it is a forward reference (to a rule)          */
  818. /* MR10 */
  819. /* MR10 */ if ( GenCC && (el->elem == NULL || el->elem->ntype==nRuleRef) )
  820. /* MR10 */ { err(eMsg1("There are no token ptrs for rule references: '$%s'",&zzbegexpr[1])); }
  821. /* MR10 */
  822. /* MR10 */ if ( !GenCC && (el->elem == NULL || el->elem->ntype==nRuleRef) && GenAST) {
  823. /* MR10 */                          err("You can no longer use attributes returned by rules when also using ASTs");
  824. /* MR10 */                          err("   Use upward inheritance ("rule >[Attrib a] : ... <<$a=...>>")");
  825. /* MR10 */                      };
  826. /* MR10 */
  827. /* MR10 */                      /* keep track of <<... $label ...>> for semantic predicates in guess mode */
  828. /* MR10 */                      /* element labels contain pointer to the owners node                      */
  829. /* MR10 */
  830. /* MR10 */                      if (el->elem != NULL && el->elem->ntype == nToken) {
  831. /* MR10 */                        list_add(&CurActionLabels,el);
  832. /* MR10 */                      };
  833. }
  834. else
  835. warn(eMsg1("$%s not parameter, return value, (defined) element label",&zzbegexpr[1]));
  836. }
  837. zzmore();
  838. >>
  839. #0
  840. <<
  841. NLA = 49;
  842. zzreplstr("(*_root)"); zzmore(); chkGTFlag();   
  843. >>
  844. #[]
  845. <<
  846. NLA = 50;
  847. if ( GenCC ) {
  848. if (NewAST) zzreplstr("(newAST)");
  849. else zzreplstr("(new AST)");}
  850. else {zzreplstr("zzastnew()");} zzmore();
  851. chkGTFlag();
  852. >>
  853. #()
  854. <<
  855. NLA = 51;
  856. zzreplstr("NULL"); zzmore(); chkGTFlag();   
  857. >>
  858. #[0-9]+
  859. <<
  860. NLA = 52;
  861. {
  862. static char buf[100];
  863. if ( strlen(zzbegexpr)>(size_t)85 )
  864. fatal("#i AST ref too big");
  865. if ( GenCC ) sprintf(buf,"_ast%d%s",BlkLevel-1,zzbegexpr+1);
  866. else sprintf(buf,"zzastArg(%s)",zzbegexpr+1);
  867. zzreplstr(buf);
  868. zzmore();
  869. set_orel(atoi(zzbegexpr+1), &AST_nodes_refd_in_actions);
  870. chkGTFlag();
  871. }
  872. >>
  873. #line[ t]* [0-9]+ {[ t]* "~["]+" ([ t]* [0-9]*)* } (n|r|rn)
  874. <<
  875. NLA = 53;
  876. zzline = atoi(zzbegexpr+5) - 1; zzline++; zzmore();
  877. getFileNameFromTheLineInfo(FileStr[CurFile], zzbegexpr);
  878. >>
  879. #line ~[nr]* (n|r|rn)
  880. <<
  881. NLA = 54;
  882. zzline++; zzmore();
  883. >>
  884. #[_a-zA-Z][_a-zA-Z0-9]*
  885. <<
  886. NLA = 55;
  887. if ( !(strcmp(zzbegexpr, "#ifdef")==0 ||
  888. strcmp(zzbegexpr, "#if")==0 ||
  889. strcmp(zzbegexpr, "#else")==0 ||
  890. strcmp(zzbegexpr, "#endif")==0 ||
  891. strcmp(zzbegexpr, "#ifndef")==0 ||
  892. strcmp(zzbegexpr, "#define")==0 ||
  893. strcmp(zzbegexpr, "#pragma")==0 ||
  894. strcmp(zzbegexpr, "#undef")==0 ||
  895. strcmp(zzbegexpr, "#import")==0 ||
  896. strcmp(zzbegexpr, "#line")==0 ||
  897. strcmp(zzbegexpr, "#include")==0 ||
  898. strcmp(zzbegexpr, "#error")==0) )
  899. {
  900. static char buf[100];
  901. sprintf(buf, "%s_ast", zzbegexpr+1);
  902. zzreplstr(buf);
  903. chkGTFlag();
  904. }
  905. zzmore();
  906. >>
  907. #[
  908. <<
  909. NLA = 56;
  910. pushint(']');
  911. if ( GenCC ) {
  912. if (NewAST) zzreplstr("(newAST(");
  913. else zzreplstr("(new AST("); }
  914. else zzreplstr("zzmk_ast(zzastnew(),");
  915. zzmore();
  916. chkGTFlag();
  917. >>
  918. #(
  919. <<
  920. NLA = 57;
  921. pushint('}');
  922. if ( GenCC )
  923. zzreplstr("ASTBase::tmake(");
  924. else zzreplstr("zztmake(");
  925. zzmore();
  926. chkGTFlag();
  927. >>
  928. #
  929. <<
  930. NLA = 58;
  931. zzmore();   
  932. >>
  933. )
  934. <<
  935. NLA = 59;
  936. if ( istackempty() )
  937. zzmore();
  938. else if ( topint()==')' ) {
  939. popint();
  940. }
  941. else if ( topint()=='}' ) {
  942. popint();
  943. /* terminate #(..) */
  944. zzreplstr(", NULL)");
  945. }
  946. zzmore();
  947. >>
  948. [
  949. <<
  950. NLA = 60;
  951. pushint('|'); /* look for '|' to terminate simple [...] */
  952. zzmore();
  953. >>
  954. (
  955. <<
  956. NLA = 61;
  957. pushint(')');
  958. zzmore();
  959. >>
  960. \]
  961. <<
  962. NLA = 62;
  963. zzreplstr("]");  zzmore();   
  964. >>
  965. \)
  966. <<
  967. NLA = 63;
  968. zzreplstr(")");  zzmore();   
  969. >>
  970. \>
  971. <<
  972. NLA = 64;
  973. if (! tokenActionActive) zzreplstr(">");  /* MR1 */
  974. zzmore();          /* MR1 */
  975. >>
  976. '
  977. <<
  978. NLA = 65;
  979. zzmode(ACTION_CHARS); zzmore();  
  980. >>
  981. "
  982. <<
  983. NLA = 66;
  984. zzmode(ACTION_STRINGS); zzmore();  
  985. >>
  986. \$
  987. <<
  988. NLA = 67;
  989. zzreplstr("$");  zzmore();   
  990. >>
  991. \#
  992. <<
  993. NLA = 68;
  994. zzreplstr("#");  zzmore();   
  995. >>
  996. \(n|r|rn)
  997. <<
  998. NLA = 69;
  999. zzline++; zzmore();   
  1000. >>
  1001. \~[])>$#]
  1002. <<
  1003. NLA = 70;
  1004. zzmore();   
  1005. >>
  1006. /
  1007. <<
  1008. NLA = 71;
  1009. zzmore();   
  1010. >>
  1011. /*
  1012. <<
  1013. NLA = 72;
  1014. zzmode(ACTION_COMMENTS); zzmore();   
  1015. >>
  1016. */
  1017. <<
  1018. NLA = 73;
  1019. warn("Missing /*; found dangling */ in action"); zzmore();   
  1020. >>
  1021. //
  1022. <<
  1023. NLA = 74;
  1024. zzmode(ACTION_CPP_COMMENTS); zzmore();   
  1025. >>
  1026. ~[nr)(\$#>]["'/]+
  1027. <<
  1028. NLA = 75;
  1029. zzmore();   
  1030. >>
  1031. %%PARSE_ENUM_FILE
  1032. @
  1033. <<
  1034. NLA = Eof;
  1035. ;   
  1036. >>
  1037. [t ]+
  1038. <<
  1039. NLA = 136;
  1040. zzskip();   
  1041. >>
  1042. n|r|rn
  1043. <<
  1044. NLA = 137;
  1045. zzline++; zzskip();   
  1046. >>
  1047. //
  1048. <<
  1049. NLA = 138;
  1050. zzmode(TOK_DEF_CPP_COMMENTS); zzmore();   
  1051. >>
  1052. /*
  1053. <<
  1054. NLA = 139;
  1055. zzmode(TOK_DEF_COMMENTS); zzskip();   
  1056. >>
  1057. #ifdef
  1058. <<
  1059. NLA = 140;
  1060. zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
  1061. >>
  1062. #if
  1063. <<
  1064. NLA = 141;
  1065. zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
  1066. >>
  1067. #ifndef
  1068. <<
  1069. NLA = 142;
  1070. ;   
  1071. >>
  1072. #else
  1073. <<
  1074. NLA = 143;
  1075. zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
  1076. >>
  1077. #endif
  1078. <<
  1079. NLA = 144;
  1080. zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
  1081. >>
  1082. #undef
  1083. <<
  1084. NLA = 145;
  1085. zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
  1086. >>
  1087. #import
  1088. <<
  1089. NLA = 146;
  1090. zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
  1091. >>
  1092. #define
  1093. <<
  1094. NLA = 148;
  1095. >>
  1096. enum
  1097. <<
  1098. NLA = 150;
  1099. >>
  1100. {
  1101. <<
  1102. NLA = 151;
  1103. >>
  1104. =
  1105. <<
  1106. NLA = 152;
  1107. >>
  1108. ,
  1109. <<
  1110. NLA = 153;
  1111. >>
  1112. }
  1113. <<
  1114. NLA = 154;
  1115. >>
  1116. ;
  1117. <<
  1118. NLA = 155;
  1119. >>
  1120. [0-9]+
  1121. <<
  1122. NLA = INT;
  1123. >>
  1124. [a-zA-Z_][_a-zA-Z0-9]*
  1125. <<
  1126. NLA = ID;
  1127. >>
  1128. %%