📄 y_tab.c
字号:
"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 + -