|
|
1.1 ! root 1: /*- ! 2: * Copyright (c) 1990 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * This code is derived from software contributed to Berkeley by ! 6: * Vern Paxson. ! 7: * ! 8: * The United States Government has rights in this work pursuant ! 9: * to contract no. DE-AC03-76SF00098 between the United States ! 10: * Department of Energy and the University of California. ! 11: * ! 12: * Redistribution and use in source and binary forms are permitted provided ! 13: * that: (1) source distributions retain this entire copyright notice and ! 14: * comment, and (2) distributions including binaries display the following ! 15: * acknowledgement: ``This product includes software developed by the ! 16: * University of California, Berkeley and its contributors'' in the ! 17: * documentation or other materials provided with the distribution and in ! 18: * all advertising materials mentioning features or use of this software. ! 19: * Neither the name of the University nor the names of its contributors may ! 20: * be used to endorse or promote products derived from this software without ! 21: * specific prior written permission. ! 22: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 23: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 24: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 25: */ ! 26: ! 27: #ifndef lint ! 28: char copyright[] = ! 29: "@(#) Copyright (c) 1990 The Regents of the University of California.\n\ ! 30: All rights reserved.\n"; ! 31: #endif /* not lint */ ! 32: ! 33: #ifndef lint ! 34: static char sccsid[] = "@(#)main.c 5.3 (Berkeley) 6/18/90"; ! 35: #endif /* not lint */ ! 36: ! 37: /* flex - tool to generate fast lexical analyzers */ ! 38: ! 39: #include "flexdef.h" ! 40: #include "pathnames.h" ! 41: ! 42: static char flex_version[] = "2.3"; ! 43: ! 44: ! 45: /* declare functions that have forward references */ ! 46: ! 47: void flexinit PROTO((int, char**)); ! 48: void readin PROTO(()); ! 49: void set_up_initial_allocations PROTO(()); ! 50: ! 51: ! 52: /* these globals are all defined and commented in flexdef.h */ ! 53: int printstats, syntaxerror, eofseen, ddebug, trace, spprdflt; ! 54: int interactive, caseins, useecs, fulltbl, usemecs; ! 55: int fullspd, gen_line_dirs, performance_report, backtrack_report, csize; ! 56: int yymore_used, reject, real_reject, continued_action; ! 57: int yymore_really_used, reject_really_used; ! 58: int datapos, dataline, linenum; ! 59: FILE *skelfile = NULL; ! 60: char *infilename = NULL; ! 61: int onestate[ONE_STACK_SIZE], onesym[ONE_STACK_SIZE]; ! 62: int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp; ! 63: int current_mns, num_rules, current_max_rules, lastnfa; ! 64: int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2; ! 65: int *accptnum, *assoc_rule, *state_type, *rule_type, *rule_linenum; ! 66: int current_state_type; ! 67: int variable_trailing_context_rules; ! 68: int numtemps, numprots, protprev[MSP], protnext[MSP], prottbl[MSP]; ! 69: int protcomst[MSP], firstprot, lastprot, protsave[PROT_SAVE_SIZE]; ! 70: int numecs, nextecm[CSIZE + 1], ecgroup[CSIZE + 1], nummecs, tecfwd[CSIZE + 1]; ! 71: int tecbck[CSIZE + 1]; ! 72: int *xlation = (int *) 0; ! 73: int num_xlations; ! 74: int lastsc, current_max_scs, *scset, *scbol, *scxclu, *sceof, *actvsc; ! 75: char **scname; ! 76: int current_max_dfa_size, current_max_xpairs; ! 77: int current_max_template_xpairs, current_max_dfas; ! 78: int lastdfa, *nxt, *chk, *tnxt; ! 79: int *base, *def, *nultrans, NUL_ec, tblend, firstfree, **dss, *dfasiz; ! 80: union dfaacc_union *dfaacc; ! 81: int *accsiz, *dhash, numas; ! 82: int numsnpairs, jambase, jamstate; ! 83: int lastccl, current_maxccls, *cclmap, *ccllen, *cclng, cclreuse; ! 84: int current_max_ccl_tbl_size; ! 85: Char *ccltbl; ! 86: char *starttime, *endtime, nmstr[MAXLINE]; ! 87: int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs; ! 88: int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave; ! 89: int num_backtracking, bol_needed; ! 90: FILE *temp_action_file; ! 91: FILE *backtrack_file; ! 92: int end_of_buffer_state; ! 93: char *action_file_name = NULL; ! 94: char **input_files; ! 95: int num_input_files; ! 96: char *program_name; ! 97: ! 98: #ifndef SHORT_FILE_NAMES ! 99: static char *outfile = "lex.yy.c"; ! 100: #else ! 101: static char *outfile = "lexyy.c"; ! 102: #endif ! 103: static int outfile_created = 0; ! 104: static int use_stdout; ! 105: static char *skelname = NULL; ! 106: ! 107: ! 108: int main( argc, argv ) ! 109: int argc; ! 110: char **argv; ! 111: ! 112: { ! 113: flexinit( argc, argv ); ! 114: ! 115: readin(); ! 116: ! 117: if ( syntaxerror ) ! 118: flexend( 1 ); ! 119: ! 120: if ( yymore_really_used == REALLY_USED ) ! 121: yymore_used = true; ! 122: else if ( yymore_really_used == REALLY_NOT_USED ) ! 123: yymore_used = false; ! 124: ! 125: if ( reject_really_used == REALLY_USED ) ! 126: reject = true; ! 127: else if ( reject_really_used == REALLY_NOT_USED ) ! 128: reject = false; ! 129: ! 130: if ( performance_report ) ! 131: { ! 132: if ( interactive ) ! 133: fprintf( stderr, ! 134: "-I (interactive) entails a minor performance penalty\n" ); ! 135: ! 136: if ( yymore_used ) ! 137: fprintf( stderr, "yymore() entails a minor performance penalty\n" ); ! 138: ! 139: if ( reject ) ! 140: fprintf( stderr, "REJECT entails a large performance penalty\n" ); ! 141: ! 142: if ( variable_trailing_context_rules ) ! 143: fprintf( stderr, ! 144: "Variable trailing context rules entail a large performance penalty\n" ); ! 145: } ! 146: ! 147: if ( reject ) ! 148: real_reject = true; ! 149: ! 150: if ( variable_trailing_context_rules ) ! 151: reject = true; ! 152: ! 153: if ( (fulltbl || fullspd) && reject ) ! 154: { ! 155: if ( real_reject ) ! 156: flexerror( "REJECT cannot be used with -f or -F" ); ! 157: else ! 158: flexerror( ! 159: "variable trailing context rules cannot be used with -f or -F" ); ! 160: } ! 161: ! 162: ntod(); ! 163: ! 164: /* generate the C state transition tables from the DFA */ ! 165: make_tables(); ! 166: ! 167: /* note, flexend does not return. It exits with its argument as status. */ ! 168: ! 169: flexend( 0 ); ! 170: ! 171: /*NOTREACHED*/ ! 172: } ! 173: ! 174: ! 175: /* flexend - terminate flex ! 176: * ! 177: * synopsis ! 178: * int status; ! 179: * flexend( status ); ! 180: * ! 181: * status is exit status. ! 182: * ! 183: * note ! 184: * This routine does not return. ! 185: */ ! 186: ! 187: void flexend( status ) ! 188: int status; ! 189: ! 190: { ! 191: int tblsiz; ! 192: char *flex_gettime(); ! 193: ! 194: if ( skelfile != NULL ) ! 195: { ! 196: if ( ferror( skelfile ) ) ! 197: flexfatal( "error occurred when writing skeleton file" ); ! 198: ! 199: else if ( fclose( skelfile ) ) ! 200: flexfatal( "error occurred when closing skeleton file" ); ! 201: } ! 202: ! 203: if ( temp_action_file ) ! 204: { ! 205: if ( ferror( temp_action_file ) ) ! 206: flexfatal( "error occurred when writing temporary action file" ); ! 207: ! 208: else if ( fclose( temp_action_file ) ) ! 209: flexfatal( "error occurred when closing temporary action file" ); ! 210: ! 211: else if ( unlink( action_file_name ) ) ! 212: flexfatal( "error occurred when deleting temporary action file" ); ! 213: } ! 214: ! 215: if ( status != 0 && outfile_created ) ! 216: { ! 217: if ( ferror( stdout ) ) ! 218: flexfatal( "error occurred when writing output file" ); ! 219: ! 220: else if ( fclose( stdout ) ) ! 221: flexfatal( "error occurred when closing output file" ); ! 222: ! 223: else if ( unlink( outfile ) ) ! 224: flexfatal( "error occurred when deleting output file" ); ! 225: } ! 226: ! 227: if ( backtrack_report && backtrack_file ) ! 228: { ! 229: if ( num_backtracking == 0 ) ! 230: fprintf( backtrack_file, "No backtracking.\n" ); ! 231: else if ( fullspd || fulltbl ) ! 232: fprintf( backtrack_file, ! 233: "%d backtracking (non-accepting) states.\n", ! 234: num_backtracking ); ! 235: else ! 236: fprintf( backtrack_file, "Compressed tables always backtrack.\n" ); ! 237: ! 238: if ( ferror( backtrack_file ) ) ! 239: flexfatal( "error occurred when writing backtracking file" ); ! 240: ! 241: else if ( fclose( backtrack_file ) ) ! 242: flexfatal( "error occurred when closing backtracking file" ); ! 243: } ! 244: ! 245: if ( printstats ) ! 246: { ! 247: endtime = flex_gettime(); ! 248: ! 249: fprintf( stderr, "%s version %s usage statistics:\n", program_name, ! 250: flex_version ); ! 251: fprintf( stderr, " started at %s, finished at %s\n", ! 252: starttime, endtime ); ! 253: ! 254: fprintf( stderr, " scanner options: -" ); ! 255: ! 256: if ( backtrack_report ) ! 257: putc( 'b', stderr ); ! 258: if ( ddebug ) ! 259: putc( 'd', stderr ); ! 260: if ( interactive ) ! 261: putc( 'I', stderr ); ! 262: if ( caseins ) ! 263: putc( 'i', stderr ); ! 264: if ( ! gen_line_dirs ) ! 265: putc( 'L', stderr ); ! 266: if ( performance_report ) ! 267: putc( 'p', stderr ); ! 268: if ( spprdflt ) ! 269: putc( 's', stderr ); ! 270: if ( use_stdout ) ! 271: putc( 't', stderr ); ! 272: if ( trace ) ! 273: putc( 'T', stderr ); ! 274: if ( printstats ) ! 275: putc( 'v', stderr ); /* always true! */ ! 276: if ( csize == 256 ) ! 277: putc( '8', stderr ); ! 278: ! 279: fprintf( stderr, " -C" ); ! 280: ! 281: if ( fulltbl ) ! 282: putc( 'f', stderr ); ! 283: if ( fullspd ) ! 284: putc( 'F', stderr ); ! 285: if ( useecs ) ! 286: putc( 'e', stderr ); ! 287: if ( usemecs ) ! 288: putc( 'm', stderr ); ! 289: ! 290: if ( strcmp( skelname, _PATH_SKELETONFILE ) ) ! 291: fprintf( stderr, " -S%s", skelname ); ! 292: ! 293: putc( '\n', stderr ); ! 294: ! 295: fprintf( stderr, " %d/%d NFA states\n", lastnfa, current_mns ); ! 296: fprintf( stderr, " %d/%d DFA states (%d words)\n", lastdfa, ! 297: current_max_dfas, totnst ); ! 298: fprintf( stderr, ! 299: " %d rules\n", num_rules - 1 /* - 1 for def. rule */ ); ! 300: ! 301: if ( num_backtracking == 0 ) ! 302: fprintf( stderr, " No backtracking\n" ); ! 303: else if ( fullspd || fulltbl ) ! 304: fprintf( stderr, " %d backtracking (non-accepting) states\n", ! 305: num_backtracking ); ! 306: else ! 307: fprintf( stderr, " compressed tables always backtrack\n" ); ! 308: ! 309: if ( bol_needed ) ! 310: fprintf( stderr, " Beginning-of-line patterns used\n" ); ! 311: ! 312: fprintf( stderr, " %d/%d start conditions\n", lastsc, ! 313: current_max_scs ); ! 314: fprintf( stderr, " %d epsilon states, %d double epsilon states\n", ! 315: numeps, eps2 ); ! 316: ! 317: if ( lastccl == 0 ) ! 318: fprintf( stderr, " no character classes\n" ); ! 319: else ! 320: fprintf( stderr, ! 321: " %d/%d character classes needed %d/%d words of storage, %d reused\n", ! 322: lastccl, current_maxccls, ! 323: cclmap[lastccl] + ccllen[lastccl], ! 324: current_max_ccl_tbl_size, cclreuse ); ! 325: ! 326: fprintf( stderr, " %d state/nextstate pairs created\n", numsnpairs ); ! 327: fprintf( stderr, " %d/%d unique/duplicate transitions\n", ! 328: numuniq, numdup ); ! 329: ! 330: if ( fulltbl ) ! 331: { ! 332: tblsiz = lastdfa * numecs; ! 333: fprintf( stderr, " %d table entries\n", tblsiz ); ! 334: } ! 335: ! 336: else ! 337: { ! 338: tblsiz = 2 * (lastdfa + numtemps) + 2 * tblend; ! 339: ! 340: fprintf( stderr, " %d/%d base-def entries created\n", ! 341: lastdfa + numtemps, current_max_dfas ); ! 342: fprintf( stderr, " %d/%d (peak %d) nxt-chk entries created\n", ! 343: tblend, current_max_xpairs, peakpairs ); ! 344: fprintf( stderr, ! 345: " %d/%d (peak %d) template nxt-chk entries created\n", ! 346: numtemps * nummecs, current_max_template_xpairs, ! 347: numtemps * numecs ); ! 348: fprintf( stderr, " %d empty table entries\n", nummt ); ! 349: fprintf( stderr, " %d protos created\n", numprots ); ! 350: fprintf( stderr, " %d templates created, %d uses\n", ! 351: numtemps, tmpuses ); ! 352: } ! 353: ! 354: if ( useecs ) ! 355: { ! 356: tblsiz = tblsiz + csize; ! 357: fprintf( stderr, " %d/%d equivalence classes created\n", ! 358: numecs, csize ); ! 359: } ! 360: ! 361: if ( usemecs ) ! 362: { ! 363: tblsiz = tblsiz + numecs; ! 364: fprintf( stderr, " %d/%d meta-equivalence classes created\n", ! 365: nummecs, csize ); ! 366: } ! 367: ! 368: fprintf( stderr, " %d (%d saved) hash collisions, %d DFAs equal\n", ! 369: hshcol, hshsave, dfaeql ); ! 370: fprintf( stderr, " %d sets of reallocations needed\n", num_reallocs ); ! 371: fprintf( stderr, " %d total table entries needed\n", tblsiz ); ! 372: } ! 373: ! 374: #ifndef VMS ! 375: exit( status ); ! 376: #else ! 377: exit( status + 1 ); ! 378: #endif ! 379: } ! 380: ! 381: ! 382: /* flexinit - initialize flex ! 383: * ! 384: * synopsis ! 385: * int argc; ! 386: * char **argv; ! 387: * flexinit( argc, argv ); ! 388: */ ! 389: ! 390: void flexinit( argc, argv ) ! 391: int argc; ! 392: char **argv; ! 393: ! 394: { ! 395: int i, sawcmpflag; ! 396: char *arg, *flex_gettime(), *mktemp(); ! 397: ! 398: printstats = syntaxerror = trace = spprdflt = interactive = caseins = false; ! 399: backtrack_report = performance_report = ddebug = fulltbl = fullspd = false; ! 400: yymore_used = continued_action = reject = false; ! 401: yymore_really_used = reject_really_used = false; ! 402: gen_line_dirs = usemecs = useecs = true; ! 403: ! 404: sawcmpflag = false; ! 405: use_stdout = false; ! 406: ! 407: csize = DEFAULT_CSIZE; ! 408: ! 409: program_name = argv[0]; ! 410: ! 411: /* read flags */ ! 412: for ( --argc, ++argv; argc ; --argc, ++argv ) ! 413: { ! 414: if ( argv[0][0] != '-' || argv[0][1] == '\0' ) ! 415: break; ! 416: ! 417: arg = argv[0]; ! 418: ! 419: for ( i = 1; arg[i] != '\0'; ++i ) ! 420: switch ( arg[i] ) ! 421: { ! 422: case 'b': ! 423: backtrack_report = true; ! 424: break; ! 425: ! 426: case 'c': ! 427: fprintf( stderr, ! 428: "%s: Assuming use of deprecated -c flag is really intended to be -C\n", ! 429: program_name ); ! 430: ! 431: /* fall through */ ! 432: ! 433: case 'C': ! 434: if ( i != 1 ) ! 435: flexerror( "-C flag must be given separately" ); ! 436: ! 437: if ( ! sawcmpflag ) ! 438: { ! 439: useecs = false; ! 440: usemecs = false; ! 441: fulltbl = false; ! 442: sawcmpflag = true; ! 443: } ! 444: ! 445: for ( ++i; arg[i] != '\0'; ++i ) ! 446: switch ( arg[i] ) ! 447: { ! 448: case 'e': ! 449: useecs = true; ! 450: break; ! 451: ! 452: case 'F': ! 453: fullspd = true; ! 454: break; ! 455: ! 456: case 'f': ! 457: fulltbl = true; ! 458: break; ! 459: ! 460: case 'm': ! 461: usemecs = true; ! 462: break; ! 463: ! 464: default: ! 465: lerrif( "unknown -C option '%c'", ! 466: (int) arg[i] ); ! 467: break; ! 468: } ! 469: ! 470: goto get_next_arg; ! 471: ! 472: case 'd': ! 473: ddebug = true; ! 474: break; ! 475: ! 476: case 'f': ! 477: useecs = usemecs = false; ! 478: fulltbl = true; ! 479: break; ! 480: ! 481: case 'F': ! 482: useecs = usemecs = false; ! 483: fullspd = true; ! 484: break; ! 485: ! 486: case 'I': ! 487: interactive = true; ! 488: break; ! 489: ! 490: case 'i': ! 491: caseins = true; ! 492: break; ! 493: ! 494: case 'L': ! 495: gen_line_dirs = false; ! 496: break; ! 497: ! 498: case 'n': ! 499: /* stupid do-nothing deprecated option */ ! 500: break; ! 501: ! 502: case 'p': ! 503: performance_report = true; ! 504: break; ! 505: ! 506: case 'S': ! 507: if ( i != 1 ) ! 508: flexerror( "-S flag must be given separately" ); ! 509: ! 510: skelname = arg + i + 1; ! 511: goto get_next_arg; ! 512: ! 513: case 's': ! 514: spprdflt = true; ! 515: break; ! 516: ! 517: case 't': ! 518: use_stdout = true; ! 519: break; ! 520: ! 521: case 'T': ! 522: trace = true; ! 523: break; ! 524: ! 525: case 'v': ! 526: printstats = true; ! 527: break; ! 528: ! 529: case '8': ! 530: csize = CSIZE; ! 531: break; ! 532: ! 533: default: ! 534: lerrif( "unknown flag '%c'", (int) arg[i] ); ! 535: break; ! 536: } ! 537: ! 538: get_next_arg: /* used by -C and -S flags in lieu of a "continue 2" control */ ! 539: ; ! 540: } ! 541: ! 542: if ( (fulltbl || fullspd) && usemecs ) ! 543: flexerror( "full table and -Cm don't make sense together" ); ! 544: ! 545: if ( (fulltbl || fullspd) && interactive ) ! 546: flexerror( "full table and -I are (currently) incompatible" ); ! 547: ! 548: if ( fulltbl && fullspd ) ! 549: flexerror( "full table and -F are mutually exclusive" ); ! 550: ! 551: if ( ! skelname ) ! 552: { ! 553: static char skeleton_name_storage[400]; ! 554: ! 555: skelname = skeleton_name_storage; ! 556: (void) strcpy( skelname, _PATH_SKELETONFILE ); ! 557: } ! 558: ! 559: if ( ! use_stdout ) ! 560: { ! 561: FILE *prev_stdout = freopen( outfile, "w", stdout ); ! 562: ! 563: if ( prev_stdout == NULL ) ! 564: lerrsf( "could not create %s", outfile ); ! 565: ! 566: outfile_created = 1; ! 567: } ! 568: ! 569: num_input_files = argc; ! 570: input_files = argv; ! 571: set_input_file( num_input_files > 0 ? input_files[0] : NULL ); ! 572: ! 573: if ( backtrack_report ) ! 574: { ! 575: #ifndef SHORT_FILE_NAMES ! 576: backtrack_file = fopen( "lex.backtrack", "w" ); ! 577: #else ! 578: backtrack_file = fopen( "lex.bck", "w" ); ! 579: #endif ! 580: ! 581: if ( backtrack_file == NULL ) ! 582: flexerror( "could not create lex.backtrack" ); ! 583: } ! 584: ! 585: else ! 586: backtrack_file = NULL; ! 587: ! 588: ! 589: lastccl = 0; ! 590: lastsc = 0; ! 591: ! 592: /* initialize the statistics */ ! 593: starttime = flex_gettime(); ! 594: ! 595: if ( (skelfile = fopen( skelname, "r" )) == NULL ) ! 596: lerrsf( "can't open skeleton file %s", skelname ); ! 597: ! 598: #ifdef SYS_V ! 599: action_file_name = tmpnam( NULL ); ! 600: #endif ! 601: ! 602: if ( action_file_name == NULL ) ! 603: { ! 604: static char temp_action_file_name[32]; ! 605: ! 606: #ifndef SHORT_FILE_NAMES ! 607: (void) strcpy( temp_action_file_name, "/tmp/flexXXXXXX" ); ! 608: #else ! 609: (void) strcpy( temp_action_file_name, "flexXXXXXX.tmp" ); ! 610: #endif ! 611: (void) mktemp( temp_action_file_name ); ! 612: ! 613: action_file_name = temp_action_file_name; ! 614: } ! 615: ! 616: if ( (temp_action_file = fopen( action_file_name, "w" )) == NULL ) ! 617: lerrsf( "can't open temporary action file %s", action_file_name ); ! 618: ! 619: lastdfa = lastnfa = num_rules = numas = numsnpairs = tmpuses = 0; ! 620: numecs = numeps = eps2 = num_reallocs = hshcol = dfaeql = totnst = 0; ! 621: numuniq = numdup = hshsave = eofseen = datapos = dataline = 0; ! 622: num_backtracking = onesp = numprots = 0; ! 623: variable_trailing_context_rules = bol_needed = false; ! 624: ! 625: linenum = sectnum = 1; ! 626: firstprot = NIL; ! 627: ! 628: /* used in mkprot() so that the first proto goes in slot 1 ! 629: * of the proto queue ! 630: */ ! 631: lastprot = 1; ! 632: ! 633: if ( useecs ) ! 634: { /* set up doubly-linked equivalence classes */ ! 635: /* We loop all the way up to csize, since ecgroup[csize] is the ! 636: * position used for NUL characters ! 637: */ ! 638: ecgroup[1] = NIL; ! 639: ! 640: for ( i = 2; i <= csize; ++i ) ! 641: { ! 642: ecgroup[i] = i - 1; ! 643: nextecm[i - 1] = i; ! 644: } ! 645: ! 646: nextecm[csize] = NIL; ! 647: } ! 648: ! 649: else ! 650: { /* put everything in its own equivalence class */ ! 651: for ( i = 1; i <= csize; ++i ) ! 652: { ! 653: ecgroup[i] = i; ! 654: nextecm[i] = BAD_SUBSCRIPT; /* to catch errors */ ! 655: } ! 656: } ! 657: ! 658: set_up_initial_allocations(); ! 659: } ! 660: ! 661: ! 662: /* readin - read in the rules section of the input file(s) ! 663: * ! 664: * synopsis ! 665: * readin(); ! 666: */ ! 667: ! 668: void readin() ! 669: ! 670: { ! 671: skelout(); ! 672: ! 673: if ( ddebug ) ! 674: puts( "#define FLEX_DEBUG" ); ! 675: ! 676: if ( csize == 256 ) ! 677: puts( "#define YY_CHAR unsigned char" ); ! 678: else ! 679: puts( "#define YY_CHAR char" ); ! 680: ! 681: line_directive_out( stdout ); ! 682: ! 683: if ( yyparse() ) ! 684: { ! 685: pinpoint_message( "fatal parse error" ); ! 686: flexend( 1 ); ! 687: } ! 688: ! 689: if ( xlation ) ! 690: { ! 691: numecs = ecs_from_xlation( ecgroup ); ! 692: useecs = true; ! 693: } ! 694: ! 695: else if ( useecs ) ! 696: numecs = cre8ecs( nextecm, ecgroup, csize ); ! 697: ! 698: else ! 699: numecs = csize; ! 700: ! 701: /* now map the equivalence class for NUL to its expected place */ ! 702: ecgroup[0] = ecgroup[csize]; ! 703: NUL_ec = abs( ecgroup[0] ); ! 704: ! 705: if ( useecs ) ! 706: ccl2ecl(); ! 707: } ! 708: ! 709: ! 710: ! 711: /* set_up_initial_allocations - allocate memory for internal tables */ ! 712: ! 713: void set_up_initial_allocations() ! 714: ! 715: { ! 716: current_mns = INITIAL_MNS; ! 717: firstst = allocate_integer_array( current_mns ); ! 718: lastst = allocate_integer_array( current_mns ); ! 719: finalst = allocate_integer_array( current_mns ); ! 720: transchar = allocate_integer_array( current_mns ); ! 721: trans1 = allocate_integer_array( current_mns ); ! 722: trans2 = allocate_integer_array( current_mns ); ! 723: accptnum = allocate_integer_array( current_mns ); ! 724: assoc_rule = allocate_integer_array( current_mns ); ! 725: state_type = allocate_integer_array( current_mns ); ! 726: ! 727: current_max_rules = INITIAL_MAX_RULES; ! 728: rule_type = allocate_integer_array( current_max_rules ); ! 729: rule_linenum = allocate_integer_array( current_max_rules ); ! 730: ! 731: current_max_scs = INITIAL_MAX_SCS; ! 732: scset = allocate_integer_array( current_max_scs ); ! 733: scbol = allocate_integer_array( current_max_scs ); ! 734: scxclu = allocate_integer_array( current_max_scs ); ! 735: sceof = allocate_integer_array( current_max_scs ); ! 736: scname = allocate_char_ptr_array( current_max_scs ); ! 737: actvsc = allocate_integer_array( current_max_scs ); ! 738: ! 739: current_maxccls = INITIAL_MAX_CCLS; ! 740: cclmap = allocate_integer_array( current_maxccls ); ! 741: ccllen = allocate_integer_array( current_maxccls ); ! 742: cclng = allocate_integer_array( current_maxccls ); ! 743: ! 744: current_max_ccl_tbl_size = INITIAL_MAX_CCL_TBL_SIZE; ! 745: ccltbl = allocate_character_array( current_max_ccl_tbl_size ); ! 746: ! 747: current_max_dfa_size = INITIAL_MAX_DFA_SIZE; ! 748: ! 749: current_max_xpairs = INITIAL_MAX_XPAIRS; ! 750: nxt = allocate_integer_array( current_max_xpairs ); ! 751: chk = allocate_integer_array( current_max_xpairs ); ! 752: ! 753: current_max_template_xpairs = INITIAL_MAX_TEMPLATE_XPAIRS; ! 754: tnxt = allocate_integer_array( current_max_template_xpairs ); ! 755: ! 756: current_max_dfas = INITIAL_MAX_DFAS; ! 757: base = allocate_integer_array( current_max_dfas ); ! 758: def = allocate_integer_array( current_max_dfas ); ! 759: dfasiz = allocate_integer_array( current_max_dfas ); ! 760: accsiz = allocate_integer_array( current_max_dfas ); ! 761: dhash = allocate_integer_array( current_max_dfas ); ! 762: dss = allocate_int_ptr_array( current_max_dfas ); ! 763: dfaacc = allocate_dfaacc_union( current_max_dfas ); ! 764: ! 765: nultrans = (int *) 0; ! 766: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.