📄 dosyacc.c
字号:
/* Copyright: (c) Julian Smart *//* Licence: wxWindows Licence *//* include platform.h first to get __WIN32__ definition */#include "wx/platform.h"#include "wx/setup.h"#include "wx/deprecated/setup.h"#if !defined(wxUSE_PROLOGIO) || wxUSE_PROLOGIO#ifdef __VISUALC__ #pragma warning(push) #pragma warning(disable:4244) /* warning C4244: '=' : conversion from 'A' to 'B', possible loss of data */#endif#if !defined(lint) && 0static char yysccsid[] = "@(#)yaccpar 1.7 (Berkeley) 09/09/90";#endif#define YYBYACC 1// #line 2 "parser.y"#include "string.h"#if defined(_MSC_VER) || defined(__VISAGECPP__)#include <io.h>#endif#include "wx/deprecated/expr.h"#ifndef __EXTERN_C__#define __EXTERN_C__ 1#endif#if defined(__cplusplus) || defined(__STDC__)#if defined(__cplusplus) && defined(__EXTERN_C__)extern "C" {#endif#endifint yylex(void);int yylook(void);int yywrap(void);int yyback(int *, int);/* You may need to put /DLEX_SCANNER in your makefile * if you're using LEX! */#ifdef LEX_SCANNER/* int yyoutput(int); */void yyoutput(int);#elsevoid yyoutput(int);#endif#if defined(__cplusplus) || defined(__STDC__)#if defined(__cplusplus) && defined(__EXTERN_C__)}#endif#endif// #line 36 "parser.y"typedef union { char *s;/* struct pexpr *expr; */} YYSTYPE;// #line 44 "y_tab.c"#define INTEGER 1#define WORD 2#define STRING 3#define PERIOD 13#define OPEN 4#define CLOSE 5#define COMMA 6#define NEWLINE 7#define ERROR 8#define OPEN_SQUARE 9#define CLOSE_SQUARE 10#define EQUALS 11#define EXP 14#define YYERRCODE 256short yylhs[] = { -1, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5,};short yylen[] = { 2, 0, 2, 2, 2, 2, 4, 2, 3, 0, 1, 3, 3, 1, 1, 1, 1, 3, 3, 5, 1,};short yydefred[] = { 1, 0, 0, 0, 0, 2, 0, 5, 3, 0, 0, 0, 15, 7, 20, 0, 0, 13, 4, 0, 0, 0, 0, 8, 0, 6, 0, 18, 0, 12, 11, 0, 19,};short yydgoto[] = { 1, 5, 14, 15, 16, 17,};short yysindex[] = { 0, -2, 9, 2, 1, 0, 10, 0, 0, 11, -5, 17, 0, 0, 0, 14, -1, 0, 0, 33, 38, 41, 16, 0, 11, 0, 29, 0, 40, 0, 0, 44, 0,};short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 21, 24, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 31, 0, 27, 0, 24, 0, 0, 0, 0,};short yygindex[] = { 0, 0, 45, -8, 0, 26,};#define YYTABLESIZE 254short yytable[] = { 3, 19, 10, 11, 12, 24, 9, 4, 20, 21, 4, 13, 10, 11, 12, 8, 30, 10, 28, 12, 4, 9, 7, 18, 23, 4, 16, 16, 22, 14, 14, 16, 17, 17, 14, 10, 9, 17, 25, 26, 10, 9, 27, 31, 9, 32, 6, 9, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,};short yycheck[] = { 2, 9, 1, 2, 3, 6, 4, 9, 13, 14, 9, 10, 1, 2, 3, 13, 24, 1, 2, 3, 9, 4, 13, 13, 10, 9, 5, 6, 11, 5, 6, 10, 5, 6, 10, 5, 5, 10, 5, 1, 10, 10, 1, 14, 4, 1, 1, 5, 22, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256,};#define YYFINAL 1#ifndef YYDEBUG#define YYDEBUG 0#endif#define YYMAXTOKEN 14#if YYDEBUGchar *yyname[] = {"end-of-file","INTEGER","WORD","STRING","OPEN","CLOSE","COMMA","NEWLINE","ERROR","OPEN_SQUARE","CLOSE_SQUARE","EQUALS",0,"PERIOD","EXP",};char *yyrule[] = {"$accept : commands","commands :","commands : commands command","command : WORD PERIOD","command : expr PERIOD","command : error PERIOD","expr : WORD OPEN arglist CLOSE","expr : OPEN_SQUARE CLOSE_SQUARE","expr : OPEN_SQUARE arglist CLOSE_SQUARE","arglist :","arglist : arg","arglist : arg COMMA arglist","arg : WORD EQUALS arg1","arg : arg1","arg1 : WORD","arg1 : STRING","arg1 : INTEGER","arg1 : INTEGER PERIOD INTEGER","arg1 : INTEGER EXP INTEGER","arg1 : INTEGER PERIOD INTEGER EXP INTEGER","arg1 : expr",};#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#endifint 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 118 "parser.y"#include "doslex.c"/*void yyerror(s)char *s;{ syntax_error(s);}*//* Ansi prototype. If this doesn't work for you... uncomment the above instead. */void yyerror(char *s){ syntax_error(s);}/* * Unfortunately, my DOS version of FLEX * requires yywrap to be #def'ed, whereas * the UNIX flex expects a proper function. *//* Not sure if __SC__ is the appropriate thing * to test */#if 0 /* VS: doesn't work... */#ifndef __SC__#ifdef USE_DEFINE#ifndef yywrap#define yywrap() 1#endif#else# if !(defined(__VISAGECPP__) && __IBMC__ >= 400)/* VA 4.0 thinks this is multiply defined (in lex_yy.c) */ int yywrap() { return 1; }# endif#endif#endif#endif// #line 247 "y_tab.c"#define YYABORT goto yyabort#define YYACCEPT goto yyaccept#define YYERROR goto yyerrlabintPROIO_yyparse(){ register int yym, yyn, yystate;#if YYDEBUG register char *yys; extern char *getenv(); yys = getenv("YYDEBUG"); if (yys) { 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: yyn = yydefred[yystate]; if (yyn != 0) 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 } yyn = yysindex[yystate]; if ((yyn) && (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; } yyn = yyrindex[yystate]; if ((yyn) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery;#ifdef lint goto yynewerror;yynewerror:#endif yyerror("syntax error");#ifdef lint goto yyerrlab;yyerrlab:#endif ++yynerrs;yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { yyn = yysindex[*yyssp]; if ((yyn) && (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 68 "parser.y"{process_command(proio_cons(wxmake_word(yyvsp[-1].s), NULL)); free(yyvsp[-1].s);}break;case 4:// #line 70 "parser.y"{process_command(yyvsp[-1].s);}break;case 5:// #line 72 "parser.y"{syntax_error("Unrecognized command.");}break;case 6:// #line 76 "parser.y"{yyval.s = proio_cons(wxmake_word(yyvsp[-3].s), yyvsp[-1].s); free(yyvsp[-3].s);}break;case 7:// #line 78 "parser.y"{yyval.s = proio_cons(NULL, NULL);}break;case 8:// #line 80 "parser.y"{yyval.s = yyvsp[-1].s; }break;case 9:// #line 84 "parser.y"{yyval.s = NULL;}break;case 10:// #line 86 "parser.y"{yyval.s = proio_cons(yyvsp[0].s, NULL);}break;case 11:// #line 89 "parser.y"{yyval.s = proio_cons(yyvsp[-2].s, yyvsp[0].s);}break;case 12:// #line 93 "parser.y"{yyval.s = proio_cons(wxmake_word("="), proio_cons(wxmake_word(yyvsp[-2].s), proio_cons(yyvsp[0].s, NULL))); free(yyvsp[-2].s); }break;case 13:// #line 96 "parser.y"{yyval.s = yyvsp[0].s; }break;case 14:// #line 99 "parser.y"{yyval.s = wxmake_word(yyvsp[0].s); free(yyvsp[0].s);}break;case 15:// #line 101 "parser.y"{yyval.s = wxmake_string(yyvsp[0].s); free(yyvsp[0].s);}break;case 16:// #line 103 "parser.y"{yyval.s = wxmake_integer(yyvsp[0].s); free(yyvsp[0].s);}break;case 17:// #line 105 "parser.y"{yyval.s = wxmake_real(yyvsp[-2].s, yyvsp[0].s); free(yyvsp[-2].s); free(yyvsp[0].s); }break;case 18:// #line 107 "parser.y"{yyval.s = wxmake_exp(yyvsp[-2].s, yyvsp[0].s); free(yyvsp[-2].s); free(yyvsp[0].s); }break;case 19:// #line 110 "parser.y"{yyval.s = wxmake_exp2(yyvsp[-4].s, yyvsp[-2].s, yyvsp[0].s); free(yyvsp[-4].s); free(yyvsp[-2].s); free(yyvsp[0].s); }break;case 20:// #line 114 "parser.y"{yyval.s = yyvsp[0].s;}break;// #line 461 "y_tab.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) {#if 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; } yyn = yygindex[yym]; if ((yyn) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym];#if 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);}#ifdef __VISUALC__ #pragma warning(pop)#endif#endif /* wxUSE_PROLOGIO */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -