Annotation of coherent/b/bin/yacc/y4.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * pretty print routines
        !             3:  */
        !             4: 
        !             5: #include <stdarg.h>
        !             6: #include "yacc.h"
        !             7: 
        !             8: static char ctab[] = " |";
        !             9: listgram()
        !            10: {
        !            11:        register i, k, j;
        !            12:        register struct sym *sp;
        !            13:        struct prod *pp;
        !            14: 
        !            15:        if( !verbose )
        !            16:                return;
        !            17:        fprintf(listout,"Input grammar:\n\n");
        !            18:        for(i=0; i<nnonterm; i++) {
        !            19:                sp = ntrmptr[i];
        !            20:                fprintf(listout,"%s:\n\n", sp->s_name);
        !            21:                for(j=0; j<sp->s_nprods; j++ ) {
        !            22:                        pp = sp->s_prods[j];
        !            23:                        fprintf(listout, "%d:\t%c ", pp->p_prodno, ctab[j!=0]);
        !            24:                        for(k = 0 ; PROD_RIGHT (pp) [k] >= 0 ; k ++)
        !            25:                                fprintf (listout, "%s ",
        !            26:                                         ptosym (PROD_RIGHT (pp) [k]));
        !            27:                        fprintf(listout, "\n");
        !            28:                }
        !            29:                fprintf(listout,"\t;\n\n");
        !            30:        }
        !            31: }
        !            32: 
        !            33: prstate(i, f)
        !            34: FILE *f;
        !            35: {
        !            36:        register j;
        !            37:        register struct sitem *itp;
        !            38: 
        !            39:        itp = items[i];
        !            40:        fprintf(f, "State %d:\n\n", i);
        !            41:        for(j=0; j<itp->i_nitems; j++)
        !            42:                pritem(itp->i_items[j],f);
        !            43:        fprintf(f, "\n");
        !            44: }
        !            45: 
        !            46: pritem(ip,f)
        !            47: register int *ip;
        !            48: FILE *f;
        !            49: {
        !            50:        register int *pp;
        !            51: 
        !            52:        pp = ip;
        !            53:        do ; while( *--pp >= 0 );
        !            54:        fprintf(f,"\t");
        !            55:        fprintf(f, "%s <- ", ptosym(-*pp++));
        !            56:        while( pp!=ip ) {
        !            57:                fprintf(f, "%s ", ptosym(*pp++));
        !            58:        }
        !            59:        fprintf(f, "_ ");
        !            60:        while( *pp!=-1 )
        !            61:                fprintf(f, "%s ", ptosym(*pp++));
        !            62:        fprintf(f,"\n");
        !            63: }
        !            64: 
        !            65: char *
        !            66: ptosym(n)
        !            67: register n;
        !            68: {
        !            69:        if (n >= NTBASE)
        !            70:                return ntrmptr [n - NTBASE]->s_name;
        !            71:        else
        !            72:                return trmptr [n]->s_name;
        !            73: }
        !            74: 
        !            75: char *
        !            76: prsym(c)
        !            77: register c;
        !            78: {
        !            79:        static char s[10];
        !            80: 
        !            81:        if( c<040 || c>= 0177 ) {
        !            82:                switch( c ) {
        !            83:                case '\n':
        !            84:                        sprintf(s, "'\\n'");
        !            85:                        break;
        !            86: 
        !            87:                case '\r':
        !            88:                        sprintf(s, "'\\r'");
        !            89:                        break;
        !            90: 
        !            91:                case '\t':
        !            92:                        sprintf(s, "'\\t'");
        !            93:                        break;
        !            94: 
        !            95:                case '\b':
        !            96:                        sprintf(s,"'\\b'");
        !            97:                        break;
        !            98: 
        !            99:                case '\f':
        !           100:                        sprintf(s, "'\\f'");
        !           101:                        break;
        !           102: 
        !           103:                case '\0':
        !           104:                        sprintf(s, "'\\0'");
        !           105:                        break;
        !           106: 
        !           107:                default:
        !           108:                        sprintf(s, "'\\%3o'", c);               /* MWC DSC */
        !           109:                }
        !           110:        } else
        !           111:                sprintf(s, "'%c'", c);
        !           112:        return( s );
        !           113: }
        !           114: 
        !           115: options(argc, argv)
        !           116: int argc;
        !           117: char *argv[];
        !           118: {
        !           119:        register i;
        !           120:        register char *ap;
        !           121: 
        !           122:        for(i=1; i<argc; i++) {
        !           123:                ap = argv[i];
        !           124:                if( ap[0]!='-' || strcmp(ap,"-")==0 )
        !           125:                        gramy = argv[i];
        !           126:                else
        !           127:                        if( strcmp(ap,"-v")==0 )
        !           128:                                verbose++;
        !           129:                else
        !           130:                        if( strcmp(ap,"-l")==0 ) {
        !           131:                                verbose++;
        !           132:                                youtput = nextarg(argv[++i]);
        !           133:                        }
        !           134:                else
        !           135:                        if( strcmp(ap, "-st")==0 ) {
        !           136:                                pstat++;
        !           137:                        }
        !           138:                else
        !           139:                        if( strcmp(ap,"-hdr")==0 ) {
        !           140:                                ytabh = nextarg(argv[++i]);
        !           141:                        }
        !           142:                else
        !           143:                        if( strcmp(ap,"-d")==0 ) {
        !           144:                                yydebug++;
        !           145:                                verbose++;
        !           146:                        }
        !           147:                else
        !           148:                        if( strcmp(ap, "-items")==0 )
        !           149:                                maxitem = getnum(argv[++i]);
        !           150:                else
        !           151:                        if( strcmp(ap, "-sprod")==0 )
        !           152:                                maxprodl = getnum(argv[++i]);
        !           153:                else
        !           154:                        if( strcmp(ap,"-prods")==0 )
        !           155:                                maxprod = getnum(argv[++i]);
        !           156:                else
        !           157:                        if( strcmp(ap,"-reds")==0 )
        !           158:                                maxreds = getnum(argv[++i]);
        !           159:                else
        !           160:                        if( strcmp(ap,"-terms")==0 )
        !           161:                                maxterm = getnum(argv[++i]);
        !           162:                else
        !           163:                        if( strcmp(ap,"-nterms")==0 )
        !           164:                                maxnterm = getnum(argv[++i]);
        !           165:                else
        !           166:                        if( strcmp(ap,"-states")==0 )
        !           167:                                maxstates = getnum(argv[++i]);
        !           168:                else
        !           169:                        if( strcmp(ap,"-types")==0 )
        !           170:                                maxtype = getnum(argv[++i]);
        !           171:                else
        !           172:                        usage();
        !           173:                if (maxterm >= LSETSIZE * CHAR_BIT)
        !           174:                        yyerror (NLNO|FATAL,
        !           175:                                 "The maximum -terms value is %d\n",
        !           176:                                 LSETSIZE * CHAR_BIT);
        !           177:        }
        !           178: /*
        !           179:  *     if( (maxterm+maxnterm+maxtype) >= MAXSYM )
        !           180:  *             yyerror(NLNO|FATAL, "increase MAXSYM");
        !           181:  *
        !           182:  * MWC DSC - make it all flexible with maxsym - it will also mean less memory
        !           183:  * allocated, in most cases.
        !           184:  */
        !           185:        prdptr = (struct prod **) yalloc (maxprod, sizeof (* prdptr));
        !           186:        symtab = (struct sym **)
        !           187:                        yalloc(maxsym+1, sizeof *symtab);       /* MWC DSC */
        !           188:        ntrmptr = (struct sym **) yalloc (maxnterm, sizeof *ntrmptr);
        !           189:        trmptr = (struct sym **) yalloc (maxterm, sizeof *trmptr);
        !           190:        typeptr = (struct sym **) yalloc (maxtype, sizeof *typeptr);
        !           191: 
        !           192:        nitprod = (struct prod *) yalloc (1, PROD_TOTAL_SIZE (maxprodl));
        !           193:        PROD_EXTRA_INIT (nitprod);
        !           194: 
        !           195:        nititem = (struct sitem *) yalloc (1, SITEM_TOTAL_SIZE (maxitem));
        !           196:        SITEM_EXTRA_INIT (nititem);
        !           197: 
        !           198:        states = (struct state *) yalloc(maxstates, sizeof *states);
        !           199:        items = (struct sitem **) yalloc(maxstates, sizeof (* items));
        !           200: }
        !           201: 
        !           202: yyerror(type, format /* , ... */)
        !           203: char * format;
        !           204: {
        !           205:        va_list         argp;
        !           206: 
        !           207:        if( type&FATAL )
        !           208:                fprintf(stderr, "fatal error: ");
        !           209:        if( (type&NLNO)==0 )
        !           210:                fprintf(stderr, "line %d: ", yyline);
        !           211: 
        !           212:        /* Look ma! No more '%r'! */
        !           213:        va_start (argp, format);
        !           214:        vfprintf (stderr, format, argp);
        !           215:        va_end (argp);
        !           216: 
        !           217:        fprintf(stderr, "\n");
        !           218:        if( type&FATAL )
        !           219:                cleanup(2);
        !           220:        if( (type&WARNING)==0 )
        !           221:                nerrors++;
        !           222:        if( type&SKIP )
        !           223:                while( llgetc()!='\n' )         /* MWC DSC */
        !           224:                        ;
        !           225: }
        !           226: 
        !           227: getnum(s)
        !           228: char *s;
        !           229: {
        !           230:        if( s==NULL )
        !           231:                yyerror(NLNO|FATAL, "missing argument");
        !           232:        return( atoi(s) );
        !           233: }
        !           234: 
        !           235: char *                 /* MWC DSC */
        !           236: nextarg(s)
        !           237: char *s;
        !           238: {
        !           239:        if( s==NULL )
        !           240:                yyerror(NLNO|FATAL, "missing file name");
        !           241:        return( s );
        !           242: }
        !           243: 
        !           244: usage()
        !           245: {
        !           246:        fprintf(stderr, "Usage: yacc [options] [parameters] grammar\n");
        !           247:        fprintf(stderr, "Options: -v -d -l file -hdr file -st\n");
        !           248:        fprintf(stderr,"Parameters: -prods # -terms # - nterms # -states # -types #\n");
        !           249:        exit(1);
        !           250: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.