diff --git a/Utils/Scripter/lexer.cpp b/Utils/Scripter/lexer.cpp new file mode 100644 index 000000000..cbb5e4e65 --- /dev/null +++ b/Utils/Scripter/lexer.cpp @@ -0,0 +1,595 @@ +#include + +#line 1 "C:\\spongebob\\Utils\\scripter\\lexer.l" + +/**************************************************************************** +lexer.l +ParserWizard generated Lex file. + +Date: 07 December 2000 +****************************************************************************/ + +#include "parser.h" +#include "var.h" +#include + + + +#line 19 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" +// repeated because of possible precompiled header +#include + +#include "lexer.h" + +///////////////////////////////////////////////////////////////////////////// +// constructor + +YYLEXNAME::YYLEXNAME() +{ + yytables(); +#line 28 "C:\\spongebob\\Utils\\scripter\\lexer.l" + + // place any extra initialisation code here + +#line 35 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" +} + +#ifndef YYTEXT_SIZE +#define YYTEXT_SIZE 100 +#endif +#ifndef YYUNPUT_SIZE +#define YYUNPUT_SIZE YYTEXT_SIZE +#endif + +// backwards compatability with lex +#ifdef input +int YYLEXNAME::yyinput() +{ + return input(); +} +#else +#define input yyinput +#endif + +#ifdef output +void YYLEXNAME::yyoutput(int ch) +{ + output(ch); +} +#else +#define output yyoutput +#endif + +#ifdef unput +void YYLEXNAME::yyunput(int ch) +{ + unput(ch); +} +#else +#define unput yyunput +#endif + +#ifndef YYNBORLANDWARN +#ifdef __BORLANDC__ +#pragma warn -rch // off +#endif +#endif + +int YYLEXNAME::yyaction(int action) +{ +#line 40 "C:\\spongebob\\Utils\\scripter\\lexer.l" + +// extract yylval for use later on in actions +YYSTYPE& yylval = *(YYSTYPE*)yyparserptr->yylvalptr; + +#line 86 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + yyreturnflg = 1; + switch (action) { + case 1: + { +#line 47 "C:\\spongebob\\Utils\\scripter\\lexer.l" +/*preprocess(yytext);*/ +#line 93 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 2: + { +#line 49 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return STOP; +#line 100 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 3: + { +#line 50 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return IF; +#line 107 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 4: + { +#line 51 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return ELSE; +#line 114 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 5: + { +#line 52 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return PAUSE; +#line 121 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 6: + { +#line 53 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return PRINT; +#line 128 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 7: + { +#line 54 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return ASSIGN; +#line 135 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 8: + { +#line 55 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return EQUAL; +#line 142 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 9: + { +#line 56 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return NOTEQUAL; +#line 149 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 10: + { +#line 57 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return PLUS; +#line 156 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 11: + { +#line 58 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return END_STMT; +#line 163 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 12: + { +#line 59 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return OPEN_PAR; +#line 170 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 13: + { +#line 60 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return CLOSE_PAR; +#line 177 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 14: + { +#line 61 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return BEGIN_CS; +#line 184 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 15: + { +#line 62 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return END_CS; +#line 191 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 16: + { +#line 63 "C:\\spongebob\\Utils\\scripter\\lexer.l" +yylval.variableIdx=lookupVarName(yytext+1);return VARIABLE; +#line 198 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 17: + { +#line 64 "C:\\spongebob\\Utils\\scripter\\lexer.l" + +#line 205 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 18: + { +#line 65 "C:\\spongebob\\Utils\\scripter\\lexer.l" +yylval.value=atoi(yytext);return VALUE; +#line 212 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 19: + { +#line 66 "C:\\spongebob\\Utils\\scripter\\lexer.l" + +#line 219 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 20: + { +#line 67 "C:\\spongebob\\Utils\\scripter\\lexer.l" +/*s_linesProcessed++;*/ +#line 226 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 21: + { +#line 68 "C:\\spongebob\\Utils\\scripter\\lexer.l" +printf("?\n");/*printf("line:%d\n",yylineno);printf("-%s-\n",yytext);yyerror("Unexpected character in source");*/ +#line 233 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + default: + yyassert(0); + break; + } + yyreturnflg = 0; + return 0; +} + +#ifndef YYNBORLANDWARN +#ifdef __BORLANDC__ +#pragma warn .rch // to the old state +#endif +#endif +#line 71 "C:\\spongebob\\Utils\\scripter\\lexer.l" + + + +///////////////////////////////////////////////////////////////////////////// +// programs section + + +#line 257 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + +void YYLEXNAME::yytables() +{ + yystext_size = YYTEXT_SIZE; + yysunput_size = YYUNPUT_SIZE; + + static const yymatch_t YYNEARFAR YYBASED_CODE match[] = { + 0 + }; + yymatch = match; + + yytransitionmax = 251; + static const yytransition_t YYNEARFAR YYBASED_CODE transition[] = { + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 18, 1 }, + { 40, 40 }, + { 18, 18 }, + { 0, 29 }, + { 0, 41 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 18, 1 }, + { 40, 40 }, + { 18, 18 }, + { 20, 1 }, + { 41, 40 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 29, 16 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 26, 7 }, + { 27, 8 }, + { 0, 0 }, + { 0, 0 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 28, 28 }, + { 0, 0 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 28, 28 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 0, 15 }, + { 40, 2 }, + { 19, 2 }, + { 32, 24 }, + { 39, 37 }, + { 21, 3 }, + { 24, 6 }, + { 31, 23 }, + { 36, 32 }, + { 34, 30 }, + { 30, 21 }, + { 37, 33 }, + { 23, 5 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 17, 17 }, + { 25, 6 }, + { 40, 2 }, + { 8, 2 }, + { 33, 25 }, + { 41, 2 }, + { 15, 2 }, + { 22, 4 }, + { 35, 31 }, + { 38, 36 }, + { 11, 2 }, + { 12, 2 }, + { 0, 0 }, + { 9, 2 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 16, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 17, 2 }, + { 0, 0 }, + { 10, 2 }, + { 0, 0 }, + { 7, 2 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 5, 2 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 4, 2 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 6, 2 }, + { 0, 0 }, + { 0, 0 }, + { 3, 2 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 13, 2 }, + { 0, 0 }, + { 14, 2 } + }; + yytransition = transition; + + static const yystate_t YYNEARFAR YYBASED_CODE state[] = { + { 0, 0, 0 }, + { 2, 1, 0 }, + { -20, 125, 0 }, + { 37, 22, 21 }, + { 0, 60, 21 }, + { 0, 37, 21 }, + { 0, 42, 21 }, + { 8, 1, 7 }, + { 0, 2, 21 }, + { 0, 0, 10 }, + { 0, 0, 11 }, + { 0, 0, 12 }, + { 0, 0, 13 }, + { 0, 0, 14 }, + { 0, 0, 15 }, + { 28, 76, 21 }, + { 0, 1, 21 }, + { 0, 98, 18 }, + { 0, 3, 19 }, + { 0, 0, 20 }, + { 0, 0, 21 }, + { 0, 32, 0 }, + { 0, 0, 3 }, + { 32, 25, 0 }, + { 0, 19, 0 }, + { 0, 54, 0 }, + { 0, 0, 8 }, + { 0, 0, 9 }, + { 37, 1, 16 }, + { -29, 3, 17 }, + { 0, 30, 0 }, + { 36, 62, 0 }, + { 0, 26, 0 }, + { 0, 34, 0 }, + { 0, 0, 2 }, + { 0, 0, 4 }, + { 0, 63, 0 }, + { 0, 21, 0 }, + { 0, 0, 5 }, + { 0, 0, 6 }, + { 18, 2, 19 }, + { -41, 4, 1 } + }; + yystate = state; + + static const yybackup_t YYNEARFAR YYBASED_CODE backup[] = { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }; + yybackup = backup; +} diff --git a/Utils/Scripter/lexer.h b/Utils/Scripter/lexer.h new file mode 100644 index 000000000..514abc169 --- /dev/null +++ b/Utils/Scripter/lexer.h @@ -0,0 +1,33 @@ +#ifndef _LEXER_H +#define _LEXER_H + +#include + +///////////////////////////////////////////////////////////////////////////// +// mylexer + +class YYFAR mylexer : public yyflexer { +public: + mylexer(); + +protected: + void yytables(); + virtual int yyaction(int action); + +public: +#line 23 "C:\\spongebob\\Utils\\scripter\\lexer.l" + + // place any extra class members here + +#line 23 "C:\\spongebob\\Utils\\scripter\\lexer.h" +}; + +#ifndef YYLEXNAME +#define YYLEXNAME mylexer +#endif + +#ifndef INITIAL +#define INITIAL 0 +#endif + +#endif diff --git a/Utils/Scripter/parser.cpp b/Utils/Scripter/parser.cpp new file mode 100644 index 000000000..57a70b497 --- /dev/null +++ b/Utils/Scripter/parser.cpp @@ -0,0 +1,625 @@ +#include + +#line 1 "C:\\spongebob\\Utils\\scripter\\parser.y" + +/**************************************************************************** +parser.y +ParserWizard generated YACC file. + +Date: 07 December 2000 +****************************************************************************/ + +#include "lexer.h" +#include "codegen.h" + + + +#line 18 "C:\\spongebob\\Utils\\scripter\\parser.cpp" +// repeated because of possible precompiled header +#include + +#include "parser.h" + +///////////////////////////////////////////////////////////////////////////// +// constructor + +YYPARSENAME::YYPARSENAME() +{ + yytables(); +#line 27 "C:\\spongebob\\Utils\\scripter\\parser.y" + + // place any extra initialisation code here + +#line 34 "C:\\spongebob\\Utils\\scripter\\parser.cpp" +} + +#ifndef YYSTYPE +#define YYSTYPE int +#endif +#ifndef YYSTACK_SIZE +#define YYSTACK_SIZE 100 +#endif + +// yyattribute +#ifdef YYDEBUG +void YYFAR* YYPARSENAME::yyattribute1(int index) const +{ + YYSTYPE YYFAR* p = &((YYSTYPE YYFAR*)yyattributestackptr)[yytop + index]; + return p; +} +#define yyattribute(index) (*(YYSTYPE YYFAR*)yyattribute1(index)) +#else +#define yyattribute(index) (((YYSTYPE YYFAR*)yyattributestackptr)[yytop + (index)]) +#endif + +#ifdef YYDEBUG +void YYPARSENAME::yyinitdebug(void YYFAR** p, int count) const +{ + yyassert(p != NULL); + yyassert(count >= 1); + + YYSTYPE YYFAR** p1 = (YYSTYPE YYFAR**)p; + for (int i = 0; i < count; i++) { + p1[i] = &((YYSTYPE YYFAR*)yyattributestackptr)[yytop + i - (count - 1)]; + } +} +#endif + +void YYPARSENAME::yyaction(int action) +{ + switch (action) { + case 0: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 80 "C:\\spongebob\\Utils\\scripter\\parser.y" +s_baseTreeNode=yyattribute(1 - 1).treenode; +#line 81 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 1: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[3]; + yyinitdebug((void YYFAR**)yya, 3); +#endif + { +#line 84 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(1 - 2).treenode,yyattribute(2 - 2).treenode); +#line 94 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 2: + { +#line 85 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EMPTY_STMT); +#line 102 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + break; + case 3: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 89 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EMPTY_STMT); +#line 114 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 4: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[3]; + yyinitdebug((void YYFAR**)yya, 3); +#endif + { +#line 90 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STOP_STMT); +#line 127 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 5: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[3]; + yyinitdebug((void YYFAR**)yya, 3); +#endif + { +#line 91 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PAUSE_STMT); +#line 140 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 6: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[6]; + yyinitdebug((void YYFAR**)yya, 6); +#endif + { +#line 92 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PRINT_STMT,yyattribute(3 - 5).treenode); +#line 153 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 7: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[3]; + yyinitdebug((void YYFAR**)yya, 3); +#endif + { +#line 93 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 2).treenode; +#line 166 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 8: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[6]; + yyinitdebug((void YYFAR**)yya, 6); +#endif + { +#line 94 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(IF_STMT,yyattribute(3 - 5).treenode,yyattribute(5 - 5).treenode); +#line 179 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 9: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[8]; + yyinitdebug((void YYFAR**)yya, 8); +#endif + { +#line 95 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(IFELSE_STMT,yyattribute(3 - 7).treenode,yyattribute(5 - 7).treenode,yyattribute(7 - 7).treenode); +#line 192 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 10: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); +#endif + { +#line 96 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(2 - 3).treenode); +#line 205 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 11: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); +#endif + { +#line 101 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(ASSIGN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 218 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 12: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); +#endif + { +#line 106 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(2 - 3).treenode; +#line 231 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 13: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 107 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; +#line 244 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 14: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 108 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; +#line 257 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 15: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); +#endif + { +#line 112 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 270 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 16: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); +#endif + { +#line 116 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(NOTEQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 283 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 17: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 121 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx); +#line 296 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 18: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 125 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VALUE_EXPR,yyattribute(1 - 1).value); +#line 309 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 19: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 126 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx); +#line 322 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 20: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); +#endif + { +#line 127 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PLUS_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 335 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + default: + yyassert(0); + break; + } +} +#line 130 "C:\\spongebob\\Utils\\scripter\\parser.y" + + + +///////////////////////////////////////////////////////////////////////////// +// programs section + +int main(void) +{ + int n=1; + +openOutputFile("test.dat"); + mylexer lexer; + myparser parser; + if(parser.yycreate(&lexer)) + { + if(lexer.yycreate(&parser)) + { + n=parser.yyparse(); + } + } + +if(s_baseTreeNode) +{ + s_baseTreeNode->generateCode(true); +} +closeOutputFile(); + + return n; +} + + +#line 376 "C:\\spongebob\\Utils\\scripter\\parser.cpp" +void YYPARSENAME::yytables() +{ + yyattribute_size = sizeof(YYSTYPE); + yysstack_size = YYSTACK_SIZE; + +#ifdef YYDEBUG + static const yysymbol_t YYNEARFAR YYBASED_CODE symbol[] = { + { "$end", 0 }, + { "error", 256 }, + { "STOP", 257 }, + { "IF", 258 }, + { "ELSE", 259 }, + { "PAUSE", 260 }, + { "PRINT", 261 }, + { "ASSIGN", 262 }, + { "EQUAL", 263 }, + { "NOTEQUAL", 264 }, + { "PLUS", 265 }, + { "END_STMT", 266 }, + { "OPEN_PAR", 267 }, + { "CLOSE_PAR", 268 }, + { "BEGIN_CS", 269 }, + { "END_CS", 270 }, + { "VARIABLE", 271 }, + { "VALUE", 272 }, + { NULL, 0 } + }; + yysymbol = symbol; + + static const char* const YYNEARFAR YYBASED_CODE rule[] = { + "$accept: program", + "program: statement_list", + "statement_list: statement_list statement", + "statement_list:", + "statement: END_STMT", + "statement: STOP END_STMT", + "statement: PAUSE END_STMT", + "statement: PRINT OPEN_PAR value CLOSE_PAR END_STMT", + "statement: assign_expression END_STMT", + "statement: IF OPEN_PAR expression CLOSE_PAR statement", + "statement: IF OPEN_PAR expression CLOSE_PAR statement ELSE statement", + "statement: BEGIN_CS statement_list END_CS", + "assign_expression: variable ASSIGN value", + "expression: OPEN_PAR expression CLOSE_PAR", + "expression: equal_expression", + "expression: notequal_expression", + "equal_expression: value EQUAL value", + "notequal_expression: value NOTEQUAL value", + "variable: VARIABLE", + "value: VALUE", + "value: VARIABLE", + "value: value PLUS value" + }; + yyrule = rule; +#endif + + static const yyreduction_t YYNEARFAR YYBASED_CODE reduction[] = { + { 0, 1, -1 }, + { 1, 1, 0 }, + { 2, 2, 1 }, + { 2, 0, 2 }, + { 3, 1, 3 }, + { 3, 2, 4 }, + { 3, 2, 5 }, + { 3, 5, 6 }, + { 3, 2, 7 }, + { 3, 5, 8 }, + { 3, 7, 9 }, + { 3, 3, 10 }, + { 4, 3, 11 }, + { 5, 3, 12 }, + { 5, 1, 13 }, + { 5, 1, 14 }, + { 6, 3, 15 }, + { 7, 3, 16 }, + { 8, 1, 17 }, + { 9, 1, 18 }, + { 9, 1, 19 }, + { 9, 3, 20 } + }; + yyreduction = reduction; + + static const yytokenaction_t YYNEARFAR YYBASED_CODE tokenaction[] = { + { 42, YYAT_SHIFT, 3 }, + { 42, YYAT_SHIFT, 4 }, + { 27, YYAT_SHIFT, 34 }, + { 42, YYAT_SHIFT, 5 }, + { 42, YYAT_SHIFT, 6 }, + { 27, YYAT_SHIFT, 35 }, + { 40, YYAT_SHIFT, 34 }, + { 2, YYAT_SHIFT, 3 }, + { 2, YYAT_SHIFT, 4 }, + { 42, YYAT_SHIFT, 7 }, + { 2, YYAT_SHIFT, 5 }, + { 2, YYAT_SHIFT, 6 }, + { 42, YYAT_SHIFT, 8 }, + { 39, YYAT_SHIFT, 34 }, + { 42, YYAT_SHIFT, 9 }, + { 38, YYAT_SHIFT, 34 }, + { 2, YYAT_SHIFT, 7 }, + { 26, YYAT_SHIFT, 32 }, + { 26, YYAT_SHIFT, 33 }, + { 2, YYAT_SHIFT, 8 }, + { 37, YYAT_SHIFT, 42 }, + { 2, YYAT_SHIFT, 9 }, + { 26, YYAT_ERROR, 0 }, + { 34, YYAT_SHIFT, 21 }, + { 34, YYAT_SHIFT, 22 }, + { 35, YYAT_SHIFT, 41 }, + { 30, YYAT_SHIFT, 36 }, + { 29, YYAT_SHIFT, 34 }, + { 23, YYAT_SHIFT, 31 }, + { 20, YYAT_SHIFT, 20 }, + { 17, YYAT_SHIFT, 28 }, + { 12, YYAT_SHIFT, 19 }, + { 11, YYAT_SHIFT, 18 }, + { 6, YYAT_SHIFT, 16 }, + { 5, YYAT_SHIFT, 15 }, + { 4, YYAT_SHIFT, 14 }, + { 3, YYAT_SHIFT, 13 }, + { 1, YYAT_ACCEPT, 0 } + }; + yytokenaction = tokenaction; + yytokenaction_size = 38; + + static const yystateaction_t YYNEARFAR YYBASED_CODE stateaction[] = { + { 0, 0, YYAT_REDUCE, 3 }, + { 37, 1, YYAT_ERROR, 0 }, + { -250, 1, YYAT_REDUCE, 1 }, + { -230, 1, YYAT_DEFAULT, 35 }, + { -232, 1, YYAT_DEFAULT, 6 }, + { -232, 1, YYAT_DEFAULT, 35 }, + { -234, 1, YYAT_ERROR, 0 }, + { 0, 0, YYAT_REDUCE, 4 }, + { 0, 0, YYAT_REDUCE, 3 }, + { 0, 0, YYAT_REDUCE, 18 }, + { 0, 0, YYAT_REDUCE, 2 }, + { -234, 1, YYAT_DEFAULT, 35 }, + { -231, 1, YYAT_ERROR, 0 }, + { 0, 0, YYAT_REDUCE, 5 }, + { 0, 0, YYAT_DEFAULT, 20 }, + { 0, 0, YYAT_REDUCE, 6 }, + { 0, 0, YYAT_DEFAULT, 34 }, + { -240, 1, YYAT_DEFAULT, 42 }, + { 0, 0, YYAT_REDUCE, 8 }, + { 0, 0, YYAT_DEFAULT, 34 }, + { -238, 1, YYAT_DEFAULT, 34 }, + { 0, 0, YYAT_REDUCE, 20 }, + { 0, 0, YYAT_REDUCE, 19 }, + { -240, 1, YYAT_DEFAULT, 30 }, + { 0, 0, YYAT_REDUCE, 14 }, + { 0, 0, YYAT_REDUCE, 15 }, + { -246, 1, YYAT_DEFAULT, 27 }, + { -263, 1, YYAT_DEFAULT, 30 }, + { 0, 0, YYAT_REDUCE, 11 }, + { -238, 1, YYAT_REDUCE, 12 }, + { -242, 1, YYAT_ERROR, 0 }, + { 0, 0, YYAT_DEFAULT, 42 }, + { 0, 0, YYAT_DEFAULT, 34 }, + { 0, 0, YYAT_DEFAULT, 34 }, + { -248, 1, YYAT_ERROR, 0 }, + { -241, 1, YYAT_ERROR, 0 }, + { 0, 0, YYAT_REDUCE, 13 }, + { -239, 1, YYAT_REDUCE, 9 }, + { -250, 1, YYAT_REDUCE, 16 }, + { -252, 1, YYAT_REDUCE, 17 }, + { -259, 1, YYAT_REDUCE, 21 }, + { 0, 0, YYAT_REDUCE, 7 }, + { -257, 1, YYAT_DEFAULT, 35 }, + { 0, 0, YYAT_REDUCE, 10 } + }; + yystateaction = stateaction; + + static const yynontermgoto_t YYNEARFAR YYBASED_CODE nontermgoto[] = { + { 20, 30 }, + { 20, 24 }, + { 20, 25 }, + { 34, 40 }, + { 20, 26 }, + { 42, 43 }, + { 42, 11 }, + { 0, 1 }, + { 0, 2 }, + { 33, 39 }, + { 42, 12 }, + { 32, 38 }, + { 31, 37 }, + { 19, 29 }, + { 17, 10 }, + { 16, 27 }, + { 14, 23 }, + { 8, 17 } + }; + yynontermgoto = nontermgoto; + yynontermgoto_size = 18; + + static const yystategoto_t YYNEARFAR YYBASED_CODE stategoto[] = { + { 6, -1 }, + { 0, -1 }, + { 0, 17 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 15, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 11, 20 }, + { 0, -1 }, + { 6, -1 }, + { 11, 42 }, + { 0, -1 }, + { 4, -1 }, + { -5, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 9, 42 }, + { 2, -1 }, + { 0, -1 }, + { -6, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 0, -1 }, + { 2, -1 }, + { 0, -1 } + }; + yystategoto = stategoto; + + yydestructorptr = NULL; + + yytokendestptr = NULL; + yytokendest_size = 0; + yytokendestbase = 0; +} diff --git a/Utils/Scripter/parser.h b/Utils/Scripter/parser.h new file mode 100644 index 000000000..1c9ba57e3 --- /dev/null +++ b/Utils/Scripter/parser.h @@ -0,0 +1,63 @@ +#ifndef _PARSER_H +#define _PARSER_H + +#include + +///////////////////////////////////////////////////////////////////////////// +// myparser + +class YYFAR myparser : public yyfparser { +public: + myparser(); + +protected: + void yytables(); + virtual void yyaction(int action); +#ifdef YYDEBUG + void YYFAR* yyattribute1(int index) const; + void yyinitdebug(void YYFAR** p, int count) const; +#endif + +public: +#line 22 "C:\\spongebob\\Utils\\scripter\\parser.y" + + // place any extra class members here + +#line 27 "C:\\spongebob\\Utils\\scripter\\parser.h" +}; + +#ifndef YYPARSENAME +#define YYPARSENAME myparser +#endif + +#ifndef YYSTYPE +union tagYYSTYPE { +#line 38 "C:\\spongebob\\Utils\\scripter\\parser.y" + + int variableIdx; + signed short value; + class CTreeNode *treenode; + +#line 42 "C:\\spongebob\\Utils\\scripter\\parser.h" +}; + +#define YYSTYPE union tagYYSTYPE +#endif + +#define STOP 257 +#define IF 258 +#define ELSE 259 +#define PAUSE 260 +#define PRINT 261 +#define ASSIGN 262 +#define EQUAL 263 +#define NOTEQUAL 264 +#define PLUS 265 +#define END_STMT 266 +#define OPEN_PAR 267 +#define CLOSE_PAR 268 +#define BEGIN_CS 269 +#define END_CS 270 +#define VARIABLE 271 +#define VALUE 272 +#endif diff --git a/Utils/Scripter/parser.v b/Utils/Scripter/parser.v new file mode 100644 index 000000000..d1e9bc5c8 --- /dev/null +++ b/Utils/Scripter/parser.v @@ -0,0 +1,405 @@ + 0 $accept : program $end + + 1 program : statement_list + + 2 statement_list : statement_list statement + 3 | + + 4 statement : END_STMT + 5 | STOP END_STMT + 6 | PAUSE END_STMT + 7 | PRINT OPEN_PAR value CLOSE_PAR END_STMT + 8 | assign_expression END_STMT + 9 | IF OPEN_PAR expression CLOSE_PAR statement + 10 | IF OPEN_PAR expression CLOSE_PAR statement ELSE statement + 11 | BEGIN_CS statement_list END_CS + + 12 assign_expression : variable ASSIGN value + + 13 expression : OPEN_PAR expression CLOSE_PAR + 14 | equal_expression + 15 | notequal_expression + + 16 equal_expression : value EQUAL value + + 17 notequal_expression : value NOTEQUAL value + + 18 variable : VARIABLE + + 19 value : VALUE + 20 | VARIABLE + 21 | value PLUS value + + +state 0 + $accept : . program $end + statement_list : . (3) + + . reduce 3 + + program goto 1 + statement_list goto 2 + + +state 1 + $accept : program . $end (0) + + $end accept + + +state 2 + program : statement_list . (1) + statement_list : statement_list . statement + + STOP shift 3 + IF shift 4 + PAUSE shift 5 + PRINT shift 6 + END_STMT shift 7 + BEGIN_CS shift 8 + VARIABLE shift 9 + . reduce 1 + + statement goto 10 + assign_expression goto 11 + variable goto 12 + + +state 3 + statement : STOP . END_STMT + + END_STMT shift 13 + + +state 4 + statement : IF . OPEN_PAR expression CLOSE_PAR statement + statement : IF . OPEN_PAR expression CLOSE_PAR statement ELSE statement + + OPEN_PAR shift 14 + + +state 5 + statement : PAUSE . END_STMT + + END_STMT shift 15 + + +state 6 + statement : PRINT . OPEN_PAR value CLOSE_PAR END_STMT + + OPEN_PAR shift 16 + + +state 7 + statement : END_STMT . (4) + + . reduce 4 + + +state 8 + statement : BEGIN_CS . statement_list END_CS + statement_list : . (3) + + . reduce 3 + + statement_list goto 17 + + +state 9 + variable : VARIABLE . (18) + + . reduce 18 + + +state 10 + statement_list : statement_list statement . (2) + + . reduce 2 + + +state 11 + statement : assign_expression . END_STMT + + END_STMT shift 18 + + +state 12 + assign_expression : variable . ASSIGN value + + ASSIGN shift 19 + + +state 13 + statement : STOP END_STMT . (5) + + . reduce 5 + + +state 14 + statement : IF OPEN_PAR . expression CLOSE_PAR statement + statement : IF OPEN_PAR . expression CLOSE_PAR statement ELSE statement + + OPEN_PAR shift 20 + VARIABLE shift 21 + VALUE shift 22 + + expression goto 23 + equal_expression goto 24 + notequal_expression goto 25 + value goto 26 + + +state 15 + statement : PAUSE END_STMT . (6) + + . reduce 6 + + +state 16 + statement : PRINT OPEN_PAR . value CLOSE_PAR END_STMT + + VARIABLE shift 21 + VALUE shift 22 + + value goto 27 + + +state 17 + statement_list : statement_list . statement + statement : BEGIN_CS statement_list . END_CS + + STOP shift 3 + IF shift 4 + PAUSE shift 5 + PRINT shift 6 + END_STMT shift 7 + BEGIN_CS shift 8 + END_CS shift 28 + VARIABLE shift 9 + + statement goto 10 + assign_expression goto 11 + variable goto 12 + + +state 18 + statement : assign_expression END_STMT . (8) + + . reduce 8 + + +state 19 + assign_expression : variable ASSIGN . value + + VARIABLE shift 21 + VALUE shift 22 + + value goto 29 + + +state 20 + expression : OPEN_PAR . expression CLOSE_PAR + + OPEN_PAR shift 20 + VARIABLE shift 21 + VALUE shift 22 + + expression goto 30 + equal_expression goto 24 + notequal_expression goto 25 + value goto 26 + + +state 21 + value : VARIABLE . (20) + + . reduce 20 + + +state 22 + value : VALUE . (19) + + . reduce 19 + + +state 23 + statement : IF OPEN_PAR expression . CLOSE_PAR statement + statement : IF OPEN_PAR expression . CLOSE_PAR statement ELSE statement + + CLOSE_PAR shift 31 + + +state 24 + expression : equal_expression . (14) + + . reduce 14 + + +state 25 + expression : notequal_expression . (15) + + . reduce 15 + + +state 26 + equal_expression : value . EQUAL value + notequal_expression : value . NOTEQUAL value + value : value . PLUS value + + EQUAL shift 32 + NOTEQUAL shift 33 + PLUS shift 34 + + +state 27 + statement : PRINT OPEN_PAR value . CLOSE_PAR END_STMT + value : value . PLUS value + + PLUS shift 34 + CLOSE_PAR shift 35 + + +state 28 + statement : BEGIN_CS statement_list END_CS . (11) + + . reduce 11 + + +state 29 + assign_expression : variable ASSIGN value . (12) + value : value . PLUS value + + PLUS shift 34 + . reduce 12 + + +state 30 + expression : OPEN_PAR expression . CLOSE_PAR + + CLOSE_PAR shift 36 + + +state 31 + statement : IF OPEN_PAR expression CLOSE_PAR . statement + statement : IF OPEN_PAR expression CLOSE_PAR . statement ELSE statement + + STOP shift 3 + IF shift 4 + PAUSE shift 5 + PRINT shift 6 + END_STMT shift 7 + BEGIN_CS shift 8 + VARIABLE shift 9 + + statement goto 37 + assign_expression goto 11 + variable goto 12 + + +state 32 + equal_expression : value EQUAL . value + + VARIABLE shift 21 + VALUE shift 22 + + value goto 38 + + +state 33 + notequal_expression : value NOTEQUAL . value + + VARIABLE shift 21 + VALUE shift 22 + + value goto 39 + + +state 34 + value : value PLUS . value + + VARIABLE shift 21 + VALUE shift 22 + + value goto 40 + + +state 35 + statement : PRINT OPEN_PAR value CLOSE_PAR . END_STMT + + END_STMT shift 41 + + +state 36 + expression : OPEN_PAR expression CLOSE_PAR . (13) + + . reduce 13 + + +37: shift-reduce conflict (shift 42, reduce 9) on ELSE +state 37 + statement : IF OPEN_PAR expression CLOSE_PAR statement . (9) + statement : IF OPEN_PAR expression CLOSE_PAR statement . ELSE statement + + ELSE shift 42 + . reduce 9 + + +state 38 + equal_expression : value EQUAL value . (16) + value : value . PLUS value + + PLUS shift 34 + . reduce 16 + + +state 39 + notequal_expression : value NOTEQUAL value . (17) + value : value . PLUS value + + PLUS shift 34 + . reduce 17 + + +40: shift-reduce conflict (shift 34, reduce 21) on PLUS +state 40 + value : value PLUS value . (21) + value : value . PLUS value + + PLUS shift 34 + . reduce 21 + + +state 41 + statement : PRINT OPEN_PAR value CLOSE_PAR END_STMT . (7) + + . reduce 7 + + +state 42 + statement : IF OPEN_PAR expression CLOSE_PAR statement ELSE . statement + + STOP shift 3 + IF shift 4 + PAUSE shift 5 + PRINT shift 6 + END_STMT shift 7 + BEGIN_CS shift 8 + VARIABLE shift 9 + + statement goto 43 + assign_expression goto 11 + variable goto 12 + + +state 43 + statement : IF OPEN_PAR expression CLOSE_PAR statement ELSE statement . (10) + + . reduce 10 + + +State 37 contains 1 shift-reduce conflict +State 40 contains 1 shift-reduce conflict + + +18 tokens, 10 nonterminals +22 grammar rules, 44 states