This commit is contained in:
Paul 2000-12-22 17:10:46 +00:00
parent 8649d25cff
commit 86e55aae82
14 changed files with 955 additions and 654 deletions

View File

@ -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);

View File

@ -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

View File

@ -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 // <warning: unreachable code> 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;

View File

@ -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

View File

@ -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 {}

View File

@ -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 */

View File

@ -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 },

View File

@ -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

View File

@ -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

View File

@ -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;}
;

View File

@ -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();

View File

@ -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;
}

View File

@ -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

Binary file not shown.