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

📄 y_tab.c

📁 《编译方法》课程设计内容2.《编译方法》课程设计内容
💻 C
📖 第 1 页 / 共 3 页
字号:
#ifndef lint
static char yysccsid[] = "@(#)yaccpar	1.8 (Berkeley) 01/02/91\n\
 Modified 5/15/91 by J. Roskind to support graphic debugging modes";
#endif
#define YYBYACC 1
#define YYPREFIX "yy"
#line 2 "vas.y"
/******************************************************************************
*******************************************************************************


		   文件名:vas.y      源程序
			     
   本程序将VAM的汇编程序翻译为二进制目标文件.

   编译方法
	1. "byacc vas.y" 生成 y_tab.c.
	2. "ren y_tab.c vas.c"
	3. 用tc编译vas.c生成执行文件vas.exe

   运行方法:
	vas VAM汇编文件
   
   程序将输出一个扩展名是.o的VAM二进制文件

   文件修改时间
   ============

   2005年5月6日

*******************************************************************************
******************************************************************************/


#include <stdio.h>
void pword(long);

#define YYSTYPE long
#define  MAXLAB  0x1000			 /* Number of labels */

/* The instruction set */

#define  I_HALT	 0 			 /* End of program */
#define  I_NOP   1 			 /* Do nothing */
#define  I_TRAP  2 			 /* Output a character */
#define  I_ADD   3 			 /* ADD Rx,Ry */
#define  I_SUB   4
#define  I_MUL   5
#define  I_DIV   6
#define  I_STI   7			 /* STI Rx,offset(Ry) */
#define  I_LDI   8 			 /* LDI offset(Rx),Ry */
#define  I_LDA   9 			 /* LDA offset(Rx),Ry */
#define  I_LDR   10 			 /* LDR Rx,Ry */
#define  I_BZE   11 			 /* BZE offset */
#define  I_BNZ   12
#define  I_BRA   13
#define  I_BAL   14 			 /* BAL Rx,Ry */
#define  I_MAX   15

/* Global variables */
FILE *in, *out;
int  pass ;				 /* Which pass */
int  pc ;				 /* Program counter */
long  labtab[MAXLAB] ;                    /* Offsets for labels */

	
#line 68 "y_tab.c"
#define YYERRCODE 256
short yylhs[] = {                                        -1,
    0,    0,    1,    1,    1,    1,    4,    7,    7,    8,
    8,    9,    9,    9,    9,    9,    9,    9,    9,    9,
    9,    5,    5,   10,   10,    6,    6,    6,    6,    6,
    6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
    6,   11,   12,   13,   14,   15,   16,   17,   18,   18,
   19,   19,   20,   20,   21,   22,   22,   23,   23,   24,
   24,   25,   26,   27,   28,   29,   30,   32,   33,   34,
   35,   37,   38,   39,   40,   41,   42,   43,   44,   31,
   36,    2,    2,    2,   45,   45,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
   46,    3,
};
short yylen[] = {                                         2,
    1,    2,    2,    4,    6,    4,    2,    1,    2,    2,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    5,    5,    5,    5,    8,    5,
    8,    5,    8,    5,    5,    3,    3,    3,    3,    3,
    3,    5,    3,    4,    3,    4,    3,    3,    3,    3,
    3,    3,    3,    3,    3,    3,    3,    3,    2,    2,
    1,    1,    2,    0,    2,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
    1,    1,
};
short yydefred[] = {                                      0,
    0,   24,   25,   86,    0,    1,    0,    0,    0,   22,
    0,    0,   12,   13,   14,   15,   16,   17,   18,   19,
   20,   21,    7,    0,   11,    2,  182,    3,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   23,
   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,
   36,   37,   38,   39,   40,   41,   42,   43,   44,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  172,  125,  160,  140,  141,  142,  143,
  144,  145,  146,  147,  148,  149,  177,  157,  158,  121,
  114,  133,  127,  128,  129,  131,  117,  132,  134,  115,
  126,  122,  135,  139,  118,  163,   88,   89,   90,   91,
   92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
  112,  113,  116,  119,  120,  123,  124,  130,  136,  137,
  138,  150,  151,  152,  153,  154,  155,  156,  159,  161,
  162,  164,  165,  166,  167,  168,  169,  170,  171,  173,
  174,  175,  176,  178,  179,  180,  181,   87,   85,    0,
   10,    0,    0,    0,    0,    0,    0,    0,   79,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    4,    0,   73,   74,   72,    0,   67,    0,
   65,   70,   71,   68,   78,   76,   77,   75,   69,    6,
    0,    0,    0,    0,    0,    0,    0,   81,    0,    0,
    0,    0,   57,   56,   59,   58,   61,   60,    0,   63,
    0,   64,   66,   80,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    5,   45,   46,   47,   48,
   50,    0,   52,    0,   54,    0,   55,   62,    0,    0,
    0,    0,    0,    0,   49,   51,   53,
};
short yydgoto[] = {                                       5,
    6,    7,   28,    8,    9,   39,  228,   24,   25,   10,
   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
  222,   61,   62,   63,   64,  229,   65,   66,   67,   68,
   69,   70,   71,   72,   11,  169,
};
short yysindex[] = {                                     -4,
  154,    0,    0,    0,   -4,    0,    4,  -42,   15,    0,
  189,  317,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  317,    0,    0,    0,    0,   14,  -47,
  -35,  -37,  -28,  -24,  -55,  -65,   67,  -12,   14,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   -3,
   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
   -3,   -3,  189,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,  317,
    0,    4,   15,   21,  -18,    8,   12,    2,    0,   -2,
   23,   31,   28,   22,   40,   42,   38,    4,   14,   18,
   18,   18,   18,   18,   86,   86,   18,   86,   86,   86,
   18,  307,    0,   14,    0,    0,    0,   39,    0,   35,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  154,   78,   80,   81,   82,   85,   89,    0,   90,  100,
  106,  103,    0,    0,    0,    0,    0,    0,  104,    0,
    4,    0,    0,    0,   70,   70,   70,   70,  272,   70,
   70,   70,   70,   70,   70,    0,    0,    0,    0,    0,
    0,  111,    0,  112,    0,  113,    0,    0,   70,  114,
  115,  119,   70,   70,    0,    0,    0,
};
short yyrindex[] = {                                    145,
    0,    0,    0,    0,  145,    0,    0,    0,    0,    0,
  146,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   16,    0,    0,    0,    0,  145,    0,
    0,    0,    0,    0,    0,    0,    0,    0,  145,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,  153,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   69,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  145,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,
};
short yygindex[] = {                                      0,
  159,   -7, -113,  -79,  -27,   -6,   -1,  156,  -20,   -8,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 -184,    0,    0,    0,    0, -147,    0,    0,    0,    0,
    0,    0,    0,    0,    6,    0,
};
#define YYTABLESIZE 374
short yytable[] = {                                      23,
   40,  173,  168,  171,    3,    3,  223,  224,  225,  226,
  179,  189,  232,   27,   73,   29,  239,  180,  181,  182,
  174,  172,    3,    3,    8,    8,    3,    2,    2,  175,
  176,  188,  190,  191,  192,  193,  194,  195,  196,  197,
  198,  199,  200,  201,  202,    2,    2,    8,  231,    2,
  234,  236,  238,  177,  178,    8,    8,  208,  203,    8,
  257,  258,  259,  260,  168,  263,  264,  265,  266,  267,
  268,    1,  187,    8,  220,  209,  210,    9,    9,   32,
   37,  211,   35,  212,  272,  205,   31,    4,  276,  277,
   30,   38,   34,  207,    3,  213,  214,   36,   33,  221,
    9,  262,  206,  215,  217,    4,    4,    8,    9,    9,
  218,  216,    9,  219,  243,  227,  230,    2,  233,  235,
  237,  245,  242,  246,  247,  248,    9,  256,  249,  251,
   12,  183,  250,   13,   14,   15,   16,   17,   18,   19,
   20,   21,   22,  252,  184,  253,  254,  255,  185,  171,
  269,  221,  270,  271,   84,   82,  186,  273,  274,  275,
    9,    1,   83,   26,   40,    0,  204,  170,    0,  261,
    0,    0,    0,    0,    0,    0,  189,    0,   73,    0,
   40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
   40,   40,   40,   40,   73,    0,  241,    3,   12,    0,
  240,   13,   14,   15,   16,   17,   18,   19,   20,   21,
   22,    0,    0,    0,    0,    0,    0,    0,    0,  244,
    2,  142,  143,  144,  145,  146,  147,  148,   88,   89,
  160,  158,   87,   76,  165,  167,   77,   78,   79,   80,
   81,   82,   83,   84,   85,   86,   74,  159,  163,  149,
  164,  166,  153,   91,  100,  133,   97,  105,  134,  135,
   90,  102,  136,  137,   75,  101,   93,   94,   95,  138,
   96,   98,   92,   99,  103,  139,  140,  141,  104,  155,
  106,  162,  151,  157,  156,  107,  108,  109,  110,  111,
  112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
  122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
  132,  154,  152,  161,  150,    3,   12,    0,    0,   13,
   14,   15,   16,   17,   18,   19,   20,   21,   22,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    2,    0,
    0,    0,    0,    0,    0,    0,    0,    1,    0,    0,
    0,   12,    0,    0,   13,   14,   15,   16,   17,   18,
   19,   20,   21,   22,   13,   14,   15,   16,   17,   18,
   19,   20,   21,   22,
};
short yycheck[] = {                                       1,
    9,   29,   11,   24,    9,    9,  191,  192,  193,  194,
   66,   39,  197,   10,    9,   58,  201,   73,   84,   85,
   68,   29,    9,    9,    9,   10,    9,   32,   32,   65,
   68,   39,   60,   61,   62,   63,   64,   65,   66,   67,
   68,   69,   70,   71,   72,   32,   32,   32,  196,   32,
  198,  199,  200,   82,   79,   40,   41,   76,  172,   44,
  245,  246,  247,  248,   73,  250,  251,  252,  253,  254,
  255,   76,   85,   58,  188,   68,   65,    9,   10,   65,
   66,   80,   68,   86,  269,   65,   72,   92,  273,  274,
   76,   77,   78,   73,    9,   73,   66,   83,   84,   82,
   32,  249,   82,   76,   65,   92,   92,   92,   40,   41,
   69,   90,   44,   76,   80,  195,  196,   32,  198,  199,
  200,   44,   84,   44,   44,   44,   58,  241,   44,   40,
   45,   65,   44,   48,   49,   50,   51,   52,   53,   54,
   55,   56,   57,   44,   78,   40,   44,   44,   82,  170,
   40,   82,   41,   41,   10,   10,   90,   44,   44,   41,
   92,   76,   10,    5,  173,   -1,  173,   12,   -1,  249,
   -1,   -1,   -1,   -1,   -1,   -1,  204,   -1,  173,   -1,
  189,  190,  191,  192,  193,  194,  195,  196,  197,  198,
  199,  200,  201,  202,  189,   -1,  204,    9,   45,   -1,
  202,   48,   49,   50,   51,   52,   53,   54,   55,   56,
   57,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  221,
   32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,
   62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
   72,   73,   74,   75,   76,   77,   78,   79,   80,   81,
   82,   83,   84,   85,   86,   87,   88,   89,   90,   91,
   92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
  112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
  122,  123,  124,  125,  126,    9,   45,   -1,   -1,   48,
   49,   50,   51,   52,   53,   54,   55,   56,   57,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   32,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   76,   -1,   -1,
   -1,   45,   -1,   -1,   48,   49,   50,   51,   52,   53,
   54,   55,   56,   57,   48,   49,   50,   51,   52,   53,
   54,   55,   56,   57,
};
#define YYFINAL 5
#ifndef YYDEBUG
#define YYDEBUG 1
#endif
#define YYMAXTOKEN 126
#if YYDEBUG
char *yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,"'\\t'","'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,"' '","'!'","'\"'","'#'","'$'","'%'","'&'","'\\''","'('","')'","'*'",
"'+'","','","'-'","'.'","'/'","'0'","'1'","'2'","'3'","'4'","'5'","'6'","'7'",
"'8'","'9'","':'","';'","'<'","'='","'>'","'?'","'@'","'A'","'B'","'C'","'D'",
"'E'","'F'","'G'","'H'","'I'","'J'","'K'","'L'","'M'","'N'","'O'","'P'","'Q'",
"'R'","'S'","'T'","'U'","'V'","'W'","'X'","'Y'","'Z'","'['","'\\\\'","']'",
"'^'","'_'","'`'","'a'","'b'","'c'","'d'","'e'","'f'","'g'","'h'","'i'","'j'",
"'k'","'l'","'m'","'n'","'o'","'p'","'q'","'r'","'s'","'t'","'u'","'v'","'w'",
"'x'","'y'","'z'","'{'","'|'","'}'","'~'",
};
char *yyrule[] = {
"$accept : program",
"program : statement",
"program : program statement",
"statement : comment return",
"statement : label ':' comment return",
"statement : label ':' ws instruction comment return",
"statement : ws instruction comment return",
"label : 'L' number",
"number : number1",
"number : '-' number1",
"number1 : number1 digit",
"number1 : digit",
"digit : '0'",
"digit : '1'",
"digit : '2'",
"digit : '3'",
"digit : '4'",
"digit : '5'",
"digit : '6'",
"digit : '7'",
"digit : '8'",
"digit : '9'",
"ws : separator",
"ws : ws separator",
"separator : ' '",
"separator : '\\t'",
"instruction : halt_instr",
"instruction : nop_instr",
"instruction : trap_instr",
"instruction : add_instr",
"instruction : sub_instr",
"instruction : mul_instr",
"instruction : div_instr",
"instruction : sti_instr",
"instruction : ldi_instr",
"instruction : lda_instr",
"instruction : ldr_instr",
"instruction : bze_instr",
"instruction : bnz_instr",
"instruction : bra_instr",
"instruction : bal_instr",
"instruction : db_instr",
"halt_instr : halt_op",
"nop_instr : nop_op",
"trap_instr : trap_op",
"add_instr : add_op ws reg ',' reg",
"sub_instr : sub_op ws reg ',' reg",
"mul_instr : mul_op ws reg ',' reg",
"div_instr : div_op ws reg ',' reg",
"sti_instr : sti_op ws reg ',' offset '(' reg ')'",
"sti_instr : sti_op ws reg ',' label",
"ldi_instr : ldi_op ws offset '(' reg ')' ',' reg",
"ldi_instr : ldi_op ws label ',' reg",
"lda_instr : lda_op ws offset '(' reg ')' ',' reg",
"lda_instr : lda_op ws label ',' reg",
"ldr_instr : ldr_op ws reg ',' reg",
"bze_instr : bze_op ws offset",
"bze_instr : bze_op ws label",
"bnz_instr : bnz_op ws offset",
"bnz_instr : bnz_op ws label",
"bra_instr : bra_op ws offset",
"bra_instr : bra_op ws label",
"bal_instr : bal_op ws reg ',' reg",
"db_instr : db_op ws number",
"halt_op : 'H' 'A' 'L' 'T'",
"nop_op : 'N' 'O' 'P'",
"trap_op : 'T' 'R' 'A' 'P'",
"add_op : 'A' 'D' 'D'",
"sub_op : 'S' 'U' 'B'",
"mul_op : 'M' 'U' 'L'",
"div_op : 'D' 'I' 'V'",
"sti_op : 'S' 'T' 'I'",
"ldi_op : 'L' 'D' 'I'",
"lda_op : 'L' 'D' 'A'",
"ldr_op : 'L' 'D' 'R'",
"bze_op : 'B' 'Z' 'E'",
"bnz_op : 'B' 'N' 'Z'",
"bra_op : 'B' 'R' 'A'",
"bal_op : 'B' 'A' 'L'",
"db_op : 'D' 'B'",

⌨️ 快捷键说明

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