home *** CD-ROM | disk | FTP | other *** search
- #ifndef lint
- char yysccsid[] = "@(#)yaccpar 1.3 (Berkeley) 01/21/90";
- #endif
- #define WORD 257
- #define WHITESP 258
- #define EOLN 259
- #define STRING 260
- #define DEFINECMD 261
- #define INCLUDECMD 262
- #define IFDEFCMD 263
- #define IFNDEFCMD 264
- #define ELSECMD 265
- #define ENDIFCMD 266
- #define YYERRCODE 256
- #line 3 "asm.y"
- #define YYSTYPE char *
-
- #include "asmtrans.h"
- #line 19 "y_tab.c"
- short yylhs[] = { -1,
- 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 3, 3, 3, 3, 6, 6,
- 5, 2, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 7, 7, 7, 8, 8,
- 9, 9, 9, 9,
- };
- short yylen[] = { 2,
- 0, 2, 1, 2, 2, 3, 4, 4, 6, 6,
- 4, 4, 2, 2, 2, 4, 3, 5, 1, 3,
- 1, 2, 1, 2, 3, 4, 4, 4, 4, 6,
- 6, 11, 11, 5, 7, 1, 3, 2, 1, 2,
- 1, 1, 1, 1,
- };
- short yydefred[] = { 1,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 22, 21, 0, 0, 0, 0,
- 0, 13, 14, 0, 4, 0, 5, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 39, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 8, 7, 11, 12,
- 18, 0, 24, 0, 0, 0, 38, 40, 0, 0,
- 0, 41, 42, 43, 44, 0, 0, 0, 0, 0,
- 0, 20, 0, 0, 37, 9, 10, 0, 0, 29,
- 26, 27, 0, 28, 0, 0, 0, 34, 0, 0,
- 0, 0, 0, 30, 31, 0, 0, 35, 0, 0,
- 0, 0, 0, 0, 33, 32,
- };
- short yydgoto[] = { 1,
- 11, 12, 13, 42, 17, 43, 44, 45, 66,
- };
- short yysindex[] = { 0,
- -168, -47, -235, 0, -226, -224, -217, -215, -210, -202,
- 0, -203, -201, -235, 0, 0, -214, -198, -221, -197,
- -195, 0, 0, -193, 0, -196, 0, -192, -33, -191,
- -189, -185, -184, -180, 0, -33, 0, -28, -30, -27,
- -177, 24, 0, -24, -12, -35, 0, 0, 0, 0,
- 0, -28, 0, -28, 40, -28, 0, 0, -33, -28,
- -28, 0, 0, 0, 0, -28, -175, -174, -17, -29,
- 41, 0, 4, 28, 0, 0, 0, -28, 9, 0,
- 0, 0, -28, 0, -28, -15, -28, 0, 51, -25,
- -28, 57, 62, 0, 0, 12, -28, 0, 63, 64,
- -28, -28, 65, 68, 0, 0,
- };
- short yyrindex[] = { 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -149, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -148, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -147, 0, -40, -21, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, -23,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 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,
- 0, 0, 101, 69, 100, -8, -14, 0, 0,
- };
- #define YYTABLESIZE 238
- short yytable[] = { 38,
- 41, 38, 41, 23, 39, 41, 39, 41, 41, 40,
- 15, 40, 56, 81, 52, 60, 52, 52, 36, 36,
- 25, 16, 36, 53, 55, 57, 78, 51, 91, 64,
- 62, 18, 63, 19, 65, 31, 36, 57, 32, 69,
- 20, 71, 21, 29, 84, 73, 74, 83, 22, 88,
- 72, 75, 87, 24, 3, 25, 23, 27, 30, 33,
- 54, 34, 35, 86, 14, 36, 46, 59, 89, 47,
- 90, 36, 93, 48, 49, 79, 96, 92, 50, 58,
- 70, 82, 100, 76, 77, 85, 103, 104, 2, 3,
- 4, 94, 5, 6, 7, 8, 9, 10, 61, 95,
- 97, 36, 98, 36, 99, 105, 101, 102, 106, 15,
- 17, 19, 26, 28, 68, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 14, 0, 0, 0, 0, 0, 0, 0, 23, 0,
- 0, 37, 0, 37, 67, 0, 37, 80, 37, 37,
- 0, 0, 0, 0, 0, 25, 0, 36,
- };
- short yycheck[] = { 35,
- 36, 35, 36, 44, 40, 36, 40, 36, 36, 45,
- 58, 45, 40, 43, 45, 40, 45, 45, 40, 41,
- 44, 257, 44, 38, 39, 40, 44, 36, 44, 42,
- 43, 258, 45, 258, 47, 257, 58, 52, 260, 54,
- 258, 56, 258, 258, 41, 60, 61, 44, 259, 41,
- 59, 66, 44, 257, 258, 259, 259, 259, 257, 257,
- 91, 257, 259, 78, 258, 258, 258, 44, 83, 259,
- 85, 93, 87, 259, 259, 93, 91, 93, 259, 257,
- 41, 41, 97, 259, 259, 58, 101, 102, 257, 258,
- 259, 41, 261, 262, 263, 264, 265, 266, 123, 125,
- 44, 123, 41, 125, 93, 41, 44, 44, 41, 259,
- 259, 259, 12, 14, 46, -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,
- 258, -1, -1, -1, -1, -1, -1, -1, 259, -1,
- -1, 257, -1, 257, 260, -1, 257, 257, 257, 257,
- -1, -1, -1, -1, -1, 259, -1, 259,
- };
- #define YYFINAL 1
- #ifndef YYDEBUG
- #define YYDEBUG 0
- #endif
- #define YYMAXTOKEN 266
- #if YYDEBUG
- char *yyname[] = {
- "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,"'#'","'$'",0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,
- 0,0,"':'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",
- 0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,"WORD","WHITESP","EOLN","STRING","DEFINECMD","INCLUDECMD",
- "IFDEFCMD","IFNDEFCMD","ELSECMD","ENDIFCMD",
- };
- char *yyrule[] = {
- "$accept : input",
- "input :",
- "input : input line",
- "line : EOLN",
- "line : label EOLN",
- "line : opline EOLN",
- "line : label opline EOLN",
- "line : INCLUDECMD WHITESP STRING EOLN",
- "line : INCLUDECMD WHITESP WORD EOLN",
- "line : DEFINECMD WHITESP WORD WHITESP STRING EOLN",
- "line : DEFINECMD WHITESP WORD WHITESP operand EOLN",
- "line : IFDEFCMD WHITESP WORD EOLN",
- "line : IFNDEFCMD WHITESP WORD EOLN",
- "line : ELSECMD EOLN",
- "line : ENDIFCMD EOLN",
- "opline : WHITESP opcode",
- "opline : WHITESP opcode WHITESP ops",
- "opline : WORD WHITESP opcode",
- "opline : WORD WHITESP opcode WHITESP ops",
- "ops : operand",
- "ops : operand ',' ops",
- "opcode : WORD",
- "label : WORD ':'",
- "operand : basic",
- "operand : '#' basic",
- "operand : '(' basic ')'",
- "operand : '(' basic ')' '+'",
- "operand : '-' '(' basic ')'",
- "operand : basic '(' basic ')'",
- "operand : '(' basic ')' WORD",
- "operand : basic '(' basic ',' basic ')'",
- "operand : basic '{' basic ':' basic '}'",
- "operand : '(' '[' basic ',' basic ']' ',' basic ',' basic ')'",
- "operand : '(' '[' basic ',' basic ',' basic ']' ',' basic ')'",
- "operand : '(' '[' basic ']' ')'",
- "operand : '(' '[' basic ']' ',' basic ')'",
- "basic : basexpr",
- "basic : basexpr op basic",
- "basic : '-' basic",
- "basexpr : WORD",
- "basexpr : '$' WORD",
- "op : '+'",
- "op : '-'",
- "op : '*'",
- "op : '/'",
- };
- #endif
- #ifndef YYSTYPE
- typedef int YYSTYPE;
- #endif
- #define yyclearin (yychar=(-1))
- #define yyerrok (yyerrflag=0)
- #ifndef YYSTACKSIZE
- #ifdef YYMAXDEPTH
- #define YYSTACKSIZE YYMAXDEPTH
- #else
- #define YYSTACKSIZE 300
- #endif
- #endif
- int yydebug;
- int yynerrs;
- int yyerrflag;
- int yychar;
- short *yyssp;
- YYSTYPE *yyvsp;
- YYSTYPE yyval;
- YYSTYPE yylval;
- #define yystacksize YYSTACKSIZE
- short yyss[YYSTACKSIZE];
- YYSTYPE yyvs[YYSTACKSIZE];
- #line 103 "asm.y"
- #include <setjmp.h>
-
- jmp_buf start;
-
- #ifdef NATIVEATARI
- #define STACK 32*1024L
- #ifdef LATTICE
- long _STACK = STACK;
- #endif
- #ifdef __GNUC__
- long _stksize = STACK;
- #endif
-
- static void
- hit_return()
- {
- printf("Hit return to continue\n");
- fflush(stdout);
- getchar();
- }
- #endif
-
- void usage()
- {
- fprintf(stderr, "Usage: asmtrans [-gas][-asm][-o outfile] infile\n");
- exit(2);
- }
-
- int errors = 0;
-
- void
- do_include(file)
- char *file;
- {
- jmp_buf save;
- FILE *oldin, *f;
-
- f = fopen(file, "rt");
- if (!f) {
- perror(file);
- return;
- }
- bcopy(start, save, sizeof(jmp_buf));
- oldin = infile;
- infile = f;
- setjmp(start);
- yyparse();
- fclose(f);
- infile = oldin;
- bcopy(save, start, sizeof(jmp_buf));
- longjmp(start,1);
- }
-
- /* set up initial definitions based on syntax type */
-
- void
- do_initial_defs()
- {
- if (syntax == GAS) {
- do_define("mmusr", "psr");
- do_define("fpiar", "fpi");
- do_define("XREF", ".globl");
- do_define("XDEF", ".globl");
- do_define("TEXT", ".text");
- do_define("DATA", ".data");
- /* gas doesn't have a .bss directive */
- do_define("BSS", ".data");
- do_define("END", "| END");
- do_define("dc.l", ".long");
- do_define("dc.w", ".word");
- do_define("dc.b", ".byte");
- } else if (syntax == ASM) {
- do_define("TEXT", "SECTION TEXT,CODE");
- do_define("DATA", "SECTION DATA,DATA");
- do_define("BSS", "SECTION BSS,BSS");
- }
- }
-
- int
- main (argc, argv)
- int argc; char **argv;
- {
- FILE *f;
- #ifdef NATIVEATARI
- if (!argv[0] || !argv[0][0]) /* run from desktop? */
- atexit(hit_return);
- #endif
- argv++;
- outfile = stdout;
-
- while (*argv) {
- if (!strcmp(*argv, "-o")) {
- argv++;
- if (*argv == 0) {
- fprintf(stderr, "missing argument to -o\n");
- usage();
- }
- f = fopen(*argv, "wt");
- if (!f)
- perror(*argv);
- else
- outfile = f;
- argv++;
- } else if (!strcmp(*argv, "-gas")) {
- argv++;
- syntax = GAS;
- } else if (!strcmp(*argv, "-asm")) {
- argv++;
- syntax = ASM;
- } else if (!strcmp(*argv, "-purec")) {
- argv++;
- syntax = PUREC;
- } else if (!strncmp(*argv, "-D", 2)) {
- char *word, *defn;
- word = *argv+2;
- defn = index(word,'=');
- if (defn)
- *defn++ = '\0';
- else
- defn = "1";
- if (*word) do_define(word,defn);
- argv++;
- } else if (!strcmp(*argv, "--")) {
- argv++;
- break;
- } else {
- if (**argv == '-') {
- fprintf(stderr, "unknown option: %s\n",
- *argv);
- usage();
- }
- break;
- }
- }
-
- do_initial_defs();
-
- if (*argv == 0) {
- setjmp(start);
- infile = stdin;
- yyparse();
- } else {
- while(*argv) {
- if (!(f = fopen(*argv, "rt")))
- perror(*argv);
- else {
- infile = f;
- setjmp(start);
- yyparse();
- fclose(f);
- }
- argv++;
- }
- }
-
- if (ifstkptr != 0) {
- fputs("%ifdef without matching %endif\n", stderr);
- errors++;
- }
- return errors;
- }
-
- void
- yyerror (s) /* Called by yyparse on error */
- char *s;
- {
- errors++;
- printf("%s\n", s);
- longjmp(start, 1);
- }
-
- void dbgmsg(s) char *s;
- {
- fprintf(stderr, "%s\n", s);
- }
- #line 396 "y_tab.c"
- #define YYABORT goto yyabort
- #define YYACCEPT goto yyaccept
- #define YYERROR goto yyerrlab
- int
- yyparse()
- {
- register int yym, yyn, yystate;
- #if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn == '0')
- yydebug = 0;
- else if (yyn >= '1' && 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";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
- #endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
- #ifdef lint
- goto yynewerror;
- #endif
- yynewerror:
- yyerror("syntax error");
- #ifdef lint
- goto yyerrlab;
- #endif
- yyerrlab:
- ++yynerrs;
- yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
- #endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
- #endif
- yychar = (-1);
- goto yyloop;
- }
- yyreduce:
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
- #endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
- case 3:
- #line 25 "asm.y"
- { emit(yyvsp[0]); }
- break;
- case 4:
- #line 28 "asm.y"
- { emit(yyvsp[-1]); emit(yyvsp[0]); }
- break;
- case 5:
- #line 29 "asm.y"
- { emit(yyvsp[-1]); emit(yyvsp[0]); }
- break;
- case 6:
- #line 30 "asm.y"
- { emit(yyvsp[-2]); emit(yyvsp[-1]);
- emit(yyvsp[0]); }
- break;
- case 7:
- #line 32 "asm.y"
- { if (!hidecnt) do_include(yyvsp[-1]); free(yyvsp[-1]); }
- break;
- case 8:
- #line 33 "asm.y"
- { if (!hidecnt) do_include(yyvsp[-1]); free(yyvsp[-1]); }
- break;
- case 9:
- #line 34 "asm.y"
- {
- if (!hidecnt) do_define(yyvsp[-3], yyvsp[-1]); free(yyvsp[-3]); free(yyvsp[-1]); }
- break;
- case 10:
- #line 36 "asm.y"
- {
- if (!hidecnt) do_define(yyvsp[-3], yyvsp[-1]); free(yyvsp[-3]); free(yyvsp[-1]); }
- break;
- case 11:
- #line 38 "asm.y"
- { do_ifdef(yyvsp[-1]); free(yyvsp[-1]); }
- break;
- case 12:
- #line 39 "asm.y"
- { do_ifndef(yyvsp[-1]); free(yyvsp[-1]); }
- break;
- case 13:
- #line 40 "asm.y"
- { do_else(); }
- break;
- case 14:
- #line 41 "asm.y"
- { do_endif(); }
- break;
- case 15:
- #line 44 "asm.y"
- { yyval = do_ops("", yyvsp[0], "", ""); free(yyvsp[0]); }
- break;
- case 16:
- #line 46 "asm.y"
- { yyval = do_ops("", yyvsp[-2], yyvsp[-1], yyvsp[0]);
- free(yyvsp[-2]); free(yyvsp[-1]); free(yyvsp[0]); }
- break;
- case 17:
- #line 48 "asm.y"
- { yyval = do_ops(yyvsp[-2], yyvsp[0], "", ""); free(yyvsp[-2]); free(yyvsp[0]); }
- break;
- case 18:
- #line 50 "asm.y"
- { yyval = do_ops(yyvsp[-4], yyvsp[-2], yyvsp[-1], yyvsp[0]);
- free(yyvsp[-4]); free(yyvsp[-2]); free(yyvsp[-1]); free(yyvsp[0]);}
- break;
- case 19:
- #line 54 "asm.y"
- { yyval = yyvsp[0]; }
- break;
- case 20:
- #line 55 "asm.y"
- { yyval = concat3(yyvsp[-2], ",", yyvsp[0]);
- free(yyvsp[-2]); free(yyvsp[0]); }
- break;
- case 21:
- #line 59 "asm.y"
- { yyval = wordlookup(yyvsp[0]); free(yyvsp[0]); }
- break;
- case 22:
- #line 62 "asm.y"
- { yyval = concat(yyvsp[-1], ":"); free(yyvsp[-1]); }
- break;
- case 23:
- #line 64 "asm.y"
- {yyval = yyvsp[0]; }
- break;
- case 24:
- #line 65 "asm.y"
- {yyval = immediate(yyvsp[0]); free(yyvsp[0]); }
- break;
- case 25:
- #line 66 "asm.y"
- {yyval = indirect(yyvsp[-1]); free(yyvsp[-1]); }
- break;
- case 26:
- #line 67 "asm.y"
- {yyval = postinc(yyvsp[-2]); free(yyvsp[-2]); }
- break;
- case 27:
- #line 68 "asm.y"
- {yyval = predec(yyvsp[-1]); free(yyvsp[-1]); }
- break;
- case 28:
- #line 69 "asm.y"
- {yyval = indexed(yyvsp[-3], yyvsp[-1]); free(yyvsp[-3]); free(yyvsp[-1]); }
- break;
- case 29:
- #line 70 "asm.y"
- {yyval = sizedop(yyvsp[-2], yyvsp[0]); free(yyvsp[-2]); free(yyvsp[0]); }
- break;
- case 30:
- #line 71 "asm.y"
- {yyval = twoindex(yyvsp[-5], yyvsp[-3], yyvsp[-1]);
- free(yyvsp[-5]); free(yyvsp[-3]); free(yyvsp[-1]); }
- break;
- case 31:
- #line 73 "asm.y"
- {yyval = bitfield(yyvsp[-5], yyvsp[-3], yyvsp[-1]);
- free(yyvsp[-5]); free(yyvsp[-3]); free(yyvsp[-1]); }
- break;
- case 32:
- #line 76 "asm.y"
- { yyval =postindex(yyvsp[-8],yyvsp[-6],yyvsp[-3],yyvsp[-1]);
- free(yyvsp[-8]); free(yyvsp[-6]); free(yyvsp[-3]); free(yyvsp[-1]); }
- break;
- case 33:
- #line 79 "asm.y"
- { yyval =preindex(yyvsp[-8],yyvsp[-6],yyvsp[-4],yyvsp[-1]);
- free(yyvsp[-8]); free(yyvsp[-6]); free(yyvsp[-4]); free(yyvsp[-1]); }
- break;
- case 34:
- #line 82 "asm.y"
- { yyval =postindex0(yyvsp[-2]);
- free(yyvsp[-2]); }
- break;
- case 35:
- #line 85 "asm.y"
- { yyval =postindex1(yyvsp[-4],yyvsp[-1]);
- free(yyvsp[-4]); free(yyvsp[-1]); }
- break;
- case 36:
- #line 89 "asm.y"
- { yyval = yyvsp[0]; }
- break;
- case 37:
- #line 90 "asm.y"
- { yyval = concat3(yyvsp[-2], yyvsp[-1], yyvsp[0]); free(yyvsp[-2]); free(yyvsp[-1]); free(yyvsp[0]); }
- break;
- case 38:
- #line 91 "asm.y"
- { yyval = concat("-", yyvsp[0]); free(yyvsp[0]); }
- break;
- case 39:
- #line 93 "asm.y"
- {yyval = wordlookup(yyvsp[0]); free(yyvsp[0]); }
- break;
- case 40:
- #line 94 "asm.y"
- {yyval = hexop(yyvsp[0]); free(yyvsp[0]);}
- break;
- case 41:
- #line 97 "asm.y"
- { yyval = strdup("+"); }
- break;
- case 42:
- #line 98 "asm.y"
- { yyval = strdup("-"); }
- break;
- case 43:
- #line 99 "asm.y"
- { yyval = strdup("*"); }
- break;
- case 44:
- #line 100 "asm.y"
- { yyval = strdup("/"); }
- break;
- #line 718 "y_tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
- #ifdef YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
- #endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- 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";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
- }
- #endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
- #ifdef YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
- to state %d\n", *yyssp, yystate);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
- yyoverflow:
- yyerror("yacc stack overflow");
- yyabort:
- return (1);
- yyaccept:
- return (0);
- }
-