⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 y_tab.c

📁 《编译方法》课程设计内容2.《编译方法》课程设计内容
💻 C
📖 第 1 页 / 共 3 页
字号:
"reg : 'R' number",
"offset : number",
"comment : text_comment",
"comment : ws text_comment",
"comment :",
"text_comment : text_comment char",
"text_comment : '\\\\'",
"char : separator",
"char : 'a'",
"char : 'b'",
"char : 'c'",
"char : 'd'",
"char : 'e'",
"char : 'f'",
"char : 'g'",
"char : 'h'",
"char : 'i'",
"char : 'j'",
"char : 'k'",
"char : 'l'",
"char : 'm'",
"char : 'n'",
"char : 'o'",
"char : 'p'",
"char : 'q'",
"char : 'r'",
"char : 's'",
"char : 't'",
"char : 'u'",
"char : 'v'",
"char : 'w'",
"char : 'x'",
"char : 'y'",
"char : 'z'",
"char : 'A'",
"char : 'B'",
"char : 'C'",
"char : 'D'",
"char : 'E'",
"char : 'F'",
"char : 'G'",
"char : 'H'",
"char : 'I'",
"char : 'J'",
"char : 'K'",
"char : 'L'",
"char : 'M'",
"char : 'N'",
"char : 'O'",
"char : 'P'",
"char : 'Q'",
"char : 'R'",
"char : 'S'",
"char : 'T'",
"char : 'U'",
"char : 'V'",
"char : 'W'",
"char : 'X'",
"char : 'Y'",
"char : 'Z'",
"char : '0'",
"char : '1'",
"char : '2'",
"char : '3'",
"char : '4'",
"char : '5'",
"char : '6'",
"char : '7'",
"char : '8'",
"char : '9'",
"char : '!'",
"char : '\"'",
"char : '#'",
"char : '$'",
"char : '%'",
"char : '&'",
"char : '\\''",
"char : '('",
"char : ')'",
"char : '='",
"char : '-'",
"char : '~'",
"char : '^'",
"char : '\\\\'",
"char : '|'",
"char : '@'",
"char : '{'",
"char : '['",
"char : '`'",
"char : '_'",
"char : '+'",
"char : ';'",
"char : ':'",
"char : '*'",
"char : '}'",
"char : ']'",
"char : '<'",
"char : ','",
"char : '>'",
"char : '.'",
"char : '?'",
"char : '/'",
"return : '\\n'",
};
#endif
#ifndef YYSTYPE
typedef int YYSTYPE;
#endif
#define yyclearin (yychar=(-1))
#define yyerrok (yyerrflag=0)
#ifdef YYSTACKSIZE
#ifndef YYMAXDEPTH
#define YYMAXDEPTH YYSTACKSIZE
#endif
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 600
#define YYMAXDEPTH 600
#endif
#endif
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
short *yyssp;
YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
short yyss[YYSTACKSIZE];
YYSTYPE yyvs[YYSTACKSIZE];
#define yystacksize YYSTACKSIZE
#line 428 "vas.y"

void  main( argc, argv )
int    argc ;
char **argv ;

{

	char *fin, fout[80] = "", *pos;
	int loc;
	if( argc < 2 )			 /* Must have at least a first arg */
	{
		printf( "vas: Too few args\n" ) ;
		exit( 10 ) ;
	}
	

        fin = argv[1];
	in = fopen (fin, "r"); 
	if (in == NULL) {
		printf("error: can't open file %s!\n", fin);
		exit(10);
		}
	pos = strchr(fin, '.');
	if (pos == NULL) 
		loc = strlen(fin);
	  else
		loc = pos - fin;
	strncpy(fout, fin, loc);
	strcat(fout, ".o");
	printf( "the VAM object file is : %s.\n", fout);
	out = fopen (fout, "wb");
	if (out == NULL) {
		printf("error: can't open output file %s!\n", fin);
		exit(10);
		}
	
	/* First pass sets up labels */
	pass = 1 ;
	yyparse() ;

	/* Second pass generates code */

        rewind( in) ;
	pc   = 0 ;
	pass = 2 ;
	yyparse() ;

        fclose(in);
        fclose(out);

}	/* void  main( void ) */


int  yylex( void )
{
	return fgetc(in) ;

}	/* int  yylex( void ) */


void  yyerror( char *s )

{
	fprintf( stderr, "yyerror: %s\n", s ) ;

}	/* void  yyerror( char *s ) */


void  pbyte( int  n )

/* Put out the single byte n (on pass 2), advancing pc */

{
	if( pass == 2 )
		fputc( n , out) ;

	pc++ ;

}	/* void  pbyte( int  n ) */


void  pword( long  n )

/* Put out the word n (on pass 2), advancing pc */

{
	if( pass == 2 )
	{
                fputc( n >>24, out ) ;
		fputc( n >>16 , out) ;

                fputc( n >>  8 , out) ;
		fputc( n   , out    ) ;
	}

	pc += 4;

}	/* void  pword( int  n ) */
#line 627 "y_tab.c"
#define YYABORT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
#if YYDEBUG
#ifndef YYDEBUG_LEXER_TEXT /* pointer to the text isolated by the lexer*/
#define YYDEBUG_LEXER_TEXT "YYDEBUG_LEXER_TEXT not defined"
#endif
#ifndef YYDEBUG_INDENT_STRING
#define YYDEBUG_INDENT_STRING  "|       "
#endif
#ifndef YYDEBUG_REDUCE_STRING
#define YYDEBUG_REDUCE_STRING  "+-------"
#endif
#ifndef YYDEBUG_INDENT
YYDEBUG_INDENT(yyindent)
int yyindent;
{
    while(yyindent-- > 0)
        printf("%s", YYDEBUG_INDENT_STRING);
}
#endif /* YYDEBUG_INDENT */
#ifndef YYDEBUG_REDUCE
YYDEBUG_REDUCE(yynew_state, yyrule_num, yyrule_string, yynew_indent, 
yyrhs_count)
int yynew_state;
int yyrule_num;
char * yyrule_string;
int yynew_indent;
int yyrhs_count;
{
    if (1 < yyrhs_count)
    {  /* draw the graphics for the reduction */
        YYDEBUG_INDENT(yynew_indent);
        while(1 < yyrhs_count--)
            printf("%s", YYDEBUG_REDUCE_STRING);
        putchar('+'); /* left rotated L would look nice */
        putchar('\n');
        YYDEBUG_INDENT(yynew_indent);
        putchar('|'); /* down arrow would look nice */
        putchar('\n');
    }
    YYDEBUG_INDENT(yynew_indent);
    /* Only print the resulting token name */
    while (*yyrule_string && ' ' != *yyrule_string)
        putchar(*yyrule_string++);
    putchar('\n');
}
#endif /* YYDEBUG_REDUCE */
#ifndef YYDEBUG_SHIFT_LEXEME
YYDEBUG_SHIFT_LEXEME(yyold_state, yynew_state, yytoken_string, yynew_indent)
int yyold_state;
int yynew_state;
char * yytoken_string;
int yynew_indent;
{
    YYDEBUG_INDENT(yynew_indent);
    printf("%s <-- `%s'\n", yytoken_string, YYDEBUG_LEXER_TEXT);
}
#endif /*  YYDEBUG_SHIFT_LEXEME */
#ifndef YYDEBUG_LOOK_AHEAD
YYDEBUG_LOOK_AHEAD(yynew_state, yytoken_num, yytoken_string, yyindent)
int yynew_state;
int yytoken_num;
char * yytoken_string;
int yyindent;
{
    YYDEBUG_INDENT(yyindent);
    printf("          .... 向前查看%s   `%s'\n",
           yytoken_string,
           (0 == yytoken_num)? "\0": YYDEBUG_LEXER_TEXT);
}
#endif /* YYDEBUG_LOOK_AHEAD */
#ifndef YYDEBUG_DISCARD_STATE
YYDEBUG_DISCARD_STATE(yynew_state, yyindent)
int yynew_state;
int yyindent;
{
    if (0 < yyindent)
    {  /* draw the graphics for the reduction */
        YYDEBUG_INDENT(yyindent-1);
        printf("%s", YYDEBUG_REDUCE_STRING);
        putchar('+'); /* left rotated L would look nice */
        printf("  discarding state\n");
        YYDEBUG_INDENT(yyindent-1);
        putchar('|'); /* down arrow would look nice */
        putchar('\n');
    }
    else
    {
        if (0 == yyindent)
            printf("discarding state\n");
        else
            printf("no more states to discard: parser will abort\n");
    }
}
#endif /* YYDEBUG_DISCARD_STATE */
#ifndef YYDEBUG_DISCARD_TOKEN
YYDEBUG_DISCARD_TOKEN(yynew_state, yytoken_num, yytoken_string, yyindent)
int yynew_state;
int yytoken_num;
char * yytoken_string;
int yyindent;
{
    YYDEBUG_INDENT(yyindent);
    printf("discarding token %s\n", yytoken_string);
}
#endif /* YYDEBUG_DISCARD_TOKEN */
#ifndef YYDEBUG_SHIFT_ERROR_LEXEME
YYDEBUG_SHIFT_ERROR_LEXEME(yyold_state, yynew_state, yyindent)
int yyold_state;
int yynew_state;
int yyindent;
{
    YYDEBUG_INDENT(yyindent);
    printf("error\n");
}
#endif /* YYDEBUG_SHIFT_ERROR_LEXEME */
#endif /* YYDEBUG */
int
yyparse()
{
    register int yym, yyn, yystate;
#if YYDEBUG
    register char *yys;
    extern char *getenv();

    if (yys = getenv("YYDEBUG"))
    {
        yyn = *yys;
        if (yyn >= '0' && yyn <= '9')
            yydebug = yyn - '0';
    }
#endif

    yynerrs = 0;
    yyerrflag = 0;
    yychar = (-1);

    yyssp = yyss;
    yyvsp = yyvs;
    *yyssp = yystate = 0;

yyloop:
    if (yyn = yydefred[yystate]) goto yyreduce;
    if (yychar < 0)
    {
        if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
        if (yydebug)
        {
            yys = 0;
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
            if (!yys) yys = "illegal-symbol";
            if (5 > yydebug)
                printf("yydebug: state %d, reading %d (%s)\n", yystate,
                        yychar, yys);
            else
                YYDEBUG_LOOK_AHEAD(yystate, yychar, yys, yyssp-yyss);
        }
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -