home *** CD-ROM | disk | FTP | other *** search
/ ftptest.leeds.ac.uk / 2015.02.ftptest.leeds.ac.uk.tar / ftptest.leeds.ac.uk / bionet / CAE-GROUP / SCL-WIN3x / FED_PLUS.EXE / EXPSCAN.C < prev    next >
C/C++ Source or Header  |  1994-07-25  |  25KB  |  1,209 lines

  1.  
  2. #include "expscan.h"
  3. #include "stdio.h"
  4. #define U(x) x
  5. #define NLSTATE exp_yyprevious=YYNEWLINE
  6. #define BEGIN exp_yybgin = exp_yysvec + 1 +
  7. #define INITIAL 0
  8. #define YYLERR exp_yysvec
  9. #define YYSTATE (exp_yyestate-exp_yysvec-1)
  10. #define YYOPTIM 1
  11. #define YYLMAX BUFSIZ
  12. #define output(c) putc(c,yyout)
  13. #define input() (((exp_yytchar=exp_yysptr>exp_yysbuf?U(*--exp_yysptr):getc(yyin))==10?(yylineno++,exp_yytchar):exp_yytchar)==EOF?0:exp_yytchar)
  14. #define unput(c) {exp_yytchar= (c);if(exp_yytchar=='\n')yylineno--;*exp_yysptr++=exp_yytchar;}
  15. #define yymore() (exp_yymorfg=1)
  16. #define ECHO fprintf(yyout, "%s",exp_yytext)
  17. #define REJECT { nstr = yyreject(); goto yyfussy;}
  18. int exp_yyleng; extern char exp_yytext[];
  19. int exp_yymorfg;
  20. extern char *exp_yysptr, exp_yysbuf[];
  21. int exp_yytchar;
  22. extern FILE *yyin, *yyout;
  23. extern int yylineno;
  24. struct yysvf { 
  25.     struct yywork *yystoff;
  26.     struct yysvf *yyother;
  27.     int *yystops;};
  28. struct yysvf *exp_yyestate;
  29. extern struct yysvf exp_yysvec[], *exp_yybgin;
  30.  
  31. static char rcsid[] = "$Id: expscan.l,v 1.10 1994/05/12 17:22:23 libes Exp $";
  32.  
  33. /*
  34.  * Lex source for Fed-X lexical analyzer.
  35.  *
  36.  * This software was developed by U.S. Government employees as part of
  37.  * their official duties and is not subject to copyright.
  38.  *
  39.  * $Log: expscan.l,v $
  40.  * Revision 1.10  1994/05/12  17:22:23  libes
  41.  * added #ifdefs for flex
  42.  *
  43.  * Revision 1.9  1994/05/12  17:18:10  libes
  44.  * made flex understand multiple files
  45.  *
  46.  * Revision 1.8  1994/05/11  19:50:00  libes
  47.  * numerous fixes
  48.  *
  49.  * Revision 1.7  1993/10/15  18:47:26  libes
  50.  * CADDETC certified
  51.  *
  52.  * Revision 1.5  1993/02/22  21:46:33  libes
  53.  * fixed unmatched_open_comment handler
  54.  *
  55.  * Revision 1.4  1992/08/18  17:11:36  libes
  56.  * rm'd extraneous error messages
  57.  *
  58.  * Revision 1.3  1992/06/08  18:05:20  libes
  59.  * prettied up interface to print_objects_when_running
  60.  *
  61.  * Revision 1.2  1992/05/31  08:30:54  libes
  62.  * multiple files
  63.  *
  64.  * Revision 1.1  1992/05/28  03:52:25  libes
  65.  * Initial revision
  66.  *
  67.  * Revision 1.4  1992/05/05  19:49:03  libes
  68.  * final alpha
  69.  *
  70.  * Revision 1.3  1992/02/12  07:02:49  libes
  71.  * do sub/supertypes
  72.  *
  73.  * Revision 1.2  1992/02/09  00:49:04  libes
  74.  * does ref/use correctly
  75.  *
  76.  * Revision 1.1  1992/02/05  08:40:30  libes
  77.  * Initial revision
  78.  *
  79.  * Revision 1.0.1.1  1992/01/22  02:47:57  libes
  80.  * copied from ~pdes
  81.  *
  82.  * Revision 4.9  1991/06/14  20:49:12  libes
  83.  * removed old infinity, added backslash
  84.  *
  85.  * Revision 4.8.1.1  1991/05/16  04:07:57  libes
  86.  * made scanner (under lex) understand hooks for doing include directive
  87.  *
  88.  * Revision 4.8.1.0  1991/05/16  01:10:15  libes
  89.  * branch for fixes to old code
  90.  *
  91.  * Revision 4.8  1991/05/03  21:09:02  libes
  92.  * Added sanity check to make sure lex/flex match -DLEX/FLEX
  93.  *
  94.  * Revision 4.7  1991/05/02  05:49:18  libes
  95.  * fixed bug in testing for exceeding open_comment[nesting_level]
  96.  *
  97.  * Revision 4.6  1991/04/29  19:44:40  libes
  98.  * Print all open comments rather than just one.
  99.  *
  100.  * Revision 4.5  1991/04/29  15:39:02  libes
  101.  * Changed commenting style (back) as per SNC who claims that N9 meant to
  102.  * say that tail remarks cannot occur in an open comment, nor can nested
  103.  * comments begin in a tail remark.
  104.  *
  105.  * Revision 4.4  1991/04/29  15:01:46  libes
  106.  * Add bounds checking to nesting level history
  107.  *
  108.  * Revision 4.3  1991/04/26  20:12:50  libes
  109.  * Made scanner work with lex
  110.  *     Simulated exclusive states with inclusive states
  111.  *     Fixed line counting
  112.  * Speeded up whitespace matching
  113.  * Convert unknown chars to whitespace
  114.  * Disabled default rule matching (enabled "jamming")
  115.  * Enabled detection/diagnostics of unterminated comments and strings literals
  116.  * Enabled detection/diagnostics of unexpected close comments
  117.  * Disabled detection/diagnostics of nested comments
  118.  *
  119.  * Revision 4.2  1990/12/18  14:00:04  clark
  120.  * Cosmetic changes
  121.  *
  122.  * Revision 4.1  90/09/13  16:29:00  clark
  123.  * BPR 2.1 alpha
  124.  * 
  125.  */
  126.  
  127. #include "basic.h"
  128. #include "error.h"
  129. #include "lexact.h"
  130. #include "exptoks.h"
  131. extern void    yyerror();
  132. extern int    yylineno;
  133. extern Boolean    yyeof;
  134. static int    nesting_level;
  135.  
  136. /* can't imagine this will ever be more than 2 or 3 - DEL */
  137. #define MAX_NESTED_COMMENTS 20
  138. static struct Symbol open_comment[MAX_NESTED_COMMENTS];
  139.  
  140. #undef yywrap
  141. static int
  142. yywrap()
  143. {
  144.     int i;
  145.  
  146.     for (i=0;i<nesting_level && i<MAX_NESTED_COMMENTS;i++) {
  147.         ERRORreport_with_symbol(ERROR_unmatched_open_comment,
  148.             &open_comment[i]);
  149.         /* maybe not all, but at least some will be reported - DEL */
  150.     }
  151.     return 1;
  152. }
  153.  
  154. #ifdef FLEX_SCANNER
  155.  
  156. #ifdef LEX
  157. ))))this line will generate an error during compilation intentionally - DEL
  158. You used flex (in make_rules) but compiled with -DLEX (in Makefile)!
  159. #endif
  160.  
  161. #define YY_USER_INIT    BEGIN code;    /* DEL */
  162.  
  163. #undef YY_DECL
  164. #define YY_DECL int exp_yylex(void)
  165.  
  166. /* here's the hook for the preprocessor */
  167. #undef YY_INPUT
  168. #define YY_INPUT(buf, result, max_size)                    \
  169.     (result) = SCANnextchar(buf)
  170.  
  171. /* I don't believe this is used anymore, but not sure */
  172. /* in any case, experimental code above that attempts to skip over */
  173. /* initial non-Express code explicitly refers to YY_INPUT */
  174. #ifdef slow_yylineno
  175. #undef YY_INPUT
  176. #define YY_INPUT(buf,result,max_size)                    \
  177.      result = (((buf[0] = getc(yyin)) == '\n')            \
  178.           ? (NEWLINE, 1)                    \
  179.           : ((buf[0] == EOF) ? ((yyeof = true), YY_NULL) : 1))
  180. #endif /*slow_yylineno*/
  181.  
  182. #define NEWLINE    yylineno++
  183. #define LINENO_FUDGE yylineno
  184.  
  185. #else /* !FLEX_SCANNER (i.e, LEX) */
  186.  
  187. #ifdef FLEX
  188. ))))this line will generate an error during compilation intentionally - DEL
  189. You used lex (in make_rules) but compiled with -DFLEX (in Makefile)!
  190. #endif
  191.  
  192. #undef input
  193. #undef unput
  194.  
  195. /* max page size 100 is guaranteed, but lex code uses BUFSIZ! - DEL */
  196. static char unchar[BUFSIZ];        /* one char for lex unput storage */
  197. static char *unchar_p = unchar;        /* whether unchar is in use */
  198.  
  199. static int first_time = true;
  200.  
  201. static int
  202. input() {
  203.     char c;
  204.  
  205.     if (unchar_p == unchar) {
  206.         /* no chars pushed back */
  207.         if (!SCANnextchar(&c)) return(0);
  208.         if (c == '\n') yylineno++;
  209.         return(c);
  210.     } else {
  211.         unchar_p--;
  212.         if (*unchar_p == '\n') yylineno++;
  213.         return(*unchar_p);
  214.     }
  215. }
  216.  
  217. /* if paranoid, should check that bounds are never exceeded, but maybe */
  218. /* lex does this for us?   lex is not documented well enough to know */
  219. #define unput(c) {exp_yytchar=(c);if(exp_yytchar=='\n')yylineno--;*unchar_p++=exp_yytchar;}
  220. /* really shouldn't use exp_yytchar since it isn't part of the defined interface */
  221.  
  222.  
  223. /* lex counts line for us, so turn this into a no-op - DEL */
  224. #define NEWLINE
  225. /* when lex looks ahead over a newline, error messages get thrown off */
  226. /* Fortunately, we know when that occurs, so adjust for it by this hack */
  227. #define LINENO_FUDGE (yylineno-1)
  228.  
  229. #endif
  230.  
  231. #ifdef FLEX_SCANNER
  232. void exp_flex_init();
  233. #endif
  234.  
  235. /* added for re-initializing parser -snc 22-Apr-1992 */
  236. void
  237. SCAN_lex_init(char *filename,FILE *fp) {
  238.     int i;
  239.  
  240.         /* return to initial scan buffer */
  241.         SCAN_current_buffer = 0;
  242.         *(SCANcurrent = SCANbuffer.text) = '\0';
  243.         SCANbuffer.readEof = false;
  244.         SCANbuffer.file = fp;
  245.     SCANbuffer.filename = (filename?filename:"");
  246.     current_filename = SCANbuffer.filename;
  247.  
  248.         /* empty all scan buffers */
  249. /*      for (i = 0; i < SCAN_NESTING_DEPTH; ++i)*/
  250. /*          SCAN_buffers[i].text[0] = '\0';*/
  251.  
  252. #ifdef FLEX_SCANNER
  253.     exp_flex_init();
  254. #endif
  255.  
  256. #ifndef FLEX_SCANNER
  257.         /* initialize un-got character pointer to start of buffer */
  258.         unchar_p = unchar;
  259.  
  260.     first_time = true;
  261. #endif
  262. }
  263.  
  264.  
  265. #define comment 2
  266. #define code 4
  267. #define return_end_schema 6
  268. #define YYNEWLINE 10
  269. exp_yylex(){
  270. int nstr; extern int exp_yyprevious;
  271. #ifndef FLEX_SCANNER
  272. if (first_time) {
  273.     BEGIN code;
  274.     first_time = false;
  275. }
  276. #endif
  277. /* Added * at the end of next rule (to make lexer faster) - DEL */
  278. while((nstr = exp_yylook()) >= 0)
  279. yyfussy: switch(nstr){
  280. case 0:
  281. if(yywrap()) return(0); break;
  282. case 1:
  283.     ;
  284. break;
  285. case 2:
  286.     { NEWLINE; }
  287. break;
  288. case 3:
  289. { NEWLINE; }
  290. break;
  291. case 4:
  292. {
  293.     /* nested comment errors will occur with most deeply nested - DEL */
  294.     if (nesting_level < MAX_NESTED_COMMENTS) {
  295.         open_comment[nesting_level].line = yylineno;
  296.         open_comment[nesting_level].filename = current_filename;
  297.     }
  298.     nesting_level++;
  299.     BEGIN comment;
  300. }
  301. break;
  302. /* real literal (like, think it'll fly?!) */
  303. case 5:
  304. {
  305.     return SCANprocess_real_literal();
  306. }
  307. break;
  308. /* integer literal */
  309. case 6:
  310. {
  311.     return SCANprocess_integer_literal();
  312. }
  313. break;
  314. /* binary literal */
  315. case 7:
  316. {
  317.     return SCANprocess_binary_literal();
  318. }
  319. break;
  320. /* identifier/keyword */
  321. case 8:
  322. {
  323.     return SCANprocess_identifier_or_keyword();
  324. }
  325. break;
  326. /* bad identifier */
  327. case 9:
  328. {
  329.     ERRORreport_with_line(ERROR_bad_identifier,yylineno,exp_yytext);
  330.     return SCANprocess_identifier_or_keyword();
  331. }
  332. break;
  333. /* string literal */
  334. case 10:
  335. {
  336.     return SCANprocess_string();
  337. }
  338. break;
  339. case 11:
  340. {
  341.     ERRORreport_with_line(ERROR_unterminated_string,LINENO_FUDGE);
  342.     NEWLINE;
  343.     return SCANprocess_string();
  344. }
  345. break;
  346. case 12:
  347. {
  348.     return SCANprocess_encoded_string();
  349. }
  350. break;
  351. case 13:
  352. {
  353.     ERRORreport_with_line(ERROR_unterminated_string,LINENO_FUDGE);
  354.     NEWLINE;
  355.     return SCANprocess_encoded_string();
  356. }
  357. break;
  358. case 14:
  359. { return TOK_ASSIGNMENT; }
  360. break;
  361. case 15:
  362. { return TOK_COLON; }
  363. break;
  364. case 16:
  365. { return TOK_COMMA; }
  366. break;
  367. case 17:
  368. { return TOK_CONCAT_OP; }
  369. break;
  370. case 18:
  371. { return TOK_DOT; }
  372. break;
  373. case 19:
  374. { return TOK_EQUAL; }
  375. break;
  376. case 20:
  377. { return TOK_EXP; }
  378. break;
  379. case 21:
  380. { return TOK_SUCH_THAT; }
  381. break;
  382. case 22:
  383. { return TOK_ALL_IN; }
  384. break;
  385. case 23:
  386. { return TOK_GREATER_EQUAL; }
  387. break;
  388. case 24:
  389. { return TOK_GREATER_THAN; }
  390. break;
  391. case 25:
  392. { return TOK_QUESTION_MARK; }
  393. break;
  394. case 26:
  395. { return TOK_INST_EQUAL; }
  396. break;
  397. case 27:
  398. { return TOK_INST_NOT_EQUAL; }
  399. break;
  400. case 28:
  401. { return TOK_LEFT_BRACKET; }
  402. break;
  403. case 29:
  404. { return TOK_LEFT_CURL; }
  405. break;
  406. case 30:
  407. { return TOK_LEFT_PAREN; }
  408. break;
  409. case 31:
  410. { return TOK_LESS_EQUAL; }
  411. break;
  412. case 32:
  413. { return TOK_LESS_THAN; }
  414. break;
  415. case 33:
  416. { return TOK_MINUS; }
  417. break;
  418. case 34:
  419. { return TOK_NOT_EQUAL; }
  420. break;
  421. case 35:
  422. { return TOK_PLUS; }
  423. break;
  424. case 36:
  425. { return TOK_REAL_DIV; }
  426. break;
  427. case 37:
  428. { return TOK_RIGHT_BRACKET; }
  429. break;
  430. case 38:
  431. { return TOK_RIGHT_CURL; }
  432. break;
  433. case 39:
  434. { return TOK_RIGHT_PAREN; }
  435. break;
  436. case 40:
  437. { return TOK_SEMICOLON; }
  438. break;
  439. case 41:
  440. { return TOK_TIMES; }
  441. break;
  442. case 42:
  443. { return TOK_BACKSLASH; }
  444. break;
  445. case 43:
  446. {
  447.     BEGIN code;
  448.     return TOK_END_SCHEMA;
  449. }
  450. break;
  451. case 44:
  452. {
  453.     if (0 == --nesting_level) BEGIN code;
  454. }
  455. break;
  456. case 45:
  457. {
  458.     ERRORreport_with_line(ERROR_unmatched_close_comment,yylineno);
  459. }
  460. break;
  461. case 46:
  462.     { NEWLINE; }
  463. break;
  464. case 47:
  465. ;
  466. break;
  467. case 48:
  468.     ;
  469. break;
  470. /* As per N15, 7.1.5.3, all other recognized chars are incorrect - DEL */
  471. case 49:
  472. {
  473.     ERRORreport_with_line(ERROR_unexpected_character,yylineno,exp_yytext[0]);
  474. }
  475. break;
  476. /* ... and unrecognized characters are treated as whitespace - DEL */
  477. case 50:
  478.         ;
  479. break;
  480. case -1:
  481. break;
  482. default:
  483. fprintf(yyout,"bad switch exp_yylook %d",nstr);
  484. } return(0); }
  485. /* end of exp_yylex */
  486. void
  487. SCANskip_to_end_schema()
  488. {
  489.     while (exp_yylex() != TOK_END_SCHEMA);
  490.  
  491.     unput('X');    /* any old character */
  492.  
  493.     BEGIN return_end_schema;
  494. }
  495.  
  496. #ifdef FLEX_SCANNER
  497. /* required because yy_init isn't known when we need to re-init it */
  498. void
  499. exp_flex_init()
  500. {
  501.     /* yy_init is what tells flex to reinitialize its buffers */
  502.  
  503.     yy_init = 1;
  504. }
  505. #endif
  506. int exp_yyvstop[] = {
  507. 0,
  508.  
  509. 1,
  510. 47,
  511. 0,
  512.  
  513. 1,
  514. 47,
  515. 0,
  516.  
  517. 1,
  518. 47,
  519. 0,
  520.  
  521. 1,
  522. 47,
  523. 0,
  524.  
  525. 1,
  526. 47,
  527. 0,
  528.  
  529. 1,
  530. 47,
  531. 0,
  532.  
  533. 1,
  534. 47,
  535. 0,
  536.  
  537. 1,
  538. 47,
  539. 0,
  540.  
  541. 50,
  542. 0,
  543.  
  544. 1,
  545. 50,
  546. 0,
  547.  
  548. 2,
  549. 0,
  550.  
  551. 50,
  552. 0,
  553.  
  554. 47,
  555. 50,
  556. 0,
  557.  
  558. 1,
  559. 47,
  560. 50,
  561. 0,
  562.  
  563. 2,
  564. 46,
  565. 0,
  566.  
  567. 48,
  568. 50,
  569. 0,
  570.  
  571. 48,
  572. 50,
  573. 0,
  574.  
  575. 48,
  576. 50,
  577. 0,
  578.  
  579. 50,
  580. 0,
  581.  
  582. 49,
  583. 50,
  584. 0,
  585.  
  586. 49,
  587. 50,
  588. 0,
  589.  
  590. 50,
  591. 0,
  592.  
  593. 30,
  594. 50,
  595. 0,
  596.  
  597. 39,
  598. 50,
  599. 0,
  600.  
  601. 41,
  602. 50,
  603. 0,
  604.  
  605. 35,
  606. 50,
  607. 0,
  608.  
  609. 16,
  610. 50,
  611. 0,
  612.  
  613. 33,
  614. 50,
  615. 0,
  616.  
  617. 18,
  618. 50,
  619. 0,
  620.  
  621. 36,
  622. 50,
  623. 0,
  624.  
  625. 6,
  626. 50,
  627. 0,
  628.  
  629. 15,
  630. 50,
  631. 0,
  632.  
  633. 40,
  634. 50,
  635. 0,
  636.  
  637. 32,
  638. 50,
  639. 0,
  640.  
  641. 19,
  642. 50,
  643. 0,
  644.  
  645. 24,
  646. 50,
  647. 0,
  648.  
  649. 25,
  650. 50,
  651. 0,
  652.  
  653. 8,
  654. 9,
  655. 50,
  656. 0,
  657.  
  658. 28,
  659. 50,
  660. 0,
  661.  
  662. 42,
  663. 50,
  664. 0,
  665.  
  666. 37,
  667. 50,
  668. 0,
  669.  
  670. 9,
  671. 50,
  672. 0,
  673.  
  674. 29,
  675. 49,
  676. 50,
  677. 0,
  678.  
  679. 21,
  680. 50,
  681. 0,
  682.  
  683. 38,
  684. 49,
  685. 50,
  686. 0,
  687.  
  688. 43,
  689. 50,
  690. 0,
  691.  
  692. 1,
  693. 0,
  694.  
  695. 4,
  696. 0,
  697.  
  698. 47,
  699. 0,
  700.  
  701. 1,
  702. 47,
  703. 0,
  704.  
  705. 44,
  706. 0,
  707.  
  708. 13,
  709. 0,
  710.  
  711. 12,
  712. 0,
  713.  
  714. 7,
  715. 0,
  716.  
  717. 11,
  718. 0,
  719.  
  720. 10,
  721. 0,
  722.  
  723. 45,
  724. 0,
  725.  
  726. 20,
  727. 0,
  728.  
  729. 5,
  730. 0,
  731.  
  732. 6,
  733. 0,
  734.  
  735. 14,
  736. 0,
  737.  
  738. 22,
  739. 0,
  740.  
  741. 31,
  742. 0,
  743.  
  744. 34,
  745. 0,
  746.  
  747. 23,
  748. 0,
  749.  
  750. 8,
  751. 9,
  752. 0,
  753.  
  754. 9,
  755. 0,
  756.  
  757. 17,
  758. 0,
  759.  
  760. 3,
  761. 0,
  762.  
  763. 26,
  764. 0,
  765.  
  766. 5,
  767. 0,
  768.  
  769. 27,
  770. 0,
  771. 0};
  772. #define YYTYPE char
  773. struct yywork { YYTYPE verify, advance; } exp_yycrank[] = {
  774. 0,0,    0,0,    1,9,    0,0,    
  775. 0,0,    0,0,    0,0,    0,0,    
  776. 0,0,    0,0,    1,10,    1,11,    
  777. 0,0,    10,47,    0,0,    3,13,    
  778. 0,0,    0,0,    0,0,    0,0,    
  779. 0,0,    0,0,    0,0,    3,14,    
  780. 3,15,    0,0,    0,0,    0,0,    
  781. 0,0,    0,0,    0,0,    0,0,    
  782. 0,0,    0,0,    0,0,    1,9,    
  783. 10,47,    1,9,    0,0,    0,0,    
  784. 1,9,    1,12,    1,9,    1,9,    
  785. 1,9,    2,9,    2,9,    12,48,    
  786. 3,13,    1,9,    3,13,    1,9,    
  787. 18,51,    3,13,    3,16,    3,17,    
  788. 3,18,    3,13,    4,17,    4,18,    
  789. 14,50,    14,0,    3,13,    28,61,    
  790. 3,13,    36,69,    1,9,    21,55,    
  791. 21,55,    34,66,    1,9,    49,0,    
  792. 5,9,    7,9,    7,9,    8,9,    
  793. 8,9,    25,59,    25,60,    3,13,    
  794. 5,10,    5,11,    58,56,    3,13,    
  795. 32,64,    32,65,    64,75,    65,76,    
  796. 34,67,    34,68,    75,79,    14,0,    
  797. 14,0,    14,0,    0,0,    0,0,    
  798. 1,9,    0,0,    0,0,    0,0,    
  799. 0,0,    49,0,    49,0,    49,0,    
  800. 0,0,    5,19,    0,0,    5,20,    
  801. 5,21,    3,13,    5,22,    5,23,    
  802. 5,24,    5,25,    5,26,    5,27,    
  803. 5,28,    5,29,    5,30,    5,31,    
  804. 7,46,    5,31,    8,46,    0,0,    
  805. 0,0,    44,72,    50,50,    50,0,    
  806. 0,0,    5,32,    5,33,    5,34,    
  807. 5,35,    5,36,    5,37,    0,0,    
  808. 5,38,    0,0,    0,0,    0,0,    
  809. 5,38,    0,0,    0,0,    0,0,    
  810. 0,0,    0,0,    6,21,    0,0,    
  811. 0,0,    0,0,    6,24,    6,25,    
  812. 0,0,    6,27,    6,28,    6,29,    
  813. 6,30,    50,0,    50,0,    50,0,    
  814. 0,0,    0,0,    5,39,    5,40,    
  815. 5,41,    0,0,    5,42,    6,32,    
  816. 6,33,    6,34,    6,35,    6,36,    
  817. 6,37,    13,49,    0,0,    0,0,    
  818. 0,0,    0,0,    74,77,    0,0,    
  819. 74,77,    13,49,    13,0,    74,78,    
  820. 74,78,    74,78,    74,78,    74,78,    
  821. 74,78,    74,78,    74,78,    74,78,    
  822. 74,78,    0,0,    5,43,    5,44,    
  823. 5,45,    0,0,    0,0,    0,0,    
  824. 6,39,    6,40,    6,41,    0,0,    
  825. 0,0,    0,0,    13,49,    0,0,    
  826. 13,49,    19,52,    0,0,    13,49,    
  827. 13,0,    13,0,    13,0,    13,49,    
  828. 0,0,    19,52,    19,53,    0,0,    
  829. 13,49,    0,0,    13,49,    0,0,    
  830. 0,0,    0,0,    0,0,    22,56,    
  831. 0,0,    0,0,    0,0,    0,0,    
  832. 6,43,    6,44,    6,45,    22,56,    
  833. 22,57,    13,49,    0,0,    0,0,    
  834. 0,0,    13,49,    19,54,    0,0,    
  835. 19,52,    0,0,    0,0,    19,52,    
  836. 19,52,    0,0,    0,0,    19,52,    
  837. 0,0,    0,0,    0,0,    0,0,    
  838. 19,52,    0,0,    19,52,    0,0,    
  839. 22,56,    0,0,    22,56,    0,0,    
  840. 0,0,    22,58,    22,56,    13,49,    
  841. 0,0,    22,56,    0,0,    0,0,    
  842. 0,0,    19,52,    22,56,    0,0,    
  843. 22,56,    19,52,    31,62,    0,0,    
  844. 31,63,    31,63,    31,63,    31,63,    
  845. 31,63,    31,63,    31,63,    31,63,    
  846. 31,63,    31,63,    0,0,    22,56,    
  847. 0,0,    0,0,    0,0,    22,56,    
  848. 0,0,    0,0,    0,0,    0,0,    
  849. 0,0,    0,0,    0,0,    19,52,    
  850. 0,0,    38,70,    38,70,    38,70,    
  851. 38,70,    38,70,    38,70,    38,70,    
  852. 38,70,    38,70,    38,70,    0,0,    
  853. 0,0,    0,0,    0,0,    0,0,    
  854. 0,0,    22,56,    38,70,    38,70,    
  855. 38,70,    38,70,    38,70,    38,70,    
  856. 38,70,    38,70,    38,70,    38,70,    
  857. 38,70,    38,70,    38,70,    38,70,    
  858. 38,70,    38,70,    38,70,    38,70,    
  859. 38,70,    38,70,    38,70,    38,70,    
  860. 38,70,    38,70,    38,70,    38,70,    
  861. 0,0,    0,0,    0,0,    0,0,    
  862. 38,70,    0,0,    38,70,    38,70,    
  863. 38,70,    38,70,    38,70,    38,70,    
  864. 38,70,    38,70,    38,70,    38,70,    
  865. 38,70,    38,70,    38,70,    38,70,    
  866. 38,70,    38,70,    38,70,    38,70,    
  867. 38,70,    38,70,    38,70,    38,70,    
  868. 38,70,    38,70,    38,70,    38,70,    
  869. 42,71,    42,71,    42,71,    42,71,    
  870. 42,71,    42,71,    42,71,    42,71,    
  871. 42,71,    42,71,    0,0,    0,0,    
  872. 0,0,    0,0,    0,0,    0,0,    
  873. 0,0,    42,71,    42,71,    42,71,    
  874. 42,71,    42,71,    42,71,    42,71,    
  875. 42,71,    42,71,    42,71,    42,71,    
  876. 42,71,    42,71,    42,71,    42,71,    
  877. 42,71,    42,71,    42,71,    42,71,    
  878. 42,71,    42,71,    42,71,    42,71,    
  879. 42,71,    42,71,    42,71,    0,0,    
  880. 0,0,    0,0,    0,0,    42,71,    
  881. 0,0,    42,71,    42,71,    42,71,    
  882. 42,71,    42,71,    42,71,    42,71,    
  883. 42,71,    42,71,    42,71,    42,71,    
  884. 42,71,    42,71,    42,71,    42,71,    
  885. 42,71,    42,71,    42,71,    42,71,    
  886. 42,71,    42,71,    42,71,    42,71,    
  887. 42,71,    42,71,    42,71,    61,61,    
  888. 0,0,    0,0,    0,0,    0,0,    
  889. 0,0,    0,0,    0,0,    61,61,    
  890. 61,73,    62,62,    62,62,    62,62,    
  891. 62,62,    62,62,    62,62,    62,62,    
  892. 62,62,    62,62,    62,62,    77,78,    
  893. 77,78,    77,78,    77,78,    77,78,    
  894. 77,78,    77,78,    77,78,    77,78,    
  895. 77,78,    0,0,    62,74,    0,0,    
  896. 61,61,    0,0,    61,61,    0,0,    
  897. 0,0,    61,61,    61,61,    0,0,    
  898. 0,0,    61,61,    0,0,    0,0,    
  899. 0,0,    0,0,    61,61,    0,0,    
  900. 61,61,    0,0,    0,0,    0,0,    
  901. 0,0,    0,0,    0,0,    0,0,    
  902. 0,0,    0,0,    0,0,    0,0,    
  903. 0,0,    0,0,    62,74,    61,61,    
  904. 0,0,    0,0,    0,0,    61,61,    
  905. 0,0,    0,0,    0,0,    0,0,    
  906. 0,0,    0,0,    0,0,    0,0,    
  907. 0,0,    0,0,    0,0,    0,0,    
  908. 0,0,    0,0,    0,0,    0,0,    
  909. 0,0,    0,0,    0,0,    0,0,    
  910. 0,0,    0,0,    0,0,    0,0,    
  911. 0,0,    61,61,    0,0,    0,0,    
  912. 0,0};
  913. struct yysvf exp_yysvec[] = {
  914. 0,    0,    0,
  915. exp_yycrank+-1,    0,        exp_yyvstop+1,
  916. exp_yycrank+-4,    exp_yysvec+1,    exp_yyvstop+4,
  917. exp_yycrank+-14,    0,        exp_yyvstop+7,
  918. exp_yycrank+-17,    exp_yysvec+3,    exp_yyvstop+10,
  919. exp_yycrank+-71,    0,        exp_yyvstop+13,
  920. exp_yycrank+-109,    exp_yysvec+5,    exp_yyvstop+16,
  921. exp_yycrank+-32,    exp_yysvec+1,    exp_yyvstop+19,
  922. exp_yycrank+-34,    exp_yysvec+1,    exp_yyvstop+22,
  923. exp_yycrank+0,    0,        exp_yyvstop+25,
  924. exp_yycrank+4,    0,        exp_yyvstop+27,
  925. exp_yycrank+0,    0,        exp_yyvstop+30,
  926. exp_yycrank+5,    0,        exp_yyvstop+32,
  927. exp_yycrank+-172,    0,        exp_yyvstop+34,
  928. exp_yycrank+-51,    exp_yysvec+13,    exp_yyvstop+37,
  929. exp_yycrank+0,    0,        exp_yyvstop+41,
  930. exp_yycrank+0,    exp_yysvec+12,    exp_yyvstop+44,
  931. exp_yycrank+0,    0,        exp_yyvstop+47,
  932. exp_yycrank+11,    0,        exp_yyvstop+50,
  933. exp_yycrank+-208,    0,        exp_yyvstop+53,
  934. exp_yycrank+0,    0,        exp_yyvstop+55,
  935. exp_yycrank+19,    0,        exp_yyvstop+58,
  936. exp_yycrank+-226,    0,        exp_yyvstop+61,
  937. exp_yycrank+0,    exp_yysvec+12,    exp_yyvstop+63,
  938. exp_yycrank+0,    0,        exp_yyvstop+66,
  939. exp_yycrank+36,    0,        exp_yyvstop+69,
  940. exp_yycrank+0,    0,        exp_yyvstop+72,
  941. exp_yycrank+0,    0,        exp_yyvstop+75,
  942. exp_yycrank+18,    0,        exp_yyvstop+78,
  943. exp_yycrank+0,    0,        exp_yyvstop+81,
  944. exp_yycrank+0,    0,        exp_yyvstop+84,
  945. exp_yycrank+232,    0,        exp_yyvstop+87,
  946. exp_yycrank+24,    0,        exp_yyvstop+90,
  947. exp_yycrank+0,    0,        exp_yyvstop+93,
  948. exp_yycrank+27,    0,        exp_yyvstop+96,
  949. exp_yycrank+0,    0,        exp_yyvstop+99,
  950. exp_yycrank+4,    0,        exp_yyvstop+102,
  951. exp_yycrank+0,    0,        exp_yyvstop+105,
  952. exp_yycrank+257,    0,        exp_yyvstop+108,
  953. exp_yycrank+0,    0,        exp_yyvstop+112,
  954. exp_yycrank+0,    0,        exp_yyvstop+115,
  955. exp_yycrank+0,    0,        exp_yyvstop+118,
  956. exp_yycrank+332,    0,        exp_yyvstop+121,
  957. exp_yycrank+0,    0,        exp_yyvstop+124,
  958. exp_yycrank+1,    0,        exp_yyvstop+128,
  959. exp_yycrank+0,    0,        exp_yyvstop+131,
  960. exp_yycrank+0,    0,        exp_yyvstop+135,
  961. exp_yycrank+0,    exp_yysvec+10,    exp_yyvstop+138,
  962. exp_yycrank+0,    0,        exp_yyvstop+140,
  963. exp_yycrank+-61,    exp_yysvec+13,    exp_yyvstop+142,
  964. exp_yycrank+-117,    exp_yysvec+13,    exp_yyvstop+144,
  965. exp_yycrank+0,    0,        exp_yyvstop+147,
  966. exp_yycrank+0,    exp_yysvec+19,    0,    
  967. exp_yycrank+0,    0,        exp_yyvstop+149,
  968. exp_yycrank+0,    0,        exp_yyvstop+151,
  969. exp_yycrank+0,    exp_yysvec+21,    exp_yyvstop+153,
  970. exp_yycrank+0,    exp_yysvec+22,    0,    
  971. exp_yycrank+0,    0,        exp_yyvstop+155,
  972. exp_yycrank+43,    0,        exp_yyvstop+157,
  973. exp_yycrank+0,    0,        exp_yyvstop+159,
  974. exp_yycrank+0,    0,        exp_yyvstop+161,
  975. exp_yycrank+-454,    0,        0,    
  976. exp_yycrank+417,    0,        exp_yyvstop+163,
  977. exp_yycrank+0,    exp_yysvec+31,    exp_yyvstop+165,
  978. exp_yycrank+24,    0,        0,    
  979. exp_yycrank+29,    0,        exp_yyvstop+167,
  980. exp_yycrank+0,    0,        exp_yyvstop+169,
  981. exp_yycrank+0,    0,        exp_yyvstop+171,
  982. exp_yycrank+0,    0,        exp_yyvstop+173,
  983. exp_yycrank+0,    0,        exp_yyvstop+175,
  984. exp_yycrank+0,    exp_yysvec+38,    exp_yyvstop+177,
  985. exp_yycrank+0,    exp_yysvec+42,    exp_yyvstop+180,
  986. exp_yycrank+0,    0,        exp_yyvstop+182,
  987. exp_yycrank+0,    0,        exp_yyvstop+184,
  988. exp_yycrank+135,    0,        0,    
  989. exp_yycrank+32,    0,        0,    
  990. exp_yycrank+0,    0,        exp_yyvstop+186,
  991. exp_yycrank+427,    0,        0,    
  992. exp_yycrank+0,    exp_yysvec+77,    exp_yyvstop+188,
  993. exp_yycrank+0,    0,        exp_yyvstop+190,
  994. 0,    0,    0};
  995. struct yywork *exp_yytop = exp_yycrank+549;
  996. struct yysvf *exp_yybgin = exp_yysvec+1;
  997. char exp_yymatch[] = {
  998. 00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  999. 01  ,011 ,012 ,01  ,01  ,01  ,01  ,01  ,
  1000. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  1001. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  1002. 011 ,01  ,'"' ,01  ,'$' ,'$' ,'$' ,047 ,
  1003. '(' ,'(' ,'(' ,'+' ,01  ,'+' ,01  ,01  ,
  1004. '0' ,'0' ,'2' ,'2' ,'2' ,'2' ,'2' ,'2' ,
  1005. '2' ,'2' ,01  ,01  ,01  ,01  ,01  ,01  ,
  1006. '$' ,'A' ,'A' ,'A' ,'A' ,'E' ,'A' ,'A' ,
  1007. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  1008. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  1009. 'A' ,'A' ,'A' ,01  ,01  ,01  ,'$' ,'_' ,
  1010. 01  ,'A' ,'A' ,'A' ,'A' ,'E' ,'A' ,'A' ,
  1011. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  1012. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  1013. 'A' ,'A' ,'A' ,'$' ,01  ,'$' ,'$' ,01  ,
  1014. 0};
  1015. char exp_yyextra[] = {
  1016. 0,0,0,0,0,0,0,0,
  1017. 0,0,0,0,0,0,0,0,
  1018. 0,0,0,0,0,0,0,0,
  1019. 0,0,0,0,0,0,0,0,
  1020. 0,0,0,0,0,0,0,0,
  1021. 0,0,0,0,0,0,0,0,
  1022. 0,0,0,0,0,0,0,0,
  1023. 0};
  1024. #ifndef lint
  1025. static    char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */
  1026. #endif
  1027.  
  1028. extern int yylineno;
  1029. #define YYU(x) x
  1030. #define NLSTATE exp_yyprevious=YYNEWLINE
  1031. char exp_yytext[YYLMAX];
  1032. struct yysvf *exp_yylstate [YYLMAX], **exp_yylsp, **exp_yyolsp;
  1033. char exp_yysbuf[YYLMAX];
  1034. char *exp_yysptr = exp_yysbuf;
  1035. int *exp_yyfnd;
  1036. extern struct yysvf *exp_yyestate;
  1037. int exp_yyprevious = YYNEWLINE;
  1038. exp_yylook(){
  1039.     register struct yysvf *yystate, **lsp;
  1040.     register struct yywork *yyt;
  1041.     struct yysvf *yyz;
  1042.     int yych, yyfirst;
  1043.     struct yywork *yyr;
  1044. #ifdef LEXDEBUG
  1045.     int debug;
  1046. #endif
  1047.     char *yylastch;
  1048.     /* start off machines */
  1049. #ifdef LEXDEBUG
  1050.     debug = 0;
  1051. #endif
  1052.     yyfirst=1;
  1053.     if (!exp_yymorfg)
  1054.         yylastch = exp_yytext;
  1055.     else {
  1056.         exp_yymorfg=0;
  1057.         yylastch = exp_yytext+exp_yyleng;
  1058.         }
  1059.     for(;;){
  1060.         lsp = exp_yylstate;
  1061.         exp_yyestate = yystate = exp_yybgin;
  1062.         if (exp_yyprevious==YYNEWLINE) yystate++;
  1063.         for (;;){
  1064. #ifdef LEXDEBUG
  1065.             if(debug)fprintf(yyout,"state %d\n",yystate-exp_yysvec-1);
  1066. #endif
  1067.             yyt = yystate->yystoff;
  1068.             if(yyt == exp_yycrank && !yyfirst){  /* may not be any transitions */
  1069.                 yyz = yystate->yyother;
  1070.                 if(yyz == 0)break;
  1071.                 if(yyz->yystoff == exp_yycrank)break;
  1072.                 }
  1073.             *yylastch++ = yych = input();
  1074.             yyfirst=0;
  1075.         tryagain:
  1076. #ifdef LEXDEBUG
  1077.             if(debug){
  1078.                 fprintf(yyout,"char ");
  1079.                 allprint(yych);
  1080.                 putchar('\n');
  1081.                 }
  1082. #endif
  1083.             yyr = yyt;
  1084.             if ( (int)yyt > (int)exp_yycrank){
  1085.                 yyt = yyr + yych;
  1086.                 if (yyt <= exp_yytop && yyt->verify+exp_yysvec == yystate){
  1087.                     if(yyt->advance+exp_yysvec == YYLERR)    /* error transitions */
  1088.                         {unput(*--yylastch);break;}
  1089.                     *lsp++ = yystate = yyt->advance+exp_yysvec;
  1090.                     goto contin;
  1091.                     }
  1092.                 }
  1093. #ifdef YYOPTIM
  1094.             else if((int)yyt < (int)exp_yycrank) {        /* r < exp_yycrank */
  1095.                 yyt = yyr = exp_yycrank+(exp_yycrank-yyt);
  1096. #ifdef LEXDEBUG
  1097.                 if(debug)fprintf(yyout,"compressed state\n");
  1098. #endif
  1099.                 yyt = yyt + yych;
  1100.                 if(yyt <= exp_yytop && yyt->verify+exp_yysvec == yystate){
  1101.                     if(yyt->advance+exp_yysvec == YYLERR)    /* error transitions */
  1102.                         {unput(*--yylastch);break;}
  1103.                     *lsp++ = yystate = yyt->advance+exp_yysvec;
  1104.                     goto contin;
  1105.                     }
  1106.                 yyt = yyr + YYU(exp_yymatch[yych]);
  1107. #ifdef LEXDEBUG
  1108.                 if(debug){
  1109.                     fprintf(yyout,"try fall back character ");
  1110.                     allprint(YYU(exp_yymatch[yych]));
  1111.                     putchar('\n');
  1112.                     }
  1113. #endif
  1114.                 if(yyt <= exp_yytop && yyt->verify+exp_yysvec == yystate){
  1115.                     if(yyt->advance+exp_yysvec == YYLERR)    /* error transition */
  1116.                         {unput(*--yylastch);break;}
  1117.                     *lsp++ = yystate = yyt->advance+exp_yysvec;
  1118.                     goto contin;
  1119.                     }
  1120.                 }
  1121.             if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != exp_yycrank){
  1122. #ifdef LEXDEBUG
  1123.                 if(debug)fprintf(yyout,"fall back to state %d\n",yystate-exp_yysvec-1);
  1124. #endif                
  1125.                 goto tryagain;
  1126.                 }
  1127. #endif                
  1128.             else
  1129.                 {unput(*--yylastch);break;}
  1130.         contin:
  1131. #ifdef LEXDEBUG
  1132.             if(debug){
  1133.                 fprintf(yyout,"state %d char ",yystate-exp_yysvec-1);
  1134.                 allprint(yych);
  1135.                 putchar('\n');
  1136.                 }
  1137. #endif
  1138.             ;
  1139.             }
  1140. #ifdef LEXDEBUG
  1141.         if(debug){
  1142.             fprintf(yyout,"stopped at %d with ",*(lsp-1)-exp_yysvec-1);
  1143.             allprint(yych);
  1144.             putchar('\n');
  1145.             }
  1146. #endif
  1147.         while (lsp-- > exp_yylstate){
  1148.             *yylastch-- = 0;
  1149.             if (*lsp != 0 && (exp_yyfnd= (*lsp)->yystops) && *exp_yyfnd > 0){
  1150.                 exp_yyolsp = lsp;
  1151.                 if(exp_yyextra[*exp_yyfnd]){        /* must backup */
  1152.                     while(exp_yyback((*lsp)->yystops,-*exp_yyfnd) != 1 && lsp > exp_yylstate){
  1153.                         lsp--;
  1154.                         unput(*yylastch--);
  1155.                         }
  1156.                     }
  1157.                 exp_yyprevious = YYU(*yylastch);
  1158.                 exp_yylsp = lsp;
  1159.                 exp_yyleng = yylastch-exp_yytext+1;
  1160.                 exp_yytext[exp_yyleng] = 0;
  1161. #ifdef LEXDEBUG
  1162.                 if(debug){
  1163.                     fprintf(yyout,"\nmatch ");
  1164.                     sprint(exp_yytext);
  1165.                     fprintf(yyout," action %d\n",*exp_yyfnd);
  1166.                     }
  1167. #endif
  1168.                 return(*exp_yyfnd++);
  1169.                 }
  1170.             unput(*yylastch);
  1171.             }
  1172.         if (exp_yytext[0] == 0  /* && feof(yyin) */)
  1173.             {
  1174.             exp_yysptr=exp_yysbuf;
  1175.             return(0);
  1176.             }
  1177.         exp_yyprevious = exp_yytext[0] = input();
  1178.         if (exp_yyprevious>0)
  1179.             output(exp_yyprevious);
  1180.         yylastch=exp_yytext;
  1181. #ifdef LEXDEBUG
  1182.         if(debug)putchar('\n');
  1183. #endif
  1184.         }
  1185.     }
  1186. exp_yyback(p, m)
  1187.     int *p;
  1188. {
  1189. if (p==0) return(0);
  1190. while (*p)
  1191.     {
  1192.     if (*p++ == m)
  1193.         return(1);
  1194.     }
  1195. return(0);
  1196. }
  1197.     /* the following are only used in the lex library */
  1198. static yyinput(){
  1199.     return(input());
  1200.     }
  1201. exp_yyoutput(c)
  1202.   int c; {
  1203.     output(c);
  1204.     }
  1205. static yyunput(c)
  1206.    int c; {
  1207.     unput(c);
  1208.     }
  1209.