home *** CD-ROM | disk | FTP | other *** search
-
- # line 2 "dex.y"
- /************************************************************************
- * *
- * Copyright (c) 1982, Fred Fish *
- * All Rights Reserved *
- * *
- * This software and/or documentation is released for public *
- * distribution for personal, non-commercial use only. *
- * Limited rights to use, modify, and redistribute are hereby *
- * granted for non-commercial purposes, provided that all *
- * copyright notices remain intact and all changes are clearly *
- * documented. The author makes no warranty of any kind with *
- * respect to this product and explicitly disclaims any implied *
- * warranties of merchantability or fitness for any particular *
- * purpose. *
- * *
- ************************************************************************
- */
-
- # line 61 "dex.y"
- #include <stdio.h>
-
- #define TRUE 1
- #define FALSE 0
-
- char savedtext[256]; /* Text for current line */
-
- extern char *infile; /* Input file name if not stdin */
- extern int linenum; /* Current input file line number */
- extern FILE *infp; /* Input stream */
- extern int debug; /* Debug variable */
-
- # define BSTART 257
- # define TEXT 258
- # define JUNK 259
- # define HSTART 260
- # define FSTART 261
- # define UFSTART 262
- # define NEWLINE 263
- #define yyclearin yychar = -1
- #define yyerrok yyerrflag = 0
- extern int yychar;
- extern int yyerrflag;
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 150
- #endif
- #ifndef YYSTYPE
- #define YYSTYPE int
- #endif
- YYSTYPE yylval, yyval;
- typedef int yytabelem;
- # define YYERRCODE 256
-
- # line 154 "dex.y"
-
-
- #include "dex.lo" /* LEX output; renamed from lex.yy.c */
-
- yywrap () /* Thought this was in library */
- {
- return(1);
- }
-
- yyerror(sp)
- char *sp;
- {
- fprintf(stderr,"%s: ",infile); /* What file */
- fprintf(stderr,"line %d: ",linenum); /* Where in file */
- fprintf(stderr,"%s: ",sp); /* What was wrong */
- fprintf(stderr,"%s\n",yytext); /* What it choked on */
- }
-
- yytabelem yyexca[] ={
- -1, 1,
- 0, -1,
- -2, 0,
- };
- # define YYNPROD 18
- # define YYLAST 31
- yytabelem yyact[]={
-
- 11, 14, 8, 10, 12, 13, 14, 18, 9, 17,
- 7, 2, 16, 15, 6, 5, 4, 3, 1, 0,
- 19, 0, 20, 21, 0, 0, 22, 0, 0, 23,
- 24 };
- yytabelem yypact[]={
-
- -257, -257, -1000, -262, -1000, -1000, -1000, -1000, -1000, -1000,
- -251, -262, -251, -251, -1000, -1000, -1000, -262, -1000, -1000,
- -262, -262, -1000, -1000, -1000 };
- yytabelem yypgo[]={
-
- 0, 18, 11, 17, 16, 15, 14, 10, 8, 9 };
- yytabelem yyr1[]={
-
- 0, 1, 1, 1, 2, 2, 2, 2, 2, 3,
- 3, 3, 4, 5, 6, 7, 8, 9 };
- yytabelem yyr2[]={
-
- 0, 3, 5, 1, 3, 3, 3, 3, 3, 3,
- 3, 5, 7, 5, 7, 7, 3, 3 };
- yytabelem yychk[]={
-
- -1000, -1, -2, -3, -4, -5, -6, -7, 259, -8,
- 260, 257, 261, 262, 263, -2, -8, -9, 258, -8,
- -9, -9, -8, -8, -8 };
- yytabelem yydef[]={
-
- 3, -2, 1, 4, 5, 6, 7, 8, 9, 10,
- 0, 0, 0, 0, 16, 2, 11, 0, 17, 13,
- 0, 0, 12, 14, 15 };
- typedef struct { char *t_name; int t_val; } yytoktype;
- #ifndef YYDEBUG
- # define YYDEBUG 0 /* don't allow debugging */
- #endif
-
- #if YYDEBUG
-
- yytoktype yytoks[] =
- {
- "BSTART", 257,
- "TEXT", 258,
- "JUNK", 259,
- "HSTART", 260,
- "FSTART", 261,
- "UFSTART", 262,
- "NEWLINE", 263,
- "-unknown-", -1 /* ends search */
- };
-
- char * yyreds[] =
- {
- "-no such reduction-",
- "file : line",
- "file : file line",
- "file : /* empty */",
- "line : junk",
- "line : id_line",
- "line : blank_line",
- "line : filled_line",
- "line : unfilled_line",
- "junk : JUNK",
- "junk : newline",
- "junk : junk newline",
- "id_line : HSTART text newline",
- "blank_line : BSTART newline",
- "filled_line : FSTART text newline",
- "unfilled_line : UFSTART text newline",
- "newline : NEWLINE",
- "text : TEXT",
- };
- #endif /* YYDEBUG */
- /* @(#)yaccpar 1.9 */
-
- /*
- ** Skeleton parser driver for yacc output
- */
-
- /*
- ** yacc user known macros and defines
- */
- #define YYERROR goto yyerrlab
- #define YYACCEPT return(0)
- #define YYABORT return(1)
- #define YYBACKUP( newtoken, newvalue )\
- {\
- if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
- {\
- yyerror( "syntax error - cannot backup" );\
- goto yyerrlab;\
- }\
- yychar = newtoken;\
- yystate = *yyps;\
- yylval = newvalue;\
- goto yynewstate;\
- }
- #define YYRECOVERING() (!!yyerrflag)
- #ifndef YYDEBUG
- # define YYDEBUG 1 /* make debugging available */
- #endif
-
- /*
- ** user known globals
- */
- int yydebug; /* set to 1 to get debugging */
-
- /*
- ** driver internal defines
- */
- #define YYFLAG (-1000)
-
- /*
- ** global variables used by the parser
- */
- YYSTYPE yyv[ YYMAXDEPTH ]; /* value stack */
- int yys[ YYMAXDEPTH ]; /* state stack */
-
- YYSTYPE *yypv; /* top of value stack */
- int *yyps; /* top of state stack */
-
- int yystate; /* current state */
- int yytmp; /* extra var (lasts between blocks) */
-
- int yynerrs; /* number of errors */
- int yyerrflag; /* error recovery flag */
- int yychar; /* current input token number */
-
-
-
- /*
- ** yyparse - return 0 if worked, 1 if syntax error not recovered from
- */
- int
- yyparse()
- {
- register YYSTYPE *yypvt; /* top of value stack for $vars */
-
- /*
- ** Initialize externals - yyparse may be called more than once
- */
- yypv = &yyv[-1];
- yyps = &yys[-1];
- yystate = 0;
- yytmp = 0;
- yynerrs = 0;
- yyerrflag = 0;
- yychar = -1;
-
- goto yystack;
- {
- register YYSTYPE *yy_pv; /* top of value stack */
- register int *yy_ps; /* top of state stack */
- register int yy_state; /* current state */
- register int yy_n; /* internal state number info */
-
- /*
- ** get globals into registers.
- ** branch to here only if YYBACKUP was called.
- */
- yynewstate:
- yy_pv = yypv;
- yy_ps = yyps;
- yy_state = yystate;
- goto yy_newstate;
-
- /*
- ** get globals into registers.
- ** either we just started, or we just finished a reduction
- */
- yystack:
- yy_pv = yypv;
- yy_ps = yyps;
- yy_state = yystate;
-
- /*
- ** top of for (;;) loop while no reductions done
- */
- yy_stack:
- /*
- ** put a state and value onto the stacks
- */
- #if YYDEBUG
- /*
- ** if debugging, look up token value in list of value vs.
- ** name pairs. 0 and negative (-1) are special values.
- ** Note: linear search is used since time is not a real
- ** consideration while debugging.
- */
- if ( yydebug )
- {
- register int yy_i;
-
- printf( "State %d, token ", yy_state );
- if ( yychar == 0 )
- printf( "end-of-file\n" );
- else if ( yychar < 0 )
- printf( "-none-\n" );
- else
- {
- for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val == yychar )
- break;
- }
- printf( "%s\n", yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- if ( ++yy_ps >= &yys[ YYMAXDEPTH ] ) /* room on stack? */
- {
- yyerror( "yacc stack overflow" );
- YYABORT;
- }
- *yy_ps = yy_state;
- *++yy_pv = yyval;
-
- /*
- ** we have a new state - find out what to do
- */
- yy_newstate:
- if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
- goto yydefault; /* simple state */
- #if YYDEBUG
- /*
- ** if debugging, need to mark whether new token grabbed
- */
- yytmp = yychar < 0;
- #endif
- if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
- yychar = 0; /* reached EOF */
- #if YYDEBUG
- if ( yydebug && yytmp )
- {
- register int yy_i;
-
- printf( "Received token " );
- if ( yychar == 0 )
- printf( "end-of-file\n" );
- else if ( yychar < 0 )
- printf( "-none-\n" );
- else
- {
- for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val == yychar )
- break;
- }
- printf( "%s\n", yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
- goto yydefault;
- if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
- {
- yychar = -1;
- yyval = yylval;
- yy_state = yy_n;
- if ( yyerrflag > 0 )
- yyerrflag--;
- goto yy_stack;
- }
-
- yydefault:
- if ( ( yy_n = yydef[ yy_state ] ) == -2 )
- {
- #if YYDEBUG
- yytmp = yychar < 0;
- #endif
- if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
- yychar = 0; /* reached EOF */
- #if YYDEBUG
- if ( yydebug && yytmp )
- {
- register int yy_i;
-
- printf( "Received token " );
- if ( yychar == 0 )
- printf( "end-of-file\n" );
- else if ( yychar < 0 )
- printf( "-none-\n" );
- else
- {
- for ( yy_i = 0;
- yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val
- == yychar )
- {
- break;
- }
- }
- printf( "%s\n", yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- /*
- ** look through exception table
- */
- {
- register int *yyxi = yyexca;
-
- while ( ( *yyxi != -1 ) ||
- ( yyxi[1] != yy_state ) )
- {
- yyxi += 2;
- }
- while ( ( *(yyxi += 2) >= 0 ) &&
- ( *yyxi != yychar ) )
- ;
- if ( ( yy_n = yyxi[1] ) < 0 )
- YYACCEPT;
- }
- }
-
- /*
- ** check for syntax error
- */
- if ( yy_n == 0 ) /* have an error */
- {
- /* no worry about speed here! */
- switch ( yyerrflag )
- {
- case 0: /* new error */
- yyerror( "syntax error" );
- goto skip_init;
- yyerrlab:
- /*
- ** get globals into registers.
- ** we have a user generated syntax type error
- */
- yy_pv = yypv;
- yy_ps = yyps;
- yy_state = yystate;
- yynerrs++;
- skip_init:
- case 1:
- case 2: /* incompletely recovered error */
- /* try again... */
- yyerrflag = 3;
- /*
- ** find state where "error" is a legal
- ** shift action
- */
- while ( yy_ps >= yys )
- {
- yy_n = yypact[ *yy_ps ] + YYERRCODE;
- if ( yy_n >= 0 && yy_n < YYLAST &&
- yychk[yyact[yy_n]] == YYERRCODE) {
- /*
- ** simulate shift of "error"
- */
- yy_state = yyact[ yy_n ];
- goto yy_stack;
- }
- /*
- ** current state has no shift on
- ** "error", pop stack
- */
- #if YYDEBUG
- # define _POP_ "Error recovery pops state %d, uncovers state %d\n"
- if ( yydebug )
- printf( _POP_, *yy_ps,
- yy_ps[-1] );
- # undef _POP_
- #endif
- yy_ps--;
- yy_pv--;
- }
- /*
- ** there is no state on stack with "error" as
- ** a valid shift. give up.
- */
- YYABORT;
- case 3: /* no shift yet; eat a token */
- #if YYDEBUG
- /*
- ** if debugging, look up token in list of
- ** pairs. 0 and negative shouldn't occur,
- ** but since timing doesn't matter when
- ** debugging, it doesn't hurt to leave the
- ** tests here.
- */
- if ( yydebug )
- {
- register int yy_i;
-
- printf( "Error recovery discards " );
- if ( yychar == 0 )
- printf( "token end-of-file\n" );
- else if ( yychar < 0 )
- printf( "token -none-\n" );
- else
- {
- for ( yy_i = 0;
- yytoks[yy_i].t_val >= 0;
- yy_i++ )
- {
- if ( yytoks[yy_i].t_val
- == yychar )
- {
- break;
- }
- }
- printf( "token %s\n",
- yytoks[yy_i].t_name );
- }
- }
- #endif /* YYDEBUG */
- if ( yychar == 0 ) /* reached EOF. quit */
- YYABORT;
- yychar = -1;
- goto yy_newstate;
- }
- }/* end if ( yy_n == 0 ) */
- /*
- ** reduction by production yy_n
- ** put stack tops, etc. so things right after switch
- */
- #if YYDEBUG
- /*
- ** if debugging, print the string that is the user's
- ** specification of the reduction which is just about
- ** to be done.
- */
- if ( yydebug )
- printf( "Reduce by (%d) \"%s\"\n",
- yy_n, yyreds[ yy_n ] );
- #endif
- yytmp = yy_n; /* value to switch over */
- yypvt = yy_pv; /* $vars top of value stack */
- /*
- ** Look in goto table for next state
- ** Sorry about using yy_state here as temporary
- ** register variable, but why not, if it works...
- ** If yyr2[ yy_n ] doesn't have the low order bit
- ** set, then there is no action to be done for
- ** this reduction. So, no saving & unsaving of
- ** registers done. The only difference between the
- ** code just after the if and the body of the if is
- ** the goto yy_stack in the body. This way the test
- ** can be made before the choice of what to do is needed.
- */
- {
- /* length of production doubled with extra bit */
- register int yy_len = yyr2[ yy_n ];
-
- if ( !( yy_len & 01 ) )
- {
- yy_len >>= 1;
- yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
- yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
- *( yy_ps -= yy_len ) + 1;
- if ( yy_state >= YYLAST ||
- yychk[ yy_state =
- yyact[ yy_state ] ] != -yy_n )
- {
- yy_state = yyact[ yypgo[ yy_n ] ];
- }
- goto yy_stack;
- }
- yy_len >>= 1;
- yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
- yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
- *( yy_ps -= yy_len ) + 1;
- if ( yy_state >= YYLAST ||
- yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
- {
- yy_state = yyact[ yypgo[ yy_n ] ];
- }
- }
- /* save until reenter driver code */
- yystate = yy_state;
- yyps = yy_ps;
- yypv = yy_pv;
- }
- /*
- ** code supplied by user is placed in this switch
- */
- switch( yytmp )
- {
-
- case 1:
- # line 80 "dex.y"
- {if(debug){printf("yyparse: file\n");}} break;
- case 2:
- # line 82 "dex.y"
- {if(debug){printf("yyparse: file\n");}} break;
- case 3:
- # line 84 "dex.y"
- {if(debug){printf("yyparse: file\n");}} break;
- case 4:
- # line 88 "dex.y"
- {
- if(debug){printf("yyparse: line\n");}
- reset_section();
- } break;
- case 5:
- # line 93 "dex.y"
- {if(debug){printf("yyparse: line\n");}} break;
- case 6:
- # line 95 "dex.y"
- {if(debug){printf("yyparse: line\n");}} break;
- case 7:
- # line 97 "dex.y"
- {if(debug){printf("yyparse: line\n");}} break;
- case 8:
- # line 99 "dex.y"
- {if(debug){printf("yyparse: line\n");}} break;
- case 9:
- # line 103 "dex.y"
- {if(debug){printf("yyparse: junk\n");}} break;
- case 10:
- # line 105 "dex.y"
- {if(debug){printf("yyparse: junk\n");}} break;
- case 11:
- # line 107 "dex.y"
- {if(debug){printf("yyparse: junk\n");}} break;
- case 12:
- # line 111 "dex.y"
- {
- {if(debug){printf("yyparse: id_line\n");}}
- set_section(savedtext);
- } break;
- case 13:
- # line 119 "dex.y"
- {
- {if(debug){printf("yyparse: blank_line\n");}}
- emit_bline();
- } break;
- case 14:
- # line 126 "dex.y"
- {
- {if(debug){printf("yyparse: filled_line\n");}}
- emit_filled(savedtext);
- } break;
- case 15:
- # line 133 "dex.y"
- {
- {if(debug){printf("yyparse: unfilled_line\n");}}
- emit_unfilled(savedtext);
- } break;
- case 16:
- # line 141 "dex.y"
- {
- {if(debug){printf("yyparse: newline\n");}}
- linenum++;
- } break;
- case 17:
- # line 148 "dex.y"
- {
- {if(debug){printf("yyparse: text\n");}}
- strcpy(savedtext,yytext);
- } break;
- }
- goto yystack; /* reset registers in driver code */
- }
-