1264790Sbapt/* original parser id follows */ 2264790Sbapt/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3264790Sbapt/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4264790Sbapt 5264790Sbapt#define YYBYACC 1 6264790Sbapt#define YYMAJOR 1 7264790Sbapt#define YYMINOR 9 8264790Sbapt#define YYCHECK "yyyymmdd" 9264790Sbapt 10264790Sbapt#define YYEMPTY (-1) 11264790Sbapt#define yyclearin (yychar = YYEMPTY) 12264790Sbapt#define yyerrok (yyerrflag = 0) 13264790Sbapt#define YYRECOVERING() (yyerrflag != 0) 14264790Sbapt#define YYENOMEM (-2) 15264790Sbapt#define YYEOF 0 16264790Sbapt 17264790Sbapt#ifndef yyparse 18264790Sbapt#define yyparse ok_syntax1_parse 19264790Sbapt#endif /* yyparse */ 20264790Sbapt 21264790Sbapt#ifndef yylex 22264790Sbapt#define yylex ok_syntax1_lex 23264790Sbapt#endif /* yylex */ 24264790Sbapt 25264790Sbapt#ifndef yyerror 26264790Sbapt#define yyerror ok_syntax1_error 27264790Sbapt#endif /* yyerror */ 28264790Sbapt 29264790Sbapt#ifndef yychar 30264790Sbapt#define yychar ok_syntax1_char 31264790Sbapt#endif /* yychar */ 32264790Sbapt 33264790Sbapt#ifndef yyval 34264790Sbapt#define yyval ok_syntax1_val 35264790Sbapt#endif /* yyval */ 36264790Sbapt 37264790Sbapt#ifndef yylval 38264790Sbapt#define yylval ok_syntax1_lval 39264790Sbapt#endif /* yylval */ 40264790Sbapt 41264790Sbapt#ifndef yydebug 42264790Sbapt#define yydebug ok_syntax1_debug 43264790Sbapt#endif /* yydebug */ 44264790Sbapt 45264790Sbapt#ifndef yynerrs 46264790Sbapt#define yynerrs ok_syntax1_nerrs 47264790Sbapt#endif /* yynerrs */ 48264790Sbapt 49264790Sbapt#ifndef yyerrflag 50264790Sbapt#define yyerrflag ok_syntax1_errflag 51264790Sbapt#endif /* yyerrflag */ 52264790Sbapt 53264790Sbapt#ifndef yylhs 54264790Sbapt#define yylhs ok_syntax1_lhs 55264790Sbapt#endif /* yylhs */ 56264790Sbapt 57264790Sbapt#ifndef yylen 58264790Sbapt#define yylen ok_syntax1_len 59264790Sbapt#endif /* yylen */ 60264790Sbapt 61264790Sbapt#ifndef yydefred 62264790Sbapt#define yydefred ok_syntax1_defred 63264790Sbapt#endif /* yydefred */ 64264790Sbapt 65264790Sbapt#ifndef yydgoto 66264790Sbapt#define yydgoto ok_syntax1_dgoto 67264790Sbapt#endif /* yydgoto */ 68264790Sbapt 69264790Sbapt#ifndef yysindex 70264790Sbapt#define yysindex ok_syntax1_sindex 71264790Sbapt#endif /* yysindex */ 72264790Sbapt 73264790Sbapt#ifndef yyrindex 74264790Sbapt#define yyrindex ok_syntax1_rindex 75264790Sbapt#endif /* yyrindex */ 76264790Sbapt 77264790Sbapt#ifndef yygindex 78264790Sbapt#define yygindex ok_syntax1_gindex 79264790Sbapt#endif /* yygindex */ 80264790Sbapt 81264790Sbapt#ifndef yytable 82264790Sbapt#define yytable ok_syntax1_table 83264790Sbapt#endif /* yytable */ 84264790Sbapt 85264790Sbapt#ifndef yycheck 86264790Sbapt#define yycheck ok_syntax1_check 87264790Sbapt#endif /* yycheck */ 88264790Sbapt 89264790Sbapt#ifndef yyname 90264790Sbapt#define yyname ok_syntax1_name 91264790Sbapt#endif /* yyname */ 92264790Sbapt 93264790Sbapt#ifndef yyrule 94264790Sbapt#define yyrule ok_syntax1_rule 95264790Sbapt#endif /* yyrule */ 96264790Sbapt#define YYPREFIX "ok_syntax1_" 97264790Sbapt 98264790Sbapt#define YYPURE 1 99264790Sbapt 100264790Sbapt#line 9 "ok_syntax1.y" 101264790Sbapt# include <stdio.h> 102264790Sbapt# include <ctype.h> 103264790Sbapt 104264790Sbapt#ifdef YYBISON 105264790Sbapt#define YYSTYPE int 106264790Sbapt#define YYLEX_PARAM base 107264790Sbapt#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) 108264790Sbapt#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 109264790Sbaptint YYLEX_DECL(); 110264790Sbaptstatic void YYERROR_DECL(); 111264790Sbapt#endif 112264790Sbapt 113264790Sbapt#line 43 "ok_syntax1.y" 114264790Sbapt#ifdef YYSTYPE 115264790Sbapt#undef YYSTYPE_IS_DECLARED 116264790Sbapt#define YYSTYPE_IS_DECLARED 1 117264790Sbapt#endif 118264790Sbapt#ifndef YYSTYPE_IS_DECLARED 119264790Sbapt#define YYSTYPE_IS_DECLARED 1 120264790Sbapttypedef union 121264790Sbapt{ 122264790Sbapt char * cval; 123264790Sbapt int ival; 124264790Sbapt double dval; 125264790Sbapt} YYSTYPE; 126264790Sbapt#endif /* !YYSTYPE_IS_DECLARED */ 127264790Sbapt#line 128 "ok_syntax1.tab.c" 128264790Sbapt 129264790Sbapt/* compatibility with bison */ 130264790Sbapt#ifdef YYPARSE_PARAM 131264790Sbapt/* compatibility with FreeBSD */ 132264790Sbapt# ifdef YYPARSE_PARAM_TYPE 133264790Sbapt# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 134264790Sbapt# else 135264790Sbapt# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 136264790Sbapt# endif 137264790Sbapt#else 138264790Sbapt# define YYPARSE_DECL() yyparse(int regs[26], int * base) 139264790Sbapt#endif 140264790Sbapt 141264790Sbapt/* Parameters sent to lex. */ 142264790Sbapt#ifdef YYLEX_PARAM 143264790Sbapt# ifdef YYLEX_PARAM_TYPE 144264790Sbapt# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) 145264790Sbapt# else 146264790Sbapt# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) 147264790Sbapt# endif 148264790Sbapt# define YYLEX yylex(&yylval, YYLEX_PARAM) 149264790Sbapt#else 150264790Sbapt# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base) 151264790Sbapt# define YYLEX yylex(&yylval, base) 152264790Sbapt#endif 153264790Sbapt 154264790Sbapt/* Parameters sent to yyerror. */ 155264790Sbapt#ifndef YYERROR_DECL 156264790Sbapt#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s) 157264790Sbapt#endif 158264790Sbapt#ifndef YYERROR_CALL 159264790Sbapt#define YYERROR_CALL(msg) yyerror(regs, base, msg) 160264790Sbapt#endif 161264790Sbapt 162264790Sbaptextern int YYPARSE_DECL(); 163264790Sbapt 164264790Sbapt#define DIGIT 257 165264790Sbapt#define LETTER 258 166264790Sbapt#define OCT1 259 167264790Sbapt#define HEX1 260 168264790Sbapt#define HEX2 261 169264790Sbapt#define HEX3 262 170264790Sbapt#define STR1 263 171264790Sbapt#define STR2 265 172264790Sbapt#define BELL 266 173264790Sbapt#define BS 267 174264790Sbapt#define NL 268 175264790Sbapt#define LF 269 176264790Sbapt#define CR 270 177264790Sbapt#define TAB 271 178264790Sbapt#define VT 272 179264790Sbapt#define UMINUS 273 180264790Sbapt#define YYERRCODE 256 181264790Sbapttypedef short YYINT; 182264790Sbaptstatic const YYINT ok_syntax1_lhs[] = { -1, 183264790Sbapt 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 184264790Sbapt 2, 2, 2, 2, 2, 2, 3, 3, 185264790Sbapt}; 186264790Sbaptstatic const YYINT ok_syntax1_len[] = { 2, 187264790Sbapt 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 188264790Sbapt 3, 3, 3, 2, 1, 1, 1, 2, 189264790Sbapt}; 190264790Sbaptstatic const YYINT ok_syntax1_defred[] = { 1, 191264790Sbapt 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 192264790Sbapt 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 193264790Sbapt 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 194264790Sbapt 10, 11, 195264790Sbapt}; 196264790Sbaptstatic const YYINT ok_syntax1_dgoto[] = { 1, 197264790Sbapt 7, 8, 9, 198264790Sbapt}; 199264790Sbaptstatic const YYINT ok_syntax1_sindex[] = { 0, 200264790Sbapt -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 201264790Sbapt -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 202264790Sbapt -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 203264790Sbapt 0, 0, 204264790Sbapt}; 205264790Sbaptstatic const YYINT ok_syntax1_rindex[] = { 0, 206264790Sbapt 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 207264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208264790Sbapt 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 209264790Sbapt 0, 0, 210264790Sbapt}; 211264790Sbaptstatic const YYINT ok_syntax1_gindex[] = { 0, 212264790Sbapt 0, 65, 0, 213264790Sbapt}; 214264790Sbapt#define YYTABLESIZE 220 215264790Sbaptstatic const YYINT ok_syntax1_table[] = { 6, 216264790Sbapt 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 217264790Sbapt 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 218264790Sbapt 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 219264790Sbapt 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 220264790Sbapt 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 221264790Sbapt 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 222264790Sbapt 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 223264790Sbapt 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 224264790Sbapt 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 225264790Sbapt 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 226264790Sbapt 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 227264790Sbapt 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 228264790Sbapt 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 229264790Sbapt 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 230264790Sbapt 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 231264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237264790Sbapt 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, 238264790Sbapt}; 239264790Sbaptstatic const YYINT ok_syntax1_check[] = { 40, 240264790Sbapt 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 241264790Sbapt 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 242264790Sbapt -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 243264790Sbapt -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 244264790Sbapt -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 245264790Sbapt 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 246264790Sbapt -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 247264790Sbapt 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 248264790Sbapt 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 249264790Sbapt -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 250264790Sbapt -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 251264790Sbapt -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 252264790Sbapt -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 253264790Sbapt -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 254264790Sbapt -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 255264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 259264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 261264790Sbapt -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 262264790Sbapt}; 263264790Sbapt#define YYFINAL 1 264264790Sbapt#ifndef YYDEBUG 265264790Sbapt#define YYDEBUG 0 266264790Sbapt#endif 267264790Sbapt#define YYMAXTOKEN 273 268264790Sbapt#define YYUNDFTOKEN 279 269264790Sbapt#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 270264790Sbapt#if YYDEBUG 271264790Sbaptstatic const char *const ok_syntax1_name[] = { 272264790Sbapt 273264790Sbapt"end-of-file",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'", 274264790Sbapt"'\\r'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('", 275264790Sbapt"')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0, 276264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0, 277264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0, 278264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 279264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 280264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 281264790Sbapt"'\\377'",0,"DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1", 282264790Sbapt"\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",0, 283264790Sbapt0,0,0,0,"illegal-symbol", 284264790Sbapt}; 285264790Sbaptstatic const char *const ok_syntax1_rule[] = { 286264790Sbapt"$accept : list", 287264790Sbapt"list :", 288264790Sbapt"list : list stat '\\n'", 289264790Sbapt"list : list error '\\n'", 290264790Sbapt"stat : expr", 291264790Sbapt"stat : LETTER '=' expr", 292264790Sbapt"expr : '(' expr ')'", 293264790Sbapt"expr : expr '+' expr", 294264790Sbapt"expr : expr '-' expr", 295264790Sbapt"expr : expr '*' expr", 296264790Sbapt"expr : expr '/' expr", 297264790Sbapt"expr : expr '%' expr", 298264790Sbapt"expr : expr '&' expr", 299264790Sbapt"expr : expr '|' expr", 300264790Sbapt"expr : '-' expr", 301264790Sbapt"expr : LETTER", 302264790Sbapt"expr : number", 303264790Sbapt"number : DIGIT", 304264790Sbapt"number : number DIGIT", 305264790Sbapt 306264790Sbapt}; 307264790Sbapt#endif 308264790Sbapt 309264790Sbaptint yydebug; 310264790Sbaptint yynerrs; 311264790Sbapt 312264790Sbapt/* define the initial stack-sizes */ 313264790Sbapt#ifdef YYSTACKSIZE 314264790Sbapt#undef YYMAXDEPTH 315264790Sbapt#define YYMAXDEPTH YYSTACKSIZE 316264790Sbapt#else 317264790Sbapt#ifdef YYMAXDEPTH 318264790Sbapt#define YYSTACKSIZE YYMAXDEPTH 319264790Sbapt#else 320264790Sbapt#define YYSTACKSIZE 10000 321264790Sbapt#define YYMAXDEPTH 10000 322264790Sbapt#endif 323264790Sbapt#endif 324264790Sbapt 325264790Sbapt#define YYINITSTACKSIZE 200 326264790Sbapt 327264790Sbapttypedef struct { 328264790Sbapt unsigned stacksize; 329264790Sbapt YYINT *s_base; 330264790Sbapt YYINT *s_mark; 331264790Sbapt YYINT *s_last; 332264790Sbapt YYSTYPE *l_base; 333264790Sbapt YYSTYPE *l_mark; 334264790Sbapt} YYSTACKDATA; 335264790Sbapt#line 104 "ok_syntax1.y" 336264790Sbapt /* start of programs */ 337264790Sbapt 338264790Sbapt#ifdef YYBYACC 339264790Sbaptextern int YYLEX_DECL(); 340264790Sbapt#endif 341264790Sbapt 342264790Sbaptint 343264790Sbaptmain (void) 344264790Sbapt{ 345264790Sbapt int regs[26]; 346264790Sbapt int base = 10; 347264790Sbapt 348264790Sbapt while(!feof(stdin)) { 349264790Sbapt yyparse(regs, &base); 350264790Sbapt } 351264790Sbapt return 0; 352264790Sbapt} 353264790Sbapt 354264790Sbapt#define UNUSED(x) ((void)(x)) 355264790Sbapt 356264790Sbaptstatic void 357264790SbaptYYERROR_DECL() 358264790Sbapt{ 359264790Sbapt UNUSED(regs); /* %parse-param regs is not actually used here */ 360264790Sbapt UNUSED(base); /* %parse-param base is not actually used here */ 361264790Sbapt fprintf(stderr, "%s\n", s); 362264790Sbapt} 363264790Sbapt 364264790Sbaptint 365264790SbaptYYLEX_DECL() 366264790Sbapt{ 367264790Sbapt /* lexical analysis routine */ 368264790Sbapt /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 369264790Sbapt /* return DIGIT for a digit, yylval = 0 through 9 */ 370264790Sbapt /* all other characters are returned immediately */ 371264790Sbapt 372264790Sbapt int c; 373264790Sbapt 374264790Sbapt while( (c=getchar()) == ' ' ) { /* skip blanks */ } 375264790Sbapt 376264790Sbapt /* c is now nonblank */ 377264790Sbapt 378264790Sbapt if( islower( c )) { 379264790Sbapt yylval->ival = (c - 'a'); 380264790Sbapt return ( LETTER ); 381264790Sbapt } 382264790Sbapt if( isdigit( c )) { 383264790Sbapt yylval->ival = (c - '0') % (*base); 384264790Sbapt return ( DIGIT ); 385264790Sbapt } 386264790Sbapt return( c ); 387264790Sbapt} 388264790Sbapt#line 389 "ok_syntax1.tab.c" 389264790Sbapt 390264790Sbapt#if YYDEBUG 391264790Sbapt#include <stdio.h> /* needed for printf */ 392264790Sbapt#endif 393264790Sbapt 394264790Sbapt#include <stdlib.h> /* needed for malloc, etc */ 395264790Sbapt#include <string.h> /* needed for memset */ 396264790Sbapt 397264790Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 398264790Sbaptstatic int yygrowstack(YYSTACKDATA *data) 399264790Sbapt{ 400264790Sbapt int i; 401264790Sbapt unsigned newsize; 402264790Sbapt YYINT *newss; 403264790Sbapt YYSTYPE *newvs; 404264790Sbapt 405264790Sbapt if ((newsize = data->stacksize) == 0) 406264790Sbapt newsize = YYINITSTACKSIZE; 407264790Sbapt else if (newsize >= YYMAXDEPTH) 408264790Sbapt return YYENOMEM; 409264790Sbapt else if ((newsize *= 2) > YYMAXDEPTH) 410264790Sbapt newsize = YYMAXDEPTH; 411264790Sbapt 412264790Sbapt i = (int) (data->s_mark - data->s_base); 413264790Sbapt newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 414264790Sbapt if (newss == 0) 415264790Sbapt return YYENOMEM; 416264790Sbapt 417264790Sbapt data->s_base = newss; 418264790Sbapt data->s_mark = newss + i; 419264790Sbapt 420264790Sbapt newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 421264790Sbapt if (newvs == 0) 422264790Sbapt return YYENOMEM; 423264790Sbapt 424264790Sbapt data->l_base = newvs; 425264790Sbapt data->l_mark = newvs + i; 426264790Sbapt 427264790Sbapt data->stacksize = newsize; 428264790Sbapt data->s_last = data->s_base + newsize - 1; 429264790Sbapt return 0; 430264790Sbapt} 431264790Sbapt 432264790Sbapt#if YYPURE || defined(YY_NO_LEAKS) 433264790Sbaptstatic void yyfreestack(YYSTACKDATA *data) 434264790Sbapt{ 435264790Sbapt free(data->s_base); 436264790Sbapt free(data->l_base); 437264790Sbapt memset(data, 0, sizeof(*data)); 438264790Sbapt} 439264790Sbapt#else 440264790Sbapt#define yyfreestack(data) /* nothing */ 441264790Sbapt#endif 442264790Sbapt 443264790Sbapt#define YYABORT goto yyabort 444264790Sbapt#define YYREJECT goto yyabort 445264790Sbapt#define YYACCEPT goto yyaccept 446264790Sbapt#define YYERROR goto yyerrlab 447264790Sbapt 448264790Sbaptint 449264790SbaptYYPARSE_DECL() 450264790Sbapt{ 451264790Sbapt int yyerrflag; 452264790Sbapt int yychar; 453264790Sbapt YYSTYPE yyval; 454264790Sbapt YYSTYPE yylval; 455264790Sbapt 456264790Sbapt /* variables for the parser stack */ 457264790Sbapt YYSTACKDATA yystack; 458264790Sbapt int yym, yyn, yystate; 459264790Sbapt#if YYDEBUG 460264790Sbapt const char *yys; 461264790Sbapt 462264790Sbapt if ((yys = getenv("YYDEBUG")) != 0) 463264790Sbapt { 464264790Sbapt yyn = *yys; 465264790Sbapt if (yyn >= '0' && yyn <= '9') 466264790Sbapt yydebug = yyn - '0'; 467264790Sbapt } 468264790Sbapt#endif 469264790Sbapt 470264790Sbapt yynerrs = 0; 471264790Sbapt yyerrflag = 0; 472264790Sbapt yychar = YYEMPTY; 473264790Sbapt yystate = 0; 474264790Sbapt 475264790Sbapt#if YYPURE 476264790Sbapt memset(&yystack, 0, sizeof(yystack)); 477264790Sbapt#endif 478264790Sbapt 479264790Sbapt if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 480264790Sbapt yystack.s_mark = yystack.s_base; 481264790Sbapt yystack.l_mark = yystack.l_base; 482264790Sbapt yystate = 0; 483264790Sbapt *yystack.s_mark = 0; 484264790Sbapt 485264790Sbaptyyloop: 486264790Sbapt if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 487264790Sbapt if (yychar < 0) 488264790Sbapt { 489264790Sbapt if ((yychar = YYLEX) < 0) yychar = YYEOF; 490264790Sbapt#if YYDEBUG 491264790Sbapt if (yydebug) 492264790Sbapt { 493264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 494264790Sbapt printf("%sdebug: state %d, reading %d (%s)\n", 495264790Sbapt YYPREFIX, yystate, yychar, yys); 496264790Sbapt } 497264790Sbapt#endif 498264790Sbapt } 499264790Sbapt if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 500264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 501264790Sbapt { 502264790Sbapt#if YYDEBUG 503264790Sbapt if (yydebug) 504264790Sbapt printf("%sdebug: state %d, shifting to state %d\n", 505264790Sbapt YYPREFIX, yystate, yytable[yyn]); 506264790Sbapt#endif 507264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 508264790Sbapt { 509264790Sbapt goto yyoverflow; 510264790Sbapt } 511264790Sbapt yystate = yytable[yyn]; 512264790Sbapt *++yystack.s_mark = yytable[yyn]; 513264790Sbapt *++yystack.l_mark = yylval; 514264790Sbapt yychar = YYEMPTY; 515264790Sbapt if (yyerrflag > 0) --yyerrflag; 516264790Sbapt goto yyloop; 517264790Sbapt } 518264790Sbapt if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 519264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 520264790Sbapt { 521264790Sbapt yyn = yytable[yyn]; 522264790Sbapt goto yyreduce; 523264790Sbapt } 524264790Sbapt if (yyerrflag) goto yyinrecovery; 525264790Sbapt 526264790Sbapt YYERROR_CALL("syntax error"); 527264790Sbapt 528264790Sbapt goto yyerrlab; 529264790Sbapt 530264790Sbaptyyerrlab: 531264790Sbapt ++yynerrs; 532264790Sbapt 533264790Sbaptyyinrecovery: 534264790Sbapt if (yyerrflag < 3) 535264790Sbapt { 536264790Sbapt yyerrflag = 3; 537264790Sbapt for (;;) 538264790Sbapt { 539264790Sbapt if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 540264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 541264790Sbapt { 542264790Sbapt#if YYDEBUG 543264790Sbapt if (yydebug) 544264790Sbapt printf("%sdebug: state %d, error recovery shifting\ 545264790Sbapt to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 546264790Sbapt#endif 547264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 548264790Sbapt { 549264790Sbapt goto yyoverflow; 550264790Sbapt } 551264790Sbapt yystate = yytable[yyn]; 552264790Sbapt *++yystack.s_mark = yytable[yyn]; 553264790Sbapt *++yystack.l_mark = yylval; 554264790Sbapt goto yyloop; 555264790Sbapt } 556264790Sbapt else 557264790Sbapt { 558264790Sbapt#if YYDEBUG 559264790Sbapt if (yydebug) 560264790Sbapt printf("%sdebug: error recovery discarding state %d\n", 561264790Sbapt YYPREFIX, *yystack.s_mark); 562264790Sbapt#endif 563264790Sbapt if (yystack.s_mark <= yystack.s_base) goto yyabort; 564264790Sbapt --yystack.s_mark; 565264790Sbapt --yystack.l_mark; 566264790Sbapt } 567264790Sbapt } 568264790Sbapt } 569264790Sbapt else 570264790Sbapt { 571264790Sbapt if (yychar == YYEOF) goto yyabort; 572264790Sbapt#if YYDEBUG 573264790Sbapt if (yydebug) 574264790Sbapt { 575264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 576264790Sbapt printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 577264790Sbapt YYPREFIX, yystate, yychar, yys); 578264790Sbapt } 579264790Sbapt#endif 580264790Sbapt yychar = YYEMPTY; 581264790Sbapt goto yyloop; 582264790Sbapt } 583264790Sbapt 584264790Sbaptyyreduce: 585264790Sbapt#if YYDEBUG 586264790Sbapt if (yydebug) 587264790Sbapt printf("%sdebug: state %d, reducing by rule %d (%s)\n", 588264790Sbapt YYPREFIX, yystate, yyn, yyrule[yyn]); 589264790Sbapt#endif 590264790Sbapt yym = yylen[yyn]; 591264790Sbapt if (yym) 592264790Sbapt yyval = yystack.l_mark[1-yym]; 593264790Sbapt else 594264790Sbapt memset(&yyval, 0, sizeof yyval); 595264790Sbapt switch (yyn) 596264790Sbapt { 597264790Sbaptcase 3: 598264790Sbapt#line 66 "ok_syntax1.y" 599264790Sbapt { yyerrok ; } 600264790Sbaptbreak; 601264790Sbaptcase 4: 602264790Sbapt#line 70 "ok_syntax1.y" 603264790Sbapt { printf("%d\n",yystack.l_mark[0].ival);} 604264790Sbaptbreak; 605264790Sbaptcase 5: 606264790Sbapt#line 72 "ok_syntax1.y" 607264790Sbapt { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; } 608264790Sbaptbreak; 609264790Sbaptcase 6: 610264790Sbapt#line 76 "ok_syntax1.y" 611264790Sbapt { yyval.ival = yystack.l_mark[-1].ival; } 612264790Sbaptbreak; 613264790Sbaptcase 7: 614264790Sbapt#line 78 "ok_syntax1.y" 615264790Sbapt { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; } 616264790Sbaptbreak; 617264790Sbaptcase 8: 618264790Sbapt#line 80 "ok_syntax1.y" 619264790Sbapt { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; } 620264790Sbaptbreak; 621264790Sbaptcase 9: 622264790Sbapt#line 82 "ok_syntax1.y" 623264790Sbapt { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; } 624264790Sbaptbreak; 625264790Sbaptcase 10: 626264790Sbapt#line 84 "ok_syntax1.y" 627264790Sbapt { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; } 628264790Sbaptbreak; 629264790Sbaptcase 11: 630264790Sbapt#line 86 "ok_syntax1.y" 631264790Sbapt { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; } 632264790Sbaptbreak; 633264790Sbaptcase 12: 634264790Sbapt#line 88 "ok_syntax1.y" 635264790Sbapt { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; } 636264790Sbaptbreak; 637264790Sbaptcase 13: 638264790Sbapt#line 90 "ok_syntax1.y" 639264790Sbapt { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; } 640264790Sbaptbreak; 641264790Sbaptcase 14: 642264790Sbapt#line 92 "ok_syntax1.y" 643264790Sbapt { yyval.ival = - yystack.l_mark[0].ival; } 644264790Sbaptbreak; 645264790Sbaptcase 15: 646264790Sbapt#line 94 "ok_syntax1.y" 647264790Sbapt { yyval.ival = regs[yystack.l_mark[0].ival]; } 648264790Sbaptbreak; 649264790Sbaptcase 17: 650264790Sbapt#line 99 "ok_syntax1.y" 651264790Sbapt { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; } 652264790Sbaptbreak; 653264790Sbaptcase 18: 654264790Sbapt#line 101 "ok_syntax1.y" 655264790Sbapt { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; } 656264790Sbaptbreak; 657264790Sbapt#line 658 "ok_syntax1.tab.c" 658264790Sbapt } 659264790Sbapt yystack.s_mark -= yym; 660264790Sbapt yystate = *yystack.s_mark; 661264790Sbapt yystack.l_mark -= yym; 662264790Sbapt yym = yylhs[yyn]; 663264790Sbapt if (yystate == 0 && yym == 0) 664264790Sbapt { 665264790Sbapt#if YYDEBUG 666264790Sbapt if (yydebug) 667264790Sbapt printf("%sdebug: after reduction, shifting from state 0 to\ 668264790Sbapt state %d\n", YYPREFIX, YYFINAL); 669264790Sbapt#endif 670264790Sbapt yystate = YYFINAL; 671264790Sbapt *++yystack.s_mark = YYFINAL; 672264790Sbapt *++yystack.l_mark = yyval; 673264790Sbapt if (yychar < 0) 674264790Sbapt { 675264790Sbapt if ((yychar = YYLEX) < 0) yychar = YYEOF; 676264790Sbapt#if YYDEBUG 677264790Sbapt if (yydebug) 678264790Sbapt { 679264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 680264790Sbapt printf("%sdebug: state %d, reading %d (%s)\n", 681264790Sbapt YYPREFIX, YYFINAL, yychar, yys); 682264790Sbapt } 683264790Sbapt#endif 684264790Sbapt } 685264790Sbapt if (yychar == YYEOF) goto yyaccept; 686264790Sbapt goto yyloop; 687264790Sbapt } 688264790Sbapt if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 689264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 690264790Sbapt yystate = yytable[yyn]; 691264790Sbapt else 692264790Sbapt yystate = yydgoto[yym]; 693264790Sbapt#if YYDEBUG 694264790Sbapt if (yydebug) 695264790Sbapt printf("%sdebug: after reduction, shifting from state %d \ 696264790Sbaptto state %d\n", YYPREFIX, *yystack.s_mark, yystate); 697264790Sbapt#endif 698264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 699264790Sbapt { 700264790Sbapt goto yyoverflow; 701264790Sbapt } 702264790Sbapt *++yystack.s_mark = (YYINT) yystate; 703264790Sbapt *++yystack.l_mark = yyval; 704264790Sbapt goto yyloop; 705264790Sbapt 706264790Sbaptyyoverflow: 707264790Sbapt YYERROR_CALL("yacc stack overflow"); 708264790Sbapt 709264790Sbaptyyabort: 710264790Sbapt yyfreestack(&yystack); 711264790Sbapt return (1); 712264790Sbapt 713264790Sbaptyyaccept: 714264790Sbapt yyfreestack(&yystack); 715264790Sbapt return (0); 716264790Sbapt} 717