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