diff --git a/Utils/Scripter/codegen.cpp b/Utils/Scripter/codegen.cpp index d8e650df4..22ac85f9c 100644 --- a/Utils/Scripter/codegen.cpp +++ b/Utils/Scripter/codegen.cpp @@ -328,6 +328,18 @@ int CTreeNode::generateCode(int _write) codeSize+=emit(OP_ADD,_write); break; + case MULTIPLY_EXPR: // * [value, value] + codeSize+=m_children[1]->generateCode(_write); + codeSize+=m_children[0]->generateCode(_write); + codeSize+=emit(OP_MULTIPLY,_write); + break; + + case DIVIDE_EXPR: // / [value, value] + codeSize+=m_children[1]->generateCode(_write); + codeSize+=m_children[0]->generateCode(_write); + codeSize+=emit(OP_DIVIDE,_write); + break; + case FUNCTION_EXPR: // function [functionNumber] codeSize+=emit(OP_CALL_FUNCTION,_write); codeSize+=emit(getFunctionNumber(),_write); diff --git a/Utils/Scripter/codegen.h b/Utils/Scripter/codegen.h index b127ee46d..adebb4251 100644 --- a/Utils/Scripter/codegen.h +++ b/Utils/Scripter/codegen.h @@ -49,6 +49,8 @@ typedef enum VALUE_EXPR, // value PLUS_EXPR, // + [value, value] SUBTRACT_EXPR, // - [value, value] + MULTIPLY_EXPR, // * [value, value] + DIVIDE_EXPR, // / [value, value] FUNCTION_EXPR, // function [functionNumber] }NodeType; @@ -94,6 +96,8 @@ private: OP_IS_GREATERTHAN_VALUE,// value, value pushes result ( 0 or 1 ) to stack OP_ASSIGN, // varidx, value OP_ADD, // value, value pushes result to stack + OP_MULTIPLY, // value, value pushes result to stack + OP_DIVIDE, // value, value pushes result to stack OP_NEG, // value pushes result to stack OP_PRINT, // value OP_CALL_FUNCTION, // functionNumber, argcount args pushes return value to stack diff --git a/Utils/Scripter/lexer.cpp b/Utils/Scripter/lexer.cpp index f86cd46a3..f6c1a3393 100644 --- a/Utils/Scripter/lexer.cpp +++ b/Utils/Scripter/lexer.cpp @@ -29,7 +29,7 @@ Date: 07 December 2000 YYLEXNAME::YYLEXNAME() { yytables(); -#line 46 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 47 "C:\\spongebob\\Utils\\scripter\\lexer.l" // place any extra initialisation code here @@ -79,7 +79,7 @@ void YYLEXNAME::yyunput(int ch) int YYLEXNAME::yyaction(int action) { -#line 58 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 59 "C:\\spongebob\\Utils\\scripter\\lexer.l" // extract yylval for use later on in actions YYSTYPE& yylval = *(YYSTYPE*)yyparserptr->yylvalptr; @@ -89,196 +89,196 @@ YYSTYPE& yylval = *(YYSTYPE*)yyparserptr->yylvalptr; switch (action) { case 1: { -#line 65 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 66 "C:\\spongebob\\Utils\\scripter\\lexer.l" if(preprocessorCmd(yytext+1)!=(int)true)error(); #line 95 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 2: { -#line 66 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 67 "C:\\spongebob\\Utils\\scripter\\lexer.l" printf("# commands must be at start of line!\n");error(); #line 102 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 3: { -#line 68 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 69 "C:\\spongebob\\Utils\\scripter\\lexer.l" return STOP; #line 109 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 4: { -#line 69 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 70 "C:\\spongebob\\Utils\\scripter\\lexer.l" return IF; #line 116 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 5: { -#line 70 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 71 "C:\\spongebob\\Utils\\scripter\\lexer.l" return ELSE; #line 123 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 6: { -#line 71 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 72 "C:\\spongebob\\Utils\\scripter\\lexer.l" return WHILE; #line 130 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 7: { -#line 72 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 73 "C:\\spongebob\\Utils\\scripter\\lexer.l" return DO; #line 137 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 8: { -#line 73 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 74 "C:\\spongebob\\Utils\\scripter\\lexer.l" return PAUSE; #line 144 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 9: { -#line 74 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 75 "C:\\spongebob\\Utils\\scripter\\lexer.l" return PRINT; #line 151 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 10: { -#line 75 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 76 "C:\\spongebob\\Utils\\scripter\\lexer.l" return ASSIGN; #line 158 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 11: { -#line 76 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 77 "C:\\spongebob\\Utils\\scripter\\lexer.l" return EQUAL; #line 165 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 12: { -#line 77 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 78 "C:\\spongebob\\Utils\\scripter\\lexer.l" return NOTEQUAL; #line 172 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 13: { -#line 78 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 79 "C:\\spongebob\\Utils\\scripter\\lexer.l" return LESSTHAN; #line 179 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 14: { -#line 79 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 80 "C:\\spongebob\\Utils\\scripter\\lexer.l" return GREATERTHAN; #line 186 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 15: { -#line 80 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 81 "C:\\spongebob\\Utils\\scripter\\lexer.l" return PLUS; #line 193 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 16: { -#line 81 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 82 "C:\\spongebob\\Utils\\scripter\\lexer.l" return SUBTRACT; #line 200 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 17: { -#line 82 "C:\\spongebob\\Utils\\scripter\\lexer.l" -return END_STMT; +#line 83 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return MULTIPLY; #line 207 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 18: { -#line 83 "C:\\spongebob\\Utils\\scripter\\lexer.l" -return OPEN_PAR; +#line 84 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return DIVIDE; #line 214 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 19: { -#line 84 "C:\\spongebob\\Utils\\scripter\\lexer.l" -return CLOSE_PAR; +#line 85 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return END_STMT; #line 221 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 20: { -#line 85 "C:\\spongebob\\Utils\\scripter\\lexer.l" -return BEGIN_CS; +#line 86 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return OPEN_PAR; #line 228 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 21: { -#line 86 "C:\\spongebob\\Utils\\scripter\\lexer.l" -return END_CS; +#line 87 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return CLOSE_PAR; #line 235 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 22: { -#line 87 "C:\\spongebob\\Utils\\scripter\\lexer.l" -return COMMA; +#line 88 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return BEGIN_CS; #line 242 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 23: { -#line 90 "C:\\spongebob\\Utils\\scripter\\lexer.l" -yylval.variableIdx=lookupVarName(yytext+1);return VARIABLE; +#line 89 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return END_CS; #line 249 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 24: { -#line 91 "C:\\spongebob\\Utils\\scripter\\lexer.l" -yylval.value=atoi(yytext);return VALUE; +#line 90 "C:\\spongebob\\Utils\\scripter\\lexer.l" +return COMMA; #line 256 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 25: { -#line 94 "C:\\spongebob\\Utils\\scripter\\lexer.l" -yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION; +#line 93 "C:\\spongebob\\Utils\\scripter\\lexer.l" +yylval.variableIdx=lookupVarName(yytext+1);return VARIABLE; #line 263 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 26: { -#line 96 "C:\\spongebob\\Utils\\scripter\\lexer.l" - +#line 94 "C:\\spongebob\\Utils\\scripter\\lexer.l" +yylval.value=atoi(yytext);return VALUE; #line 270 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 27: { #line 97 "C:\\spongebob\\Utils\\scripter\\lexer.l" - +yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION; #line 277 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; case 28: { -#line 98 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 99 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 284 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } @@ -286,10 +286,31 @@ yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION; case 29: { #line 100 "C:\\spongebob\\Utils\\scripter\\lexer.l" -unexpectedChar(); +comment(); #line 291 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" } break; + case 30: + { +#line 101 "C:\\spongebob\\Utils\\scripter\\lexer.l" + +#line 298 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 31: + { +#line 102 "C:\\spongebob\\Utils\\scripter\\lexer.l" + +#line 305 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; + case 32: + { +#line 104 "C:\\spongebob\\Utils\\scripter\\lexer.l" +unexpectedChar(); +#line 312 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" + } + break; default: yyassert(0); break; @@ -303,7 +324,7 @@ unexpectedChar(); #pragma warn .rch // to the old state #endif #endif -#line 102 "C:\\spongebob\\Utils\\scripter\\lexer.l" +#line 106 "C:\\spongebob\\Utils\\scripter\\lexer.l" @@ -311,7 +332,7 @@ unexpectedChar(); // programs section -#line 315 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" +#line 336 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" void YYLEXNAME::yytables() { @@ -335,9 +356,9 @@ void YYLEXNAME::yytables() { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 26, 26 }, - { 0, 40 }, - { 0, 54 }, + { 27, 27 }, + { 0, 39 }, + { 0, 56 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, @@ -358,7 +379,7 @@ void YYLEXNAME::yytables() { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 26, 26 }, + { 27, 27 }, { 0, 0 }, { 0, 0 }, { 3, 1 }, @@ -368,172 +389,162 @@ void YYLEXNAME::yytables() { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 40, 17 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, - { 40, 25 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, + { 39, 17 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 37, 11 }, - { 36, 10 }, + { 38, 11 }, + { 37, 10 }, { 0, 0 }, { 0, 0 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 38, 38 }, + { 41, 41 }, { 0, 0 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 38, 38 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 44, 34 }, - { 53, 50 }, - { 29, 4 }, - { 42, 31 }, - { 49, 44 }, - { 46, 41 }, - { 33, 8 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 41, 29 }, - { 50, 45 }, - { 31, 6 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 41, 41 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 46, 35 }, + { 55, 52 }, + { 30, 4 }, + { 44, 32 }, + { 51, 46 }, { 48, 43 }, - { 39, 39 }, - { 43, 32 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 39, 39 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, - { 0, 22 }, + { 34, 8 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 43, 30 }, + { 52, 47 }, + { 32, 6 }, + { 50, 45 }, + { 42, 42 }, + { 45, 33 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, + { 42, 42 }, { 0, 24 }, { 0, 24 }, { 0, 24 }, @@ -544,57 +555,67 @@ void YYLEXNAME::yytables() { 0, 24 }, { 0, 24 }, { 0, 24 }, - { 26, 2 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, + { 0, 26 }, { 27, 2 }, - { 34, 9 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 23, 23 }, - { 45, 35 }, - { 32, 7 }, - { 30, 5 }, - { 52, 49 }, - { 47, 42 }, - { 51, 48 }, + { 28, 2 }, { 35, 9 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 25, 25 }, + { 47, 36 }, + { 33, 7 }, + { 31, 5 }, + { 54, 51 }, + { 49, 44 }, + { 53, 50 }, + { 36, 9 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 26, 2 }, + { 27, 2 }, { 11, 2 }, { 0, 0 }, - { 54, 2 }, - { 22, 2 }, + { 56, 2 }, + { 24, 2 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 17, 2 }, - { 18, 2 }, - { 0, 0 }, + { 19, 2 }, + { 20, 2 }, + { 16, 2 }, { 14, 2 }, - { 21, 2 }, + { 23, 2 }, { 15, 2 }, { 0, 0 }, + { 17, 2 }, + { 25, 2 }, + { 25, 2 }, + { 25, 2 }, + { 25, 2 }, + { 25, 2 }, + { 25, 2 }, + { 25, 2 }, + { 25, 2 }, + { 25, 2 }, { 25, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, - { 23, 2 }, { 0, 0 }, - { 16, 2 }, + { 18, 2 }, { 12, 2 }, { 10, 2 }, { 13, 2 }, @@ -630,7 +651,7 @@ void YYLEXNAME::yytables() { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 24, 2 }, + { 26, 2 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, @@ -658,68 +679,70 @@ void YYLEXNAME::yytables() { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 19, 2 }, + { 21, 2 }, { 0, 0 }, - { 20, 2 } + { 22, 2 } }; yytransition = transition; static const yystate_t YYNEARFAR YYBASED_CODE state[] = { { 0, 0, 0 }, { 2, 1, 0 }, - { -28, 210, 0 }, + { -29, 210, 0 }, { 0, 0, 2 }, - { 50, 20, 29 }, - { 0, 132, 29 }, - { 43, 61, 29 }, - { 0, 129, 29 }, - { 29, 29, 29 }, - { 0, 124, 29 }, + { 52, 20, 32 }, + { 0, 132, 32 }, + { 45, 61, 32 }, + { 0, 129, 32 }, + { 30, 29, 32 }, + { 0, 124, 32 }, { 11, 2, 10 }, - { 0, 1, 29 }, + { 0, 1, 32 }, { 0, 0, 13 }, { 0, 0, 14 }, { 0, 0, 15 }, { 0, 0, 16 }, { 0, 0, 17 }, - { 0, 0, 18 }, + { 0, 1, 18 }, { 0, 0, 19 }, { 0, 0, 20 }, { 0, 0, 21 }, { 0, 0, 22 }, - { 38, 151, 29 }, - { 0, 174, 24 }, - { 39, 161, 29 }, - { 0, 1, 29 }, - { 0, 1, 27 }, - { 0, 0, 28 }, - { 0, 0, 29 }, + { 0, 0, 23 }, + { 0, 0, 24 }, + { 41, 151, 32 }, + { 0, 174, 26 }, + { 42, 161, 32 }, + { 0, 1, 30 }, + { 0, 0, 31 }, + { 0, 0, 32 }, { 0, 56, 0 }, { 0, 0, 4 }, - { 44, 22, 0 }, - { 35, 67, 0 }, + { 46, 22, 0 }, + { 36, 67, 0 }, { 0, 0, 7 }, { 0, 17, 0 }, { 0, 127, 0 }, { 0, 0, 11 }, { 0, 0, 12 }, - { 50, 1, 23 }, - { 50, 76, 25 }, - { -40, 1, 26 }, + { -39, 1, 28 }, + { 0, 0, 29 }, + { 52, 1, 25 }, + { 52, 76, 27 }, { 0, 27, 0 }, - { 49, 135, 0 }, + { 51, 135, 0 }, { 0, 62, 0 }, { 0, 23, 0 }, { 0, 58, 0 }, { 0, 0, 3 }, { 0, 0, 5 }, - { 49, 136, 0 }, + { 51, 136, 0 }, { 0, 134, 0 }, { 0, 19, 0 }, { 0, 0, 6 }, { 0, 0, 8 }, { 0, 0, 9 }, - { -54, 2, 1 } + { -56, 2, 1 } }; yystate = state; @@ -753,6 +776,9 @@ void YYLEXNAME::yytables() 0, 0, 0, + 0, + 0, + 0, 0 }; yybackup = backup; diff --git a/Utils/Scripter/lexer.h b/Utils/Scripter/lexer.h index aebafc298..26b7054ea 100644 --- a/Utils/Scripter/lexer.h +++ b/Utils/Scripter/lexer.h @@ -31,11 +31,12 @@ public: private: void unexpectedChar(); + void comment(); class myparser *m_currentParser; -#line 39 "C:\\spongebob\\Utils\\scripter\\lexer.h" +#line 40 "C:\\spongebob\\Utils\\scripter\\lexer.h" }; #ifndef YYLEXNAME diff --git a/Utils/Scripter/lexer.l b/Utils/Scripter/lexer.l index 5da2a75ca..c0704dd72 100644 --- a/Utils/Scripter/lexer.l +++ b/Utils/Scripter/lexer.l @@ -37,6 +37,7 @@ Date: 07 December 2000 private: void unexpectedChar(); + void comment(); class myparser *m_currentParser; @@ -79,6 +80,8 @@ print {return PRINT;} \> {return GREATERTHAN;} \+ {return PLUS;} \- {return SUBTRACT;} +\* {return MULTIPLY;} +\/ {return DIVIDE;} ; {return END_STMT;} \( {return OPEN_PAR;} \) {return CLOSE_PAR;} @@ -94,6 +97,7 @@ print {return PRINT;} _[a-zA-Z_][a-zA-Z_0-9]* {yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION;} \/\/.* {} +\/\* {comment();} [ \t]+ {} \n {} diff --git a/Utils/Scripter/mylexer.cpp b/Utils/Scripter/mylexer.cpp index e285b4263..71dfbd605 100644 --- a/Utils/Scripter/mylexer.cpp +++ b/Utils/Scripter/mylexer.cpp @@ -91,7 +91,16 @@ int mylexer::closeInputFile() ---------------------------------------------------------------------- */ void mylexer::error() { - CPFile::getCurrentFile()->error(yyerr); + CPFile *cp; + cp=CPFile::getCurrentFile(); + if(cp) + { + cp->error(yyerr); + } + else + { + // Hmm.. this happens when you forget '*/' on the end of a comment + } } /*---------------------------------------------------------------------- @@ -213,5 +222,53 @@ void mylexer::unexpectedChar() } } + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void mylexer::comment() +{ + typedef enum CommentState { INCOMMENT,FOUNDASTERISK,OUTOFCOMMENT }; + int nextChar; + CommentState commentState=INCOMMENT; + + do + { + nextChar=yygetchar(); + if(nextChar==-1) + { + printf("END OF FILE FOUND INSIDE COMMENT\n"); + error(); + return; + } + switch(commentState) + { + case INCOMMENT: + if(nextChar=='*') + { + commentState=FOUNDASTERISK; + } + break; + case FOUNDASTERISK: + if(nextChar=='/') + { + commentState=OUTOFCOMMENT; + } + else + { + commentState=INCOMMENT; + } + break; + default: + break; + } + } + while(commentState!=OUTOFCOMMENT); +} + + /*=========================================================================== end */ diff --git a/Utils/Scripter/parser.cpp b/Utils/Scripter/parser.cpp index fc3639c70..f4cf9ff40 100644 --- a/Utils/Scripter/parser.cpp +++ b/Utils/Scripter/parser.cpp @@ -76,7 +76,7 @@ void YYPARSENAME::yyaction(int action) yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 107 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 109 "C:\\spongebob\\Utils\\scripter\\parser.y" s_baseTreeNode=yyattribute(1 - 1).treenode; #line 82 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -89,7 +89,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 3); #endif { -#line 111 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 113 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(1 - 2).treenode,yyattribute(2 - 2).treenode); #line 95 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -97,7 +97,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; break; case 2: { -#line 112 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 114 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EMPTY_STMT); #line 103 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -109,7 +109,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 116 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 118 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EMPTY_STMT); #line 115 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -122,7 +122,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 3); #endif { -#line 117 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 119 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STOP_STMT); #line 128 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -135,7 +135,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 3); #endif { -#line 118 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 120 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PAUSE_STMT); #line 141 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -148,7 +148,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 6); #endif { -#line 119 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 121 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PRINT_STMT,yyattribute(3 - 5).treenode); #line 154 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -161,7 +161,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 3); #endif { -#line 120 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 122 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 2).treenode; #line 167 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -174,7 +174,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 6); #endif { -#line 121 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 123 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(IF_STMT,yyattribute(3 - 5).treenode,yyattribute(5 - 5).treenode); #line 180 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -187,7 +187,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 8); #endif { -#line 122 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 124 "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 193 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -200,7 +200,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 6); #endif { -#line 123 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 125 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(WHILE_STMT,yyattribute(3 - 5).treenode,yyattribute(5 - 5).treenode); #line 206 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -213,7 +213,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 8); #endif { -#line 124 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 126 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(DOWHILE_STMT,yyattribute(2 - 7).treenode,yyattribute(5 - 7).treenode); #line 219 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -226,7 +226,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 125 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 127 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(2 - 3).treenode); #line 232 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -239,7 +239,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 3); #endif { -#line 126 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 128 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(1 - 2).treenode,new CTreeNode(POP_STMT)); #line 245 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -252,7 +252,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 131 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 133 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(ASSIGN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 258 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -261,12 +261,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; case 15: { #ifdef YYDEBUG - YYSTYPE YYFAR* yya[4]; - yyinitdebug((void YYFAR**)yya, 4); + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 136 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(2 - 3).treenode; +#line 138 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; #line 271 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -278,7 +278,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 137 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 139 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; #line 284 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -291,7 +291,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 138 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 140 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; #line 297 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -304,7 +304,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 139 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 141 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; #line 310 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -313,12 +313,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; case 19: { #ifdef YYDEBUG - YYSTYPE YYFAR* yya[2]; - yyinitdebug((void YYFAR**)yya, 2); + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 140 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; +#line 145 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 323 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -330,8 +330,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 144 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 149 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(NOTEQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 336 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -343,8 +343,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 148 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(NOTEQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 153 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(LESSTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 349 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -356,8 +356,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 152 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(LESSTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 157 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(GREATERTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 362 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -365,12 +365,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; case 23: { #ifdef YYDEBUG - YYSTYPE YYFAR* yya[4]; - yyinitdebug((void YYFAR**)yya, 4); + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 156 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(GREATERTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); +#line 162 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx); #line 375 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -382,8 +382,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 161 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx); +#line 166 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VALUE_EXPR,yyattribute(1 - 1).value); #line 388 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -391,12 +391,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; case 25: { #ifdef YYDEBUG - YYSTYPE YYFAR* yya[2]; - yyinitdebug((void YYFAR**)yya, 2); + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 165 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VALUE_EXPR,yyattribute(1 - 1).value); +#line 167 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(2 - 3).treenode; #line 401 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -408,7 +408,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 2); #endif { -#line 166 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 168 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx); #line 414 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -421,7 +421,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 169 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 171 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PLUS_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 427 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -434,7 +434,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 170 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 172 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(SUBTRACT_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 440 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } @@ -443,12 +443,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; case 29: { #ifdef YYDEBUG - YYSTYPE YYFAR* yya[2]; - yyinitdebug((void YYFAR**)yya, 2); + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 171 "C:\\spongebob\\Utils\\scripter\\parser.y" -(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; +#line 173 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(MULTIPLY_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 453 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } @@ -456,26 +456,52 @@ s_baseTreeNode=yyattribute(1 - 1).treenode; case 30: { #ifdef YYDEBUG - YYSTYPE YYFAR* yya[3]; - yyinitdebug((void YYFAR**)yya, 3); + YYSTYPE YYFAR* yya[4]; + yyinitdebug((void YYFAR**)yya, 4); #endif { -#line 176 "C:\\spongebob\\Utils\\scripter\\parser.y" -if(yyattribute(1 - 2).functionNumber!=-1){m_functionNumber=yyattribute(1 - 2).functionNumber;m_functionArgs=getFunctionArgs(yyattribute(1 - 2).functionNumber);} +#line 174 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(DIVIDE_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); #line 466 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } break; case 31: { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[2]; + yyinitdebug((void YYFAR**)yya, 2); +#endif + { +#line 175 "C:\\spongebob\\Utils\\scripter\\parser.y" +(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; +#line 479 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 32: + { +#ifdef YYDEBUG + YYSTYPE YYFAR* yya[3]; + yyinitdebug((void YYFAR**)yya, 3); +#endif + { +#line 180 "C:\\spongebob\\Utils\\scripter\\parser.y" +if(yyattribute(1 - 2).functionNumber!=-1){m_functionNumber=yyattribute(1 - 2).functionNumber;m_functionArgs=getFunctionArgs(yyattribute(1 - 2).functionNumber);} +#line 492 "C:\\spongebob\\Utils\\scripter\\parser.cpp" + } + } + break; + case 33: + { #ifdef YYDEBUG YYSTYPE YYFAR* yya[5]; yyinitdebug((void YYFAR**)yya, 5); #endif { -#line 177 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 181 "C:\\spongebob\\Utils\\scripter\\parser.y" (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,m_functionArgs,new CTreeNode(FUNCTION_EXPR,m_functionNumber)); -#line 479 "C:\\spongebob\\Utils\\scripter\\parser.cpp" +#line 505 "C:\\spongebob\\Utils\\scripter\\parser.cpp" } } break; @@ -484,14 +510,14 @@ if(yyattribute(1 - 2).functionNumber!=-1){m_functionNumber=yyattribute(1 - 2).fu break; } } -#line 182 "C:\\spongebob\\Utils\\scripter\\parser.y" +#line 186 "C:\\spongebob\\Utils\\scripter\\parser.y" ///////////////////////////////////////////////////////////////////////////// // programs section -#line 495 "C:\\spongebob\\Utils\\scripter\\parser.cpp" +#line 521 "C:\\spongebob\\Utils\\scripter\\parser.cpp" void YYPARSENAME::yytables() { yyattribute_size = sizeof(YYSTYPE); @@ -515,14 +541,16 @@ void YYPARSENAME::yytables() { "GREATERTHAN", 268 }, { "PLUS", 269 }, { "SUBTRACT", 270 }, - { "END_STMT", 271 }, - { "OPEN_PAR", 272 }, - { "CLOSE_PAR", 273 }, - { "BEGIN_CS", 274 }, - { "END_CS", 275 }, - { "VARIABLE", 277 }, - { "VALUE", 278 }, - { "FUNCTION", 279 }, + { "MULTIPLY", 271 }, + { "DIVIDE", 272 }, + { "END_STMT", 273 }, + { "OPEN_PAR", 274 }, + { "CLOSE_PAR", 275 }, + { "BEGIN_CS", 276 }, + { "END_CS", 277 }, + { "VARIABLE", 279 }, + { "VALUE", 280 }, + { "FUNCTION", 281 }, { NULL, 0 } }; yysymbol = symbol; @@ -544,7 +572,6 @@ void YYPARSENAME::yytables() "statement: BEGIN_CS statement_list END_CS", "statement: function END_STMT", "assign_expression: variable ASSIGN value", - "expression: OPEN_PAR expression CLOSE_PAR", "expression: equal_expression", "expression: notequal_expression", "expression: lessthan_expression", @@ -555,9 +582,12 @@ void YYPARSENAME::yytables() "greaterthan_expression: value GREATERTHAN value", "variable: VARIABLE", "value: VALUE", + "value: OPEN_PAR value CLOSE_PAR", "value: VARIABLE", "value: value PLUS value", "value: value SUBTRACT value", + "value: value MULTIPLY value", + "value: value DIVIDE value", "value: function", "$$1:", "function: FUNCTION OPEN_PAR $$1 CLOSE_PAR" @@ -582,89 +612,114 @@ void YYPARSENAME::yytables() { 3, 3, 12 }, { 3, 2, 13 }, { 4, 3, 14 }, - { 5, 3, 15 }, + { 5, 1, 15 }, { 5, 1, 16 }, { 5, 1, 17 }, { 5, 1, 18 }, - { 5, 1, 19 }, - { 6, 3, 20 }, - { 7, 3, 21 }, - { 8, 3, 22 }, - { 9, 3, 23 }, - { 10, 1, 24 }, - { 11, 1, 25 }, + { 6, 3, 19 }, + { 7, 3, 20 }, + { 8, 3, 21 }, + { 9, 3, 22 }, + { 10, 1, 23 }, + { 11, 1, 24 }, + { 11, 3, 25 }, { 11, 1, 26 }, { 11, 3, 27 }, { 11, 3, 28 }, - { 11, 1, 29 }, - { 13, 0, 30 }, - { 12, 4, 31 } + { 11, 3, 29 }, + { 11, 3, 30 }, + { 11, 1, 31 }, + { 13, 0, 32 }, + { 12, 4, 33 } }; yyreduction = reduction; static const yytokenaction_t YYNEARFAR YYBASED_CODE tokenaction[] = { - { 67, YYAT_SHIFT, 3 }, - { 67, YYAT_SHIFT, 4 }, - { 68, YYAT_SHIFT, 70 }, - { 67, YYAT_SHIFT, 5 }, - { 67, YYAT_SHIFT, 6 }, - { 67, YYAT_SHIFT, 7 }, - { 67, YYAT_SHIFT, 8 }, + { 71, YYAT_SHIFT, 3 }, + { 71, YYAT_SHIFT, 4 }, + { 72, YYAT_SHIFT, 74 }, + { 71, YYAT_SHIFT, 5 }, + { 71, YYAT_SHIFT, 6 }, + { 71, YYAT_SHIFT, 7 }, + { 71, YYAT_SHIFT, 8 }, { 2, YYAT_SHIFT, 3 }, { 2, YYAT_SHIFT, 4 }, - { 65, YYAT_SHIFT, 68 }, + { 69, YYAT_SHIFT, 72 }, { 2, YYAT_SHIFT, 5 }, { 2, YYAT_SHIFT, 6 }, { 2, YYAT_SHIFT, 7 }, { 2, YYAT_SHIFT, 8 }, - { 67, YYAT_SHIFT, 9 }, - { 40, YYAT_SHIFT, 50 }, - { 40, YYAT_SHIFT, 51 }, - { 67, YYAT_SHIFT, 10 }, - { 57, YYAT_SHIFT, 67 }, - { 40, YYAT_SHIFT, 54 }, - { 67, YYAT_SHIFT, 11 }, + { 59, YYAT_SHIFT, 71 }, + { 56, YYAT_SHIFT, 70 }, + { 71, YYAT_SHIFT, 9 }, + { 42, YYAT_SHIFT, 57 }, + { 40, YYAT_SHIFT, 56 }, + { 71, YYAT_SHIFT, 10 }, + { 39, YYAT_SHIFT, 55 }, + { 38, YYAT_SHIFT, 54 }, + { 71, YYAT_SHIFT, 11 }, { 2, YYAT_SHIFT, 9 }, - { 67, YYAT_SHIFT, 12 }, - { 54, YYAT_SHIFT, 66 }, + { 71, YYAT_SHIFT, 12 }, + { 31, YYAT_SHIFT, 45 }, { 2, YYAT_SHIFT, 10 }, - { 63, YYAT_SHIFT, 50 }, - { 63, YYAT_SHIFT, 51 }, + { 23, YYAT_SHIFT, 41 }, + { 20, YYAT_SHIFT, 39 }, { 2, YYAT_SHIFT, 11 }, - { 51, YYAT_ERROR, 0 }, + { 16, YYAT_SHIFT, 27 }, { 2, YYAT_SHIFT, 12 }, { 36, YYAT_SHIFT, 46 }, { 36, YYAT_SHIFT, 47 }, { 36, YYAT_SHIFT, 48 }, { 36, YYAT_SHIFT, 49 }, - { 53, YYAT_SHIFT, 28 }, - { 62, YYAT_SHIFT, 50 }, - { 62, YYAT_SHIFT, 51 }, - { 44, YYAT_SHIFT, 56 }, - { 36, YYAT_ERROR, 0 }, - { 53, YYAT_SHIFT, 29 }, - { 53, YYAT_SHIFT, 30 }, - { 53, YYAT_SHIFT, 12 }, - { 61, YYAT_SHIFT, 50 }, - { 61, YYAT_SHIFT, 51 }, - { 60, YYAT_SHIFT, 50 }, - { 60, YYAT_SHIFT, 51 }, - { 59, YYAT_SHIFT, 50 }, - { 59, YYAT_SHIFT, 51 }, - { 58, YYAT_SHIFT, 50 }, - { 58, YYAT_SHIFT, 51 }, - { 43, YYAT_SHIFT, 50 }, - { 43, YYAT_SHIFT, 51 }, - { 42, YYAT_SHIFT, 55 }, - { 39, YYAT_SHIFT, 53 }, - { 38, YYAT_SHIFT, 52 }, - { 31, YYAT_SHIFT, 45 }, - { 23, YYAT_SHIFT, 41 }, - { 20, YYAT_SHIFT, 39 }, - { 16, YYAT_SHIFT, 27 }, { 15, YYAT_SHIFT, 26 }, + { 44, YYAT_SHIFT, 50 }, + { 44, YYAT_SHIFT, 51 }, + { 44, YYAT_SHIFT, 52 }, + { 44, YYAT_SHIFT, 53 }, + { 55, YYAT_SHIFT, 28 }, + { 36, YYAT_ERROR, 0 }, + { 44, YYAT_SHIFT, 58 }, { 14, YYAT_SHIFT, 25 }, { 12, YYAT_SHIFT, 24 }, + { 55, YYAT_SHIFT, 29 }, + { 55, YYAT_SHIFT, 30 }, + { 55, YYAT_SHIFT, 12 }, + { 67, YYAT_SHIFT, 50 }, + { 67, YYAT_SHIFT, 51 }, + { 67, YYAT_SHIFT, 52 }, + { 67, YYAT_SHIFT, 53 }, + { 66, YYAT_SHIFT, 50 }, + { 66, YYAT_SHIFT, 51 }, + { 66, YYAT_SHIFT, 52 }, + { 66, YYAT_SHIFT, 53 }, + { 65, YYAT_SHIFT, 50 }, + { 65, YYAT_SHIFT, 51 }, + { 65, YYAT_SHIFT, 52 }, + { 65, YYAT_SHIFT, 53 }, + { 64, YYAT_SHIFT, 50 }, + { 64, YYAT_SHIFT, 51 }, + { 64, YYAT_SHIFT, 52 }, + { 64, YYAT_SHIFT, 53 }, + { 63, YYAT_SHIFT, 50 }, + { 63, YYAT_SHIFT, 51 }, + { 63, YYAT_SHIFT, 52 }, + { 63, YYAT_SHIFT, 53 }, + { 62, YYAT_SHIFT, 50 }, + { 62, YYAT_SHIFT, 51 }, + { 62, YYAT_SHIFT, 52 }, + { 62, YYAT_SHIFT, 53 }, + { 61, YYAT_SHIFT, 50 }, + { 61, YYAT_SHIFT, 51 }, + { 61, YYAT_SHIFT, 52 }, + { 61, YYAT_SHIFT, 53 }, + { 60, YYAT_SHIFT, 50 }, + { 60, YYAT_SHIFT, 51 }, + { 60, YYAT_SHIFT, 52 }, + { 60, YYAT_SHIFT, 53 }, + { 43, YYAT_SHIFT, 50 }, + { 43, YYAT_SHIFT, 51 }, + { 43, YYAT_SHIFT, 52 }, + { 43, YYAT_SHIFT, 53 }, { 8, YYAT_SHIFT, 22 }, { 7, YYAT_SHIFT, 21 }, { 5, YYAT_SHIFT, 19 }, @@ -673,105 +728,111 @@ void YYPARSENAME::yytables() { 1, YYAT_ACCEPT, 0 } }; yytokenaction = tokenaction; - yytokenaction_size = 68; + yytokenaction_size = 91; static const yystateaction_t YYNEARFAR YYBASED_CODE stateaction[] = { { 0, 0, YYAT_REDUCE, 3 }, - { 67, 1, YYAT_ERROR, 0 }, + { 90, 1, YYAT_ERROR, 0 }, { -250, 1, YYAT_REDUCE, 1 }, - { -205, 1, YYAT_DEFAULT, 68 }, - { -207, 1, YYAT_DEFAULT, 39 }, - { -208, 1, YYAT_DEFAULT, 39 }, - { 0, 0, YYAT_DEFAULT, 67 }, - { -208, 1, YYAT_DEFAULT, 68 }, - { -210, 1, YYAT_DEFAULT, 39 }, + { -184, 1, YYAT_DEFAULT, 72 }, + { -186, 1, YYAT_DEFAULT, 39 }, + { -187, 1, YYAT_DEFAULT, 39 }, + { 0, 0, YYAT_DEFAULT, 71 }, + { -187, 1, YYAT_DEFAULT, 72 }, + { -189, 1, YYAT_DEFAULT, 39 }, { 0, 0, YYAT_REDUCE, 4 }, { 0, 0, YYAT_REDUCE, 3 }, - { 0, 0, YYAT_REDUCE, 25 }, - { -211, 1, YYAT_DEFAULT, 39 }, + { 0, 0, YYAT_REDUCE, 24 }, + { -229, 1, YYAT_DEFAULT, 39 }, { 0, 0, YYAT_REDUCE, 2 }, - { -211, 1, YYAT_DEFAULT, 68 }, - { -205, 1, YYAT_ERROR, 0 }, - { -213, 1, YYAT_DEFAULT, 68 }, + { -229, 1, YYAT_DEFAULT, 72 }, + { -228, 1, YYAT_ERROR, 0 }, + { -243, 1, YYAT_DEFAULT, 72 }, { 0, 0, YYAT_REDUCE, 5 }, - { 0, 0, YYAT_DEFAULT, 53 }, - { 0, 0, YYAT_DEFAULT, 53 }, - { -203, 1, YYAT_ERROR, 0 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { -232, 1, YYAT_ERROR, 0 }, { 0, 0, YYAT_REDUCE, 6 }, - { 0, 0, YYAT_DEFAULT, 51 }, - { -219, 1, YYAT_DEFAULT, 67 }, - { 0, 0, YYAT_REDUCE, 31 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { -250, 1, YYAT_DEFAULT, 71 }, + { 0, 0, YYAT_REDUCE, 33 }, { 0, 0, YYAT_REDUCE, 8 }, - { 0, 0, YYAT_DEFAULT, 51 }, + { 0, 0, YYAT_DEFAULT, 55 }, { 0, 0, YYAT_REDUCE, 14 }, - { 0, 0, YYAT_DEFAULT, 53 }, + { 0, 0, YYAT_DEFAULT, 55 }, { 0, 0, YYAT_REDUCE, 27 }, - { 0, 0, YYAT_REDUCE, 26 }, - { -218, 1, YYAT_DEFAULT, 65 }, + { 0, 0, YYAT_REDUCE, 25 }, + { -250, 1, YYAT_DEFAULT, 69 }, + { 0, 0, YYAT_REDUCE, 16 }, { 0, 0, YYAT_REDUCE, 17 }, { 0, 0, YYAT_REDUCE, 18 }, { 0, 0, YYAT_REDUCE, 19 }, - { 0, 0, YYAT_REDUCE, 20 }, - { -235, 1, YYAT_DEFAULT, 40 }, - { 0, 0, YYAT_REDUCE, 30 }, - { -219, 1, YYAT_DEFAULT, 65 }, - { -219, 1, YYAT_ERROR, 0 }, - { -254, 1, YYAT_DEFAULT, 65 }, - { 0, 0, YYAT_REDUCE, 13 }, - { -221, 1, YYAT_DEFAULT, 65 }, - { -219, 1, YYAT_REDUCE, 15 }, - { -236, 1, YYAT_DEFAULT, 65 }, - { 0, 0, YYAT_DEFAULT, 67 }, - { 0, 0, YYAT_DEFAULT, 51 }, - { 0, 0, YYAT_DEFAULT, 51 }, - { 0, 0, YYAT_DEFAULT, 51 }, - { 0, 0, YYAT_DEFAULT, 51 }, - { 0, 0, YYAT_DEFAULT, 51 }, - { -244, 1, YYAT_DEFAULT, 53 }, - { 0, 0, YYAT_DEFAULT, 67 }, - { -238, 1, YYAT_DEFAULT, 39 }, - { -248, 1, YYAT_DEFAULT, 68 }, + { -233, 1, YYAT_DEFAULT, 44 }, { 0, 0, YYAT_REDUCE, 32 }, - { 0, 0, YYAT_REDUCE, 16 }, - { -241, 1, YYAT_REDUCE, 9 }, - { -221, 1, YYAT_REDUCE, 21 }, - { -223, 1, YYAT_REDUCE, 22 }, - { -225, 1, YYAT_REDUCE, 23 }, - { -227, 1, YYAT_REDUCE, 24 }, - { -234, 1, YYAT_REDUCE, 28 }, - { -244, 1, YYAT_REDUCE, 29 }, + { -254, 1, YYAT_DEFAULT, 69 }, + { -254, 1, YYAT_ERROR, 0 }, + { -257, 1, YYAT_DEFAULT, 44 }, + { 0, 0, YYAT_REDUCE, 13 }, + { -258, 1, YYAT_DEFAULT, 69 }, + { -188, 1, YYAT_REDUCE, 15 }, + { -232, 1, YYAT_DEFAULT, 69 }, + { 0, 0, YYAT_DEFAULT, 71 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 55 }, + { 0, 0, YYAT_DEFAULT, 71 }, + { -233, 1, YYAT_DEFAULT, 39 }, + { -258, 1, YYAT_DEFAULT, 72 }, + { 0, 0, YYAT_REDUCE, 34 }, + { 0, 0, YYAT_REDUCE, 26 }, + { -245, 1, YYAT_REDUCE, 9 }, + { -192, 1, YYAT_REDUCE, 20 }, + { -196, 1, YYAT_REDUCE, 21 }, + { -200, 1, YYAT_REDUCE, 22 }, + { -204, 1, YYAT_REDUCE, 23 }, + { -208, 1, YYAT_REDUCE, 28 }, + { -212, 1, YYAT_REDUCE, 29 }, + { -216, 1, YYAT_REDUCE, 30 }, + { -220, 1, YYAT_REDUCE, 31 }, { 0, 0, YYAT_REDUCE, 11 }, - { -264, 1, YYAT_ERROR, 0 }, + { -266, 1, YYAT_ERROR, 0 }, { 0, 0, YYAT_REDUCE, 7 }, - { -257, 1, YYAT_DEFAULT, 68 }, - { -269, 1, YYAT_ERROR, 0 }, + { -257, 1, YYAT_DEFAULT, 72 }, + { -271, 1, YYAT_ERROR, 0 }, { 0, 0, YYAT_REDUCE, 10 }, { 0, 0, YYAT_REDUCE, 12 } }; yystateaction = stateaction; static const yynontermgoto_t YYNEARFAR YYBASED_CODE nontermgoto[] = { - { 53, 65 }, - { 53, 32 }, - { 53, 33 }, - { 53, 34 }, - { 53, 35 }, - { 52, 64 }, - { 53, 36 }, - { 67, 69 }, - { 67, 14 }, - { 51, 63 }, - { 51, 37 }, + { 55, 69 }, + { 55, 32 }, + { 55, 33 }, + { 55, 34 }, + { 55, 35 }, + { 54, 68 }, + { 55, 36 }, + { 71, 73 }, + { 71, 14 }, + { 53, 67 }, + { 53, 37 }, { 0, 1 }, { 0, 2 }, - { 50, 62 }, - { 67, 15 }, - { 49, 61 }, - { 67, 16 }, - { 48, 60 }, - { 47, 59 }, - { 46, 58 }, - { 45, 57 }, + { 52, 66 }, + { 71, 15 }, + { 51, 65 }, + { 71, 16 }, + { 50, 64 }, + { 49, 63 }, + { 48, 62 }, + { 47, 61 }, + { 46, 60 }, + { 45, 59 }, { 28, 44 }, { 26, 43 }, { 24, 42 }, @@ -783,7 +844,7 @@ void YYPARSENAME::yytables() { 6, 20 } }; yynontermgoto = nontermgoto; - yynontermgoto_size = 30; + yynontermgoto_size = 32; static const yystategoto_t YYNEARFAR YYBASED_CODE stategoto[] = { { 10, -1 }, @@ -792,11 +853,11 @@ void YYPARSENAME::yytables() { 0, -1 }, { 0, -1 }, { 0, -1 }, - { 26, 67 }, + { 28, 71 }, { 0, -1 }, { 0, -1 }, { 0, -1 }, - { 26, -1 }, + { 28, -1 }, { 0, -1 }, { 0, -1 }, { 0, -1 }, @@ -804,17 +865,17 @@ void YYPARSENAME::yytables() { 0, -1 }, { 0, -1 }, { 0, -1 }, - { 22, 53 }, - { 21, 53 }, + { 24, 55 }, + { 23, 55 }, { 0, -1 }, { 0, -1 }, - { 14, 51 }, - { 21, 67 }, - { 10, -1 }, - { 0, -1 }, - { 11, 51 }, - { 0, -1 }, { 16, 53 }, + { 23, 71 }, + { 12, -1 }, + { 0, -1 }, + { 13, 53 }, + { 0, -1 }, + { 12, 53 }, { 0, -1 }, { 0, -1 }, { 0, -1 }, @@ -831,15 +892,19 @@ void YYPARSENAME::yytables() { 0, -1 }, { 0, -1 }, { 0, -1 }, - { 17, 67 }, - { 8, 51 }, - { 7, 51 }, - { 6, 51 }, - { 4, 51 }, - { 2, 51 }, + { 19, 71 }, + { 10, 53 }, + { 9, 53 }, + { 8, 53 }, + { 7, 53 }, + { 6, 53 }, + { 4, 53 }, + { 2, 53 }, { -2, -1 }, - { 2, 67 }, - { -5, 51 }, + { 2, 71 }, + { -5, 53 }, + { 0, -1 }, + { 0, -1 }, { 0, -1 }, { 0, -1 }, { 0, -1 }, diff --git a/Utils/Scripter/parser.h b/Utils/Scripter/parser.h index 18555d546..e1241b297 100644 --- a/Utils/Scripter/parser.h +++ b/Utils/Scripter/parser.h @@ -74,13 +74,15 @@ union tagYYSTYPE { #define GREATERTHAN 268 #define PLUS 269 #define SUBTRACT 270 -#define END_STMT 271 -#define OPEN_PAR 272 -#define CLOSE_PAR 273 -#define BEGIN_CS 274 -#define END_CS 275 -#define COMMA 276 -#define VARIABLE 277 -#define VALUE 278 -#define FUNCTION 279 +#define MULTIPLY 271 +#define DIVIDE 272 +#define END_STMT 273 +#define OPEN_PAR 274 +#define CLOSE_PAR 275 +#define BEGIN_CS 276 +#define END_CS 277 +#define COMMA 278 +#define VARIABLE 279 +#define VALUE 280 +#define FUNCTION 281 #endif diff --git a/Utils/Scripter/parser.v b/Utils/Scripter/parser.v index 0324a2a35..7ddbe849d 100644 --- a/Utils/Scripter/parser.v +++ b/Utils/Scripter/parser.v @@ -19,31 +19,33 @@ 15 assign_expression : variable ASSIGN value - 16 expression : OPEN_PAR expression CLOSE_PAR - 17 | equal_expression - 18 | notequal_expression - 19 | lessthan_expression - 20 | greaterthan_expression + 16 expression : equal_expression + 17 | notequal_expression + 18 | lessthan_expression + 19 | greaterthan_expression - 21 equal_expression : value EQUAL value + 20 equal_expression : value EQUAL value - 22 notequal_expression : value NOTEQUAL value + 21 notequal_expression : value NOTEQUAL value - 23 lessthan_expression : value LESSTHAN value + 22 lessthan_expression : value LESSTHAN value - 24 greaterthan_expression : value GREATERTHAN value + 23 greaterthan_expression : value GREATERTHAN value - 25 variable : VARIABLE + 24 variable : VARIABLE - 26 value : VALUE + 25 value : VALUE + 26 | OPEN_PAR value CLOSE_PAR 27 | VARIABLE 28 | value PLUS value 29 | value SUBTRACT value - 30 | function + 30 | value MULTIPLY value + 31 | value DIVIDE value + 32 | function - 31 $$1 : + 33 $$1 : - 32 function : FUNCTION OPEN_PAR $$1 CLOSE_PAR + 34 function : FUNCTION OPEN_PAR $$1 CLOSE_PAR state 0 @@ -151,9 +153,9 @@ state 10 state 11 - variable : VARIABLE . (25) + variable : VARIABLE . (24) - . reduce 25 + . reduce 24 state 12 @@ -242,6 +244,7 @@ state 21 state 22 statement : PRINT OPEN_PAR . value CLOSE_PAR END_STMT + OPEN_PAR shift 28 VARIABLE shift 29 VALUE shift 30 FUNCTION shift 12 @@ -274,9 +277,9 @@ state 23 state 24 function : FUNCTION OPEN_PAR . $$1 CLOSE_PAR - $$1 : . (31) + $$1 : . (33) - . reduce 31 + . reduce 33 $$1 goto 42 @@ -290,6 +293,7 @@ state 25 state 26 assign_expression : variable ASSIGN . value + OPEN_PAR shift 28 VARIABLE shift 29 VALUE shift 30 FUNCTION shift 12 @@ -305,19 +309,14 @@ state 27 state 28 - expression : OPEN_PAR . expression CLOSE_PAR + value : OPEN_PAR . value CLOSE_PAR OPEN_PAR shift 28 VARIABLE shift 29 VALUE shift 30 FUNCTION shift 12 - expression goto 44 - equal_expression goto 32 - notequal_expression goto 33 - lessthan_expression goto 34 - greaterthan_expression goto 35 - value goto 36 + value goto 44 function goto 37 @@ -328,9 +327,9 @@ state 29 state 30 - value : VALUE . (26) + value : VALUE . (25) - . reduce 26 + . reduce 25 state 31 @@ -341,29 +340,29 @@ state 31 state 32 - expression : equal_expression . (17) + expression : equal_expression . (16) + + . reduce 16 + + +state 33 + expression : notequal_expression . (17) . reduce 17 -state 33 - expression : notequal_expression . (18) +state 34 + expression : lessthan_expression . (18) . reduce 18 -state 34 - expression : lessthan_expression . (19) +state 35 + expression : greaterthan_expression . (19) . reduce 19 -state 35 - expression : greaterthan_expression . (20) - - . reduce 20 - - state 36 equal_expression : value . EQUAL value notequal_expression : value . NOTEQUAL value @@ -371,6 +370,8 @@ state 36 greaterthan_expression : value . GREATERTHAN value value : value . PLUS value value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value EQUAL shift 46 NOTEQUAL shift 47 @@ -378,34 +379,40 @@ state 36 GREATERTHAN shift 49 PLUS shift 50 SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 state 37 - value : function . (30) + value : function . (32) - . reduce 30 + . reduce 32 state 38 statement : WHILE OPEN_PAR expression . CLOSE_PAR statement - CLOSE_PAR shift 52 + CLOSE_PAR shift 54 state 39 statement : DO statement WHILE . OPEN_PAR expression CLOSE_PAR END_STMT - OPEN_PAR shift 53 + OPEN_PAR shift 55 state 40 statement : PRINT OPEN_PAR value . CLOSE_PAR END_STMT value : value . PLUS value value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value PLUS shift 50 SUBTRACT shift 51 - CLOSE_PAR shift 54 + MULTIPLY shift 52 + DIVIDE shift 53 + CLOSE_PAR shift 56 state 41 @@ -417,23 +424,35 @@ state 41 state 42 function : FUNCTION OPEN_PAR $$1 . CLOSE_PAR - CLOSE_PAR shift 55 + CLOSE_PAR shift 57 state 43 assign_expression : variable ASSIGN value . (15) value : value . PLUS value value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value PLUS shift 50 SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 . reduce 15 state 44 - expression : OPEN_PAR expression . CLOSE_PAR + value : OPEN_PAR value . CLOSE_PAR + value : value . PLUS value + value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value - CLOSE_PAR shift 56 + PLUS shift 50 + SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 + CLOSE_PAR shift 58 state 45 @@ -451,7 +470,7 @@ state 45 VARIABLE shift 11 FUNCTION shift 12 - statement goto 57 + statement goto 59 assign_expression goto 14 variable goto 15 function goto 16 @@ -460,28 +479,7 @@ state 45 state 46 equal_expression : value EQUAL . value - VARIABLE shift 29 - VALUE shift 30 - FUNCTION shift 12 - - value goto 58 - function goto 37 - - -state 47 - notequal_expression : value NOTEQUAL . value - - VARIABLE shift 29 - VALUE shift 30 - FUNCTION shift 12 - - value goto 59 - function goto 37 - - -state 48 - lessthan_expression : value LESSTHAN . value - + OPEN_PAR shift 28 VARIABLE shift 29 VALUE shift 30 FUNCTION shift 12 @@ -490,9 +488,10 @@ state 48 function goto 37 -state 49 - greaterthan_expression : value GREATERTHAN . value +state 47 + notequal_expression : value NOTEQUAL . value + OPEN_PAR shift 28 VARIABLE shift 29 VALUE shift 30 FUNCTION shift 12 @@ -501,9 +500,10 @@ state 49 function goto 37 -state 50 - value : value PLUS . value +state 48 + lessthan_expression : value LESSTHAN . value + OPEN_PAR shift 28 VARIABLE shift 29 VALUE shift 30 FUNCTION shift 12 @@ -512,9 +512,10 @@ state 50 function goto 37 -state 51 - value : value SUBTRACT . value +state 49 + greaterthan_expression : value GREATERTHAN . value + OPEN_PAR shift 28 VARIABLE shift 29 VALUE shift 30 FUNCTION shift 12 @@ -523,7 +524,55 @@ state 51 function goto 37 +state 50 + value : value PLUS . value + + OPEN_PAR shift 28 + VARIABLE shift 29 + VALUE shift 30 + FUNCTION shift 12 + + value goto 64 + function goto 37 + + +state 51 + value : value SUBTRACT . value + + OPEN_PAR shift 28 + VARIABLE shift 29 + VALUE shift 30 + FUNCTION shift 12 + + value goto 65 + function goto 37 + + state 52 + value : value MULTIPLY . value + + OPEN_PAR shift 28 + VARIABLE shift 29 + VALUE shift 30 + FUNCTION shift 12 + + value goto 66 + function goto 37 + + +state 53 + value : value DIVIDE . value + + OPEN_PAR shift 28 + VARIABLE shift 29 + VALUE shift 30 + FUNCTION shift 12 + + value goto 67 + function goto 37 + + +state 54 statement : WHILE OPEN_PAR expression CLOSE_PAR . statement STOP shift 3 @@ -537,13 +586,13 @@ state 52 VARIABLE shift 11 FUNCTION shift 12 - statement goto 64 + statement goto 68 assign_expression goto 14 variable goto 15 function goto 16 -state 53 +state 55 statement : DO statement WHILE OPEN_PAR . expression CLOSE_PAR END_STMT OPEN_PAR shift 28 @@ -551,7 +600,7 @@ state 53 VALUE shift 30 FUNCTION shift 12 - expression goto 65 + expression goto 69 equal_expression goto 32 notequal_expression goto 33 lessthan_expression goto 34 @@ -560,116 +609,180 @@ state 53 function goto 37 -state 54 +state 56 statement : PRINT OPEN_PAR value CLOSE_PAR . END_STMT - END_STMT shift 66 + END_STMT shift 70 -state 55 - function : FUNCTION OPEN_PAR $$1 CLOSE_PAR . (32) - - . reduce 32 - - -state 56 - expression : OPEN_PAR expression CLOSE_PAR . (16) - - . reduce 16 - - -57: shift-reduce conflict (shift 67, reduce 9) on ELSE state 57 - statement : IF OPEN_PAR expression CLOSE_PAR statement . (9) - statement : IF OPEN_PAR expression CLOSE_PAR statement . ELSE statement + function : FUNCTION OPEN_PAR $$1 CLOSE_PAR . (34) - ELSE shift 67 - . reduce 9 + . reduce 34 state 58 - equal_expression : value EQUAL value . (21) - value : value . PLUS value - value : value . SUBTRACT value + value : OPEN_PAR value CLOSE_PAR . (26) - PLUS shift 50 - SUBTRACT shift 51 - . reduce 21 + . reduce 26 +59: shift-reduce conflict (shift 71, reduce 9) on ELSE state 59 - notequal_expression : value NOTEQUAL value . (22) - value : value . PLUS value - value : value . SUBTRACT value + statement : IF OPEN_PAR expression CLOSE_PAR statement . (9) + statement : IF OPEN_PAR expression CLOSE_PAR statement . ELSE statement - PLUS shift 50 - SUBTRACT shift 51 - . reduce 22 + ELSE shift 71 + . reduce 9 state 60 - lessthan_expression : value LESSTHAN value . (23) + equal_expression : value EQUAL value . (20) value : value . PLUS value value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value PLUS shift 50 SUBTRACT shift 51 - . reduce 23 + MULTIPLY shift 52 + DIVIDE shift 53 + . reduce 20 state 61 - greaterthan_expression : value GREATERTHAN value . (24) + notequal_expression : value NOTEQUAL value . (21) value : value . PLUS value value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value PLUS shift 50 SUBTRACT shift 51 - . reduce 24 + MULTIPLY shift 52 + DIVIDE shift 53 + . reduce 21 -62: shift-reduce conflict (shift 50, reduce 28) on PLUS -62: shift-reduce conflict (shift 51, reduce 28) on SUBTRACT state 62 + lessthan_expression : value LESSTHAN value . (22) + value : value . PLUS value + value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value + + PLUS shift 50 + SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 + . reduce 22 + + +state 63 + greaterthan_expression : value GREATERTHAN value . (23) + value : value . PLUS value + value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value + + PLUS shift 50 + SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 + . reduce 23 + + +64: shift-reduce conflict (shift 50, reduce 28) on PLUS +64: shift-reduce conflict (shift 51, reduce 28) on SUBTRACT +64: shift-reduce conflict (shift 52, reduce 28) on MULTIPLY +64: shift-reduce conflict (shift 53, reduce 28) on DIVIDE +state 64 value : value PLUS value . (28) value : value . PLUS value value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value PLUS shift 50 SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 . reduce 28 -63: shift-reduce conflict (shift 50, reduce 29) on PLUS -63: shift-reduce conflict (shift 51, reduce 29) on SUBTRACT -state 63 +65: shift-reduce conflict (shift 50, reduce 29) on PLUS +65: shift-reduce conflict (shift 51, reduce 29) on SUBTRACT +65: shift-reduce conflict (shift 52, reduce 29) on MULTIPLY +65: shift-reduce conflict (shift 53, reduce 29) on DIVIDE +state 65 value : value . PLUS value value : value SUBTRACT value . (29) value : value . SUBTRACT value + value : value . MULTIPLY value + value : value . DIVIDE value PLUS shift 50 SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 . reduce 29 -state 64 +66: shift-reduce conflict (shift 50, reduce 30) on PLUS +66: shift-reduce conflict (shift 51, reduce 30) on SUBTRACT +66: shift-reduce conflict (shift 52, reduce 30) on MULTIPLY +66: shift-reduce conflict (shift 53, reduce 30) on DIVIDE +state 66 + value : value . PLUS value + value : value . SUBTRACT value + value : value MULTIPLY value . (30) + value : value . MULTIPLY value + value : value . DIVIDE value + + PLUS shift 50 + SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 + . reduce 30 + + +67: shift-reduce conflict (shift 50, reduce 31) on PLUS +67: shift-reduce conflict (shift 51, reduce 31) on SUBTRACT +67: shift-reduce conflict (shift 52, reduce 31) on MULTIPLY +67: shift-reduce conflict (shift 53, reduce 31) on DIVIDE +state 67 + value : value . PLUS value + value : value . SUBTRACT value + value : value . MULTIPLY value + value : value DIVIDE value . (31) + value : value . DIVIDE value + + PLUS shift 50 + SUBTRACT shift 51 + MULTIPLY shift 52 + DIVIDE shift 53 + . reduce 31 + + +state 68 statement : WHILE OPEN_PAR expression CLOSE_PAR statement . (11) . reduce 11 -state 65 +state 69 statement : DO statement WHILE OPEN_PAR expression . CLOSE_PAR END_STMT - CLOSE_PAR shift 68 + CLOSE_PAR shift 72 -state 66 +state 70 statement : PRINT OPEN_PAR value CLOSE_PAR END_STMT . (7) . reduce 7 -state 67 +state 71 statement : IF OPEN_PAR expression CLOSE_PAR statement ELSE . statement STOP shift 3 @@ -683,34 +796,36 @@ state 67 VARIABLE shift 11 FUNCTION shift 12 - statement goto 69 + statement goto 73 assign_expression goto 14 variable goto 15 function goto 16 -state 68 +state 72 statement : DO statement WHILE OPEN_PAR expression CLOSE_PAR . END_STMT - END_STMT shift 70 + END_STMT shift 74 -state 69 +state 73 statement : IF OPEN_PAR expression CLOSE_PAR statement ELSE statement . (10) . reduce 10 -state 70 +state 74 statement : DO statement WHILE OPEN_PAR expression CLOSE_PAR END_STMT . (12) . reduce 12 -State 57 contains 1 shift-reduce conflict -State 62 contains 2 shift-reduce conflicts -State 63 contains 2 shift-reduce conflicts +State 59 contains 1 shift-reduce conflict +State 64 contains 4 shift-reduce conflicts +State 65 contains 4 shift-reduce conflicts +State 66 contains 4 shift-reduce conflicts +State 67 contains 4 shift-reduce conflicts -24 tokens, 14 nonterminals -33 grammar rules, 71 states +26 tokens, 14 nonterminals +35 grammar rules, 75 states diff --git a/Utils/Scripter/parser.y b/Utils/Scripter/parser.y index 4fa80350f..656ee093e 100644 --- a/Utils/Scripter/parser.y +++ b/Utils/Scripter/parser.y @@ -77,6 +77,8 @@ private: %token GREATERTHAN %token PLUS %token SUBTRACT +%token MULTIPLY +%token DIVIDE %token END_STMT %token OPEN_PAR %token CLOSE_PAR @@ -133,8 +135,7 @@ assign_expression expression - :OPEN_PAR expression CLOSE_PAR {$$=$2;} - |equal_expression {$$=$1;} + :equal_expression {$$=$1;} |notequal_expression {$$=$1;} |lessthan_expression {$$=$1;} |greaterthan_expression {$$=$1;} @@ -163,11 +164,14 @@ variable value :VALUE {$$=new CTreeNode(VALUE_EXPR,$1);} + |OPEN_PAR value CLOSE_PAR {$$=$2;} |VARIABLE {$$=new CTreeNode(VARIABLE_EXPR,$1);} // variable value // |PLUS value {$$=$2;} -// |SUBTRACT value {$$=new CTreeNode(STMT_LIST,$1,new CTreeNode( +// |SUBTRACT value {$$=new CTreeNode(STMT_LIST,CTreeNodeCTreeNode(VALUE_EXPR,$2);} |value PLUS value {$$=new CTreeNode(PLUS_EXPR,$1,$3);} |value SUBTRACT value {$$=new CTreeNode(SUBTRACT_EXPR,$1,$3);} + |value MULTIPLY value {$$=new CTreeNode(MULTIPLY_EXPR,$1,$3);} + |value DIVIDE value {$$=new CTreeNode(DIVIDE_EXPR,$1,$3);} |function {$$=$1;} ; diff --git a/data/Scripts/test.scr b/data/Scripts/test.scr index 898f3d9cb..b2937df47 100644 --- a/data/Scripts/test.scr +++ b/data/Scripts/test.scr @@ -2,29 +2,13 @@ #include data/scripts/defs/charanim.scr -//do -//{ -// print($tmp1); -// $tmp1=$tmp1+1; -// pause; -//} -//while($tmp1<1); -//print(112-_setText(1)); -//do -//{ -// print($tmp1); -// $tmp1=$tmp1+1; -// pause; -//} -//while($tmp1<2); -//print(222); -//stop; +/* +_setCharacterAnimation(CHAR_SPONGEBOB,ANIM_QUIET); +_setText(123); +pause; +*/ -//_setCharacterAnimation(CHAR_SPONGEBOB,ANIM_QUIET); -//_setText(123); -//pause; - #define x $tmp1 #define y $tmp2 #define vx $tmp3 @@ -38,16 +22,14 @@ vy=velocity; while(1==1) { -// readout for fps :) -$tmp0=_getFrameTime(); -//print($tmp0); -$tmp5=50; -do{ - _drawSprite(4,$tmp5,50,10); - $tmp5=$tmp5+15; - $tmp0=$tmp0-1; -}while($tmp0>0); - + // readout for fps :) + $tmp0=_getFrameTime(); + $tmp5=50; + do{ + _drawSprite(4,$tmp5,50,10); + $tmp5=$tmp5+20; + $tmp0=$tmp0-1; + }while($tmp0>0); _drawSprite(0,x,y,100); $tmp0=_getFrameTime(); diff --git a/source/script/script.cpp b/source/script/script.cpp index 19aa0c1f9..4b633def4 100644 --- a/source/script/script.cpp +++ b/source/script/script.cpp @@ -295,6 +295,32 @@ PAUL_DBGMSG("pc:0x%04d sp:%03d",m_pc*2,m_sp); push(val1+val2); break; + case OP_MULTIPLY: // value, value pushes result to stack + val1=pop(); + val2=pop(); +#ifdef FULL_CODE_OUTPUT + PAUL_DBGMSG("MULTIPLY %d,%d",val1,val2); +#endif + push(val1*val2); + break; + + case OP_DIVIDE: // value, value pushes result to stack + val1=pop(); + val2=pop(); +#ifdef FULL_CODE_OUTPUT + PAUL_DBGMSG("DIVIDE %d,%d",val1,val2); +#endif + if(val2==0) + { + SYSTEM_DBGMSG("[SCRIPT] DIVIDE BY ZERO @%d",m_pc); + m_state=CRASHED_DIVIDE_BY_ZERO; + } + else + { + push(val1/val2); + } + break; + case OP_NEG: // value pushes result to stack val1=pop(); #ifdef FULL_CODE_OUTPUT @@ -327,7 +353,7 @@ PAUL_DBGMSG("pc:0x%04d sp:%03d",m_pc*2,m_sp); break; default: - PAUL_DBGMSG("ILLEGAL OPCODE@%d ( %d )",m_pc,instruction); + SYSTEM_DBGMSG("[SCRIPT] ILLEGAL OPCODE@%d ( %d )",m_pc,instruction); m_state=CRASHED_ILLEGAL_OPCODE; break; } diff --git a/source/script/script.h b/source/script/script.h index a4820a873..37e96ebb6 100644 --- a/source/script/script.h +++ b/source/script/script.h @@ -78,6 +78,7 @@ private: STOPPED_STACK_NOT_EMPTY, CRASHED_ILLEGAL_OPCODE, + CRASHED_DIVIDE_BY_ZERO, }ScriptState; enum @@ -104,6 +105,8 @@ private: OP_IS_GREATERTHAN_VALUE,// value, value pushes result ( 0 or 1 ) to stack OP_ASSIGN, // varidx, value OP_ADD, // value, value pushes result to stack + OP_MULTIPLY, // value, value pushes result to stack + OP_DIVIDE, // value, value pushes result to stack OP_NEG, // value pushes result to stack OP_PRINT, // value OP_CALL_FUNCTION, // functionnumber, argcount args pushes return value to stack diff --git a/tools/scripter.exe b/tools/scripter.exe index 54ee53ea0..6dd2867c4 100644 Binary files a/tools/scripter.exe and b/tools/scripter.exe differ