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); codeSize+=emit(OP_ADD,_write);
break; 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] case FUNCTION_EXPR: // function [functionNumber]
codeSize+=emit(OP_CALL_FUNCTION,_write); codeSize+=emit(OP_CALL_FUNCTION,_write);
codeSize+=emit(getFunctionNumber(),_write); codeSize+=emit(getFunctionNumber(),_write);

View file

@ -49,6 +49,8 @@ typedef enum
VALUE_EXPR, // value VALUE_EXPR, // value
PLUS_EXPR, // + [value, value] PLUS_EXPR, // + [value, value]
SUBTRACT_EXPR, // - [value, value] SUBTRACT_EXPR, // - [value, value]
MULTIPLY_EXPR, // * [value, value]
DIVIDE_EXPR, // / [value, value]
FUNCTION_EXPR, // function [functionNumber] FUNCTION_EXPR, // function [functionNumber]
}NodeType; }NodeType;
@ -94,6 +96,8 @@ private:
OP_IS_GREATERTHAN_VALUE,// value, value pushes result ( 0 or 1 ) to stack OP_IS_GREATERTHAN_VALUE,// value, value pushes result ( 0 or 1 ) to stack
OP_ASSIGN, // varidx, value OP_ASSIGN, // varidx, value
OP_ADD, // value, value pushes result to stack 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_NEG, // value pushes result to stack
OP_PRINT, // value OP_PRINT, // value
OP_CALL_FUNCTION, // functionNumber, argcount args pushes return value to stack OP_CALL_FUNCTION, // functionNumber, argcount args pushes return value to stack

View file

@ -29,7 +29,7 @@ Date: 07 December 2000
YYLEXNAME::YYLEXNAME() YYLEXNAME::YYLEXNAME()
{ {
yytables(); yytables();
#line 46 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 47 "C:\\spongebob\\Utils\\scripter\\lexer.l"
// place any extra initialisation code here // place any extra initialisation code here
@ -79,7 +79,7 @@ void YYLEXNAME::yyunput(int ch)
int YYLEXNAME::yyaction(int action) 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 // extract yylval for use later on in actions
YYSTYPE& yylval = *(YYSTYPE*)yyparserptr->yylvalptr; YYSTYPE& yylval = *(YYSTYPE*)yyparserptr->yylvalptr;
@ -89,196 +89,196 @@ YYSTYPE& yylval = *(YYSTYPE*)yyparserptr->yylvalptr;
switch (action) { switch (action) {
case 1: 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(); if(preprocessorCmd(yytext+1)!=(int)true)error();
#line 95 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 95 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 2: 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(); printf("# commands must be at start of line!\n");error();
#line 102 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 102 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 3: case 3:
{ {
#line 68 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 69 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return STOP; return STOP;
#line 109 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 109 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 4: case 4:
{ {
#line 69 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 70 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return IF; return IF;
#line 116 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 116 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 5: case 5:
{ {
#line 70 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 71 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return ELSE; return ELSE;
#line 123 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 123 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 6: case 6:
{ {
#line 71 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 72 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return WHILE; return WHILE;
#line 130 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 130 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 7: case 7:
{ {
#line 72 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 73 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return DO; return DO;
#line 137 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 137 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 8: case 8:
{ {
#line 73 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 74 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return PAUSE; return PAUSE;
#line 144 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 144 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 9: case 9:
{ {
#line 74 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 75 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return PRINT; return PRINT;
#line 151 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 151 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 10: case 10:
{ {
#line 75 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 76 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return ASSIGN; return ASSIGN;
#line 158 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 158 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 11: case 11:
{ {
#line 76 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 77 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return EQUAL; return EQUAL;
#line 165 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 165 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 12: case 12:
{ {
#line 77 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 78 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return NOTEQUAL; return NOTEQUAL;
#line 172 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 172 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 13: case 13:
{ {
#line 78 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 79 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return LESSTHAN; return LESSTHAN;
#line 179 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 179 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 14: case 14:
{ {
#line 79 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 80 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return GREATERTHAN; return GREATERTHAN;
#line 186 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 186 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 15: case 15:
{ {
#line 80 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 81 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return PLUS; return PLUS;
#line 193 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 193 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 16: case 16:
{ {
#line 81 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 82 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return SUBTRACT; return SUBTRACT;
#line 200 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 200 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 17: case 17:
{ {
#line 82 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 83 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return END_STMT; return MULTIPLY;
#line 207 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 207 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 18: case 18:
{ {
#line 83 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 84 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return OPEN_PAR; return DIVIDE;
#line 214 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 214 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 19: case 19:
{ {
#line 84 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 85 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return CLOSE_PAR; return END_STMT;
#line 221 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 221 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 20: case 20:
{ {
#line 85 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 86 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return BEGIN_CS; return OPEN_PAR;
#line 228 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 228 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 21: case 21:
{ {
#line 86 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 87 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return END_CS; return CLOSE_PAR;
#line 235 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 235 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 22: case 22:
{ {
#line 87 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 88 "C:\\spongebob\\Utils\\scripter\\lexer.l"
return COMMA; return BEGIN_CS;
#line 242 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 242 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 23: case 23:
{ {
#line 90 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 89 "C:\\spongebob\\Utils\\scripter\\lexer.l"
yylval.variableIdx=lookupVarName(yytext+1);return VARIABLE; return END_CS;
#line 249 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 249 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 24: case 24:
{ {
#line 91 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 90 "C:\\spongebob\\Utils\\scripter\\lexer.l"
yylval.value=atoi(yytext);return VALUE; return COMMA;
#line 256 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 256 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 25: case 25:
{ {
#line 94 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 93 "C:\\spongebob\\Utils\\scripter\\lexer.l"
yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION; yylval.variableIdx=lookupVarName(yytext+1);return VARIABLE;
#line 263 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 263 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 26: 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" #line 270 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 27: case 27:
{ {
#line 97 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 97 "C:\\spongebob\\Utils\\scripter\\lexer.l"
yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION;
#line 277 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 277 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; break;
case 28: 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" #line 284 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
@ -286,10 +286,31 @@ yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION;
case 29: case 29:
{ {
#line 100 "C:\\spongebob\\Utils\\scripter\\lexer.l" #line 100 "C:\\spongebob\\Utils\\scripter\\lexer.l"
unexpectedChar(); comment();
#line 291 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 291 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
} }
break; 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: default:
yyassert(0); yyassert(0);
break; break;
@ -303,7 +324,7 @@ unexpectedChar();
#pragma warn .rch // <warning: unreachable code> to the old state #pragma warn .rch // <warning: unreachable code> to the old state
#endif #endif
#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 // programs section
#line 315 "C:\\spongebob\\Utils\\scripter\\lexer.cpp" #line 336 "C:\\spongebob\\Utils\\scripter\\lexer.cpp"
void YYLEXNAME::yytables() void YYLEXNAME::yytables()
{ {
@ -335,9 +356,9 @@ void YYLEXNAME::yytables()
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 26, 26 }, { 27, 27 },
{ 0, 40 }, { 0, 39 },
{ 0, 54 }, { 0, 56 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@ -358,7 +379,7 @@ void YYLEXNAME::yytables()
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 26, 26 }, { 27, 27 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 3, 1 }, { 3, 1 },
@ -368,172 +389,162 @@ void YYLEXNAME::yytables()
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 40, 17 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 39, 17 },
{ 40, 25 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 37, 11 }, { 38, 11 },
{ 36, 10 }, { 37, 10 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 38, 38 }, { 41, 41 },
{ 0, 0 }, { 0, 0 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 38, 38 }, { 41, 41 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 44, 34 }, { 46, 35 },
{ 53, 50 }, { 55, 52 },
{ 29, 4 }, { 30, 4 },
{ 42, 31 }, { 44, 32 },
{ 49, 44 }, { 51, 46 },
{ 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 },
{ 48, 43 }, { 48, 43 },
{ 39, 39 }, { 34, 8 },
{ 43, 32 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 42, 42 },
{ 39, 39 }, { 43, 30 },
{ 0, 22 }, { 52, 47 },
{ 0, 22 }, { 32, 6 },
{ 0, 22 }, { 50, 45 },
{ 0, 22 }, { 42, 42 },
{ 0, 22 }, { 45, 33 },
{ 0, 22 }, { 42, 42 },
{ 0, 22 }, { 42, 42 },
{ 0, 22 }, { 42, 42 },
{ 0, 22 }, { 42, 42 },
{ 0, 22 }, { 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 }, { 0, 24 },
{ 0, 24 }, { 0, 24 },
@ -544,57 +555,67 @@ void YYLEXNAME::yytables()
{ 0, 24 }, { 0, 24 },
{ 0, 24 }, { 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 }, { 27, 2 },
{ 34, 9 }, { 28, 2 },
{ 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 },
{ 35, 9 }, { 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 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 26, 2 }, { 27, 2 },
{ 11, 2 }, { 11, 2 },
{ 0, 0 }, { 0, 0 },
{ 54, 2 }, { 56, 2 },
{ 22, 2 }, { 24, 2 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 17, 2 }, { 19, 2 },
{ 18, 2 }, { 20, 2 },
{ 0, 0 }, { 16, 2 },
{ 14, 2 }, { 14, 2 },
{ 21, 2 }, { 23, 2 },
{ 15, 2 }, { 15, 2 },
{ 0, 0 }, { 0, 0 },
{ 17, 2 },
{ 25, 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 }, { 0, 0 },
{ 16, 2 }, { 18, 2 },
{ 12, 2 }, { 12, 2 },
{ 10, 2 }, { 10, 2 },
{ 13, 2 }, { 13, 2 },
@ -630,7 +651,7 @@ void YYLEXNAME::yytables()
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 24, 2 }, { 26, 2 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@ -658,68 +679,70 @@ void YYLEXNAME::yytables()
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 19, 2 }, { 21, 2 },
{ 0, 0 }, { 0, 0 },
{ 20, 2 } { 22, 2 }
}; };
yytransition = transition; yytransition = transition;
static const yystate_t YYNEARFAR YYBASED_CODE state[] = { static const yystate_t YYNEARFAR YYBASED_CODE state[] = {
{ 0, 0, 0 }, { 0, 0, 0 },
{ 2, 1, 0 }, { 2, 1, 0 },
{ -28, 210, 0 }, { -29, 210, 0 },
{ 0, 0, 2 }, { 0, 0, 2 },
{ 50, 20, 29 }, { 52, 20, 32 },
{ 0, 132, 29 }, { 0, 132, 32 },
{ 43, 61, 29 }, { 45, 61, 32 },
{ 0, 129, 29 }, { 0, 129, 32 },
{ 29, 29, 29 }, { 30, 29, 32 },
{ 0, 124, 29 }, { 0, 124, 32 },
{ 11, 2, 10 }, { 11, 2, 10 },
{ 0, 1, 29 }, { 0, 1, 32 },
{ 0, 0, 13 }, { 0, 0, 13 },
{ 0, 0, 14 }, { 0, 0, 14 },
{ 0, 0, 15 }, { 0, 0, 15 },
{ 0, 0, 16 }, { 0, 0, 16 },
{ 0, 0, 17 }, { 0, 0, 17 },
{ 0, 0, 18 }, { 0, 1, 18 },
{ 0, 0, 19 }, { 0, 0, 19 },
{ 0, 0, 20 }, { 0, 0, 20 },
{ 0, 0, 21 }, { 0, 0, 21 },
{ 0, 0, 22 }, { 0, 0, 22 },
{ 38, 151, 29 }, { 0, 0, 23 },
{ 0, 174, 24 }, { 0, 0, 24 },
{ 39, 161, 29 }, { 41, 151, 32 },
{ 0, 1, 29 }, { 0, 174, 26 },
{ 0, 1, 27 }, { 42, 161, 32 },
{ 0, 0, 28 }, { 0, 1, 30 },
{ 0, 0, 29 }, { 0, 0, 31 },
{ 0, 0, 32 },
{ 0, 56, 0 }, { 0, 56, 0 },
{ 0, 0, 4 }, { 0, 0, 4 },
{ 44, 22, 0 }, { 46, 22, 0 },
{ 35, 67, 0 }, { 36, 67, 0 },
{ 0, 0, 7 }, { 0, 0, 7 },
{ 0, 17, 0 }, { 0, 17, 0 },
{ 0, 127, 0 }, { 0, 127, 0 },
{ 0, 0, 11 }, { 0, 0, 11 },
{ 0, 0, 12 }, { 0, 0, 12 },
{ 50, 1, 23 }, { -39, 1, 28 },
{ 50, 76, 25 }, { 0, 0, 29 },
{ -40, 1, 26 }, { 52, 1, 25 },
{ 52, 76, 27 },
{ 0, 27, 0 }, { 0, 27, 0 },
{ 49, 135, 0 }, { 51, 135, 0 },
{ 0, 62, 0 }, { 0, 62, 0 },
{ 0, 23, 0 }, { 0, 23, 0 },
{ 0, 58, 0 }, { 0, 58, 0 },
{ 0, 0, 3 }, { 0, 0, 3 },
{ 0, 0, 5 }, { 0, 0, 5 },
{ 49, 136, 0 }, { 51, 136, 0 },
{ 0, 134, 0 }, { 0, 134, 0 },
{ 0, 19, 0 }, { 0, 19, 0 },
{ 0, 0, 6 }, { 0, 0, 6 },
{ 0, 0, 8 }, { 0, 0, 8 },
{ 0, 0, 9 }, { 0, 0, 9 },
{ -54, 2, 1 } { -56, 2, 1 }
}; };
yystate = state; yystate = state;
@ -753,6 +776,9 @@ void YYLEXNAME::yytables()
0, 0,
0, 0,
0, 0,
0,
0,
0,
0 0
}; };
yybackup = backup; yybackup = backup;

View file

@ -31,11 +31,12 @@ public:
private: private:
void unexpectedChar(); void unexpectedChar();
void comment();
class myparser *m_currentParser; class myparser *m_currentParser;
#line 39 "C:\\spongebob\\Utils\\scripter\\lexer.h" #line 40 "C:\\spongebob\\Utils\\scripter\\lexer.h"
}; };
#ifndef YYLEXNAME #ifndef YYLEXNAME

View file

@ -37,6 +37,7 @@ Date: 07 December 2000
private: private:
void unexpectedChar(); void unexpectedChar();
void comment();
class myparser *m_currentParser; class myparser *m_currentParser;
@ -79,6 +80,8 @@ print {return PRINT;}
\> {return GREATERTHAN;} \> {return GREATERTHAN;}
\+ {return PLUS;} \+ {return PLUS;}
\- {return SUBTRACT;} \- {return SUBTRACT;}
\* {return MULTIPLY;}
\/ {return DIVIDE;}
; {return END_STMT;} ; {return END_STMT;}
\( {return OPEN_PAR;} \( {return OPEN_PAR;}
\) {return CLOSE_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;} _[a-zA-Z_][a-zA-Z_0-9]* {yylval.functionNumber=lookupFunctionName(yytext+1);return FUNCTION;}
\/\/.* {} \/\/.* {}
\/\* {comment();}
[ \t]+ {} [ \t]+ {}
\n {} \n {}

View file

@ -91,7 +91,16 @@ int mylexer::closeInputFile()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void mylexer::error() 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 */ end */

View file

@ -76,7 +76,7 @@ void YYPARSENAME::yyaction(int action)
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 2);
#endif #endif
{ {
#line 107 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 109 "C:\\spongebob\\Utils\\scripter\\parser.y"
s_baseTreeNode=yyattribute(1 - 1).treenode; s_baseTreeNode=yyattribute(1 - 1).treenode;
#line 82 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 82 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -89,7 +89,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 3); yyinitdebug((void YYFAR**)yya, 3);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(1 - 2).treenode,yyattribute(2 - 2).treenode);
#line 95 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 95 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -97,7 +97,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
break; break;
case 2: 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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EMPTY_STMT);
#line 103 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 103 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -109,7 +109,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 2);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EMPTY_STMT);
#line 115 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 115 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -122,7 +122,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 3); yyinitdebug((void YYFAR**)yya, 3);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STOP_STMT);
#line 128 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 128 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -135,7 +135,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 3); yyinitdebug((void YYFAR**)yya, 3);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PAUSE_STMT);
#line 141 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 141 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -148,7 +148,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 6); yyinitdebug((void YYFAR**)yya, 6);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PRINT_STMT,yyattribute(3 - 5).treenode);
#line 154 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 154 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -161,7 +161,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 3); yyinitdebug((void YYFAR**)yya, 3);
#endif #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; (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 2).treenode;
#line 167 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 167 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -174,7 +174,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 6); yyinitdebug((void YYFAR**)yya, 6);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(IF_STMT,yyattribute(3 - 5).treenode,yyattribute(5 - 5).treenode);
#line 180 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 180 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -187,7 +187,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 8); yyinitdebug((void YYFAR**)yya, 8);
#endif #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); (*(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" #line 193 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -200,7 +200,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 6); yyinitdebug((void YYFAR**)yya, 6);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(WHILE_STMT,yyattribute(3 - 5).treenode,yyattribute(5 - 5).treenode);
#line 206 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 206 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -213,7 +213,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 8); yyinitdebug((void YYFAR**)yya, 8);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(DOWHILE_STMT,yyattribute(2 - 7).treenode,yyattribute(5 - 7).treenode);
#line 219 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 219 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -226,7 +226,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 4);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(2 - 3).treenode);
#line 232 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 232 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -239,7 +239,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 3); yyinitdebug((void YYFAR**)yya, 3);
#endif #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)); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(STMT_LIST,yyattribute(1 - 2).treenode,new CTreeNode(POP_STMT));
#line 245 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 245 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -252,7 +252,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 4);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(ASSIGN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 258 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 258 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -261,12 +261,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
case 15: case 15:
{ {
#ifdef YYDEBUG #ifdef YYDEBUG
YYSTYPE YYFAR* yya[4]; YYSTYPE YYFAR* yya[2];
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 2);
#endif #endif
{ {
#line 136 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 138 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(2 - 3).treenode; (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode;
#line 271 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 271 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -278,7 +278,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 2);
#endif #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; (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode;
#line 284 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 284 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -291,7 +291,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 2);
#endif #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; (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode;
#line 297 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 297 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -304,7 +304,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 2);
#endif #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; (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode;
#line 310 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 310 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -313,12 +313,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
case 19: case 19:
{ {
#ifdef YYDEBUG #ifdef YYDEBUG
YYSTYPE YYFAR* yya[2]; YYSTYPE YYFAR* yya[4];
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 4);
#endif #endif
{ {
#line 140 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 145 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 323 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 323 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -330,8 +330,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 4);
#endif #endif
{ {
#line 144 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 149 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(EQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(NOTEQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 336 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 336 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -343,8 +343,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 4);
#endif #endif
{ {
#line 148 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 153 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(NOTEQUAL_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(LESSTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 349 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 349 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -356,8 +356,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 4);
#endif #endif
{ {
#line 152 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 157 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(LESSTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(GREATERTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 362 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 362 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -365,12 +365,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
case 23: case 23:
{ {
#ifdef YYDEBUG #ifdef YYDEBUG
YYSTYPE YYFAR* yya[4]; YYSTYPE YYFAR* yya[2];
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 2);
#endif #endif
{ {
#line 156 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 162 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(GREATERTHAN_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx);
#line 375 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 375 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -382,8 +382,8 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 2);
#endif #endif
{ {
#line 161 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 166 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VALUE_EXPR,yyattribute(1 - 1).value);
#line 388 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 388 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -391,12 +391,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
case 25: case 25:
{ {
#ifdef YYDEBUG #ifdef YYDEBUG
YYSTYPE YYFAR* yya[2]; YYSTYPE YYFAR* yya[4];
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 4);
#endif #endif
{ {
#line 165 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 167 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VALUE_EXPR,yyattribute(1 - 1).value); (*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(2 - 3).treenode;
#line 401 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 401 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -408,7 +408,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 2);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(VARIABLE_EXPR,yyattribute(1 - 1).variableIdx);
#line 414 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 414 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -421,7 +421,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 4);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(PLUS_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 427 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 427 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -434,7 +434,7 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
yyinitdebug((void YYFAR**)yya, 4); yyinitdebug((void YYFAR**)yya, 4);
#endif #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); (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(SUBTRACT_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 440 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 440 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
@ -443,12 +443,12 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
case 29: case 29:
{ {
#ifdef YYDEBUG #ifdef YYDEBUG
YYSTYPE YYFAR* yya[2]; YYSTYPE YYFAR* yya[4];
yyinitdebug((void YYFAR**)yya, 2); yyinitdebug((void YYFAR**)yya, 4);
#endif #endif
{ {
#line 171 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 173 "C:\\spongebob\\Utils\\scripter\\parser.y"
(*(YYSTYPE YYFAR*)yyvalptr).treenode=yyattribute(1 - 1).treenode; (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(MULTIPLY_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 453 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 453 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
@ -456,26 +456,52 @@ s_baseTreeNode=yyattribute(1 - 1).treenode;
case 30: case 30:
{ {
#ifdef YYDEBUG #ifdef YYDEBUG
YYSTYPE YYFAR* yya[3]; YYSTYPE YYFAR* yya[4];
yyinitdebug((void YYFAR**)yya, 3); yyinitdebug((void YYFAR**)yya, 4);
#endif #endif
{ {
#line 176 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 174 "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);} (*(YYSTYPE YYFAR*)yyvalptr).treenode=new CTreeNode(DIVIDE_EXPR,yyattribute(1 - 3).treenode,yyattribute(3 - 3).treenode);
#line 466 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 466 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
} }
} }
break; break;
case 31: 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 #ifdef YYDEBUG
YYSTYPE YYFAR* yya[5]; YYSTYPE YYFAR* yya[5];
yyinitdebug((void YYFAR**)yya, 5); yyinitdebug((void YYFAR**)yya, 5);
#endif #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)); (*(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; break;
@ -484,14 +510,14 @@ if(yyattribute(1 - 2).functionNumber!=-1){m_functionNumber=yyattribute(1 - 2).fu
break; break;
} }
} }
#line 182 "C:\\spongebob\\Utils\\scripter\\parser.y" #line 186 "C:\\spongebob\\Utils\\scripter\\parser.y"
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// programs section // programs section
#line 495 "C:\\spongebob\\Utils\\scripter\\parser.cpp" #line 521 "C:\\spongebob\\Utils\\scripter\\parser.cpp"
void YYPARSENAME::yytables() void YYPARSENAME::yytables()
{ {
yyattribute_size = sizeof(YYSTYPE); yyattribute_size = sizeof(YYSTYPE);
@ -515,14 +541,16 @@ void YYPARSENAME::yytables()
{ "GREATERTHAN", 268 }, { "GREATERTHAN", 268 },
{ "PLUS", 269 }, { "PLUS", 269 },
{ "SUBTRACT", 270 }, { "SUBTRACT", 270 },
{ "END_STMT", 271 }, { "MULTIPLY", 271 },
{ "OPEN_PAR", 272 }, { "DIVIDE", 272 },
{ "CLOSE_PAR", 273 }, { "END_STMT", 273 },
{ "BEGIN_CS", 274 }, { "OPEN_PAR", 274 },
{ "END_CS", 275 }, { "CLOSE_PAR", 275 },
{ "VARIABLE", 277 }, { "BEGIN_CS", 276 },
{ "VALUE", 278 }, { "END_CS", 277 },
{ "FUNCTION", 279 }, { "VARIABLE", 279 },
{ "VALUE", 280 },
{ "FUNCTION", 281 },
{ NULL, 0 } { NULL, 0 }
}; };
yysymbol = symbol; yysymbol = symbol;
@ -544,7 +572,6 @@ void YYPARSENAME::yytables()
"statement: BEGIN_CS statement_list END_CS", "statement: BEGIN_CS statement_list END_CS",
"statement: function END_STMT", "statement: function END_STMT",
"assign_expression: variable ASSIGN value", "assign_expression: variable ASSIGN value",
"expression: OPEN_PAR expression CLOSE_PAR",
"expression: equal_expression", "expression: equal_expression",
"expression: notequal_expression", "expression: notequal_expression",
"expression: lessthan_expression", "expression: lessthan_expression",
@ -555,9 +582,12 @@ void YYPARSENAME::yytables()
"greaterthan_expression: value GREATERTHAN value", "greaterthan_expression: value GREATERTHAN value",
"variable: VARIABLE", "variable: VARIABLE",
"value: VALUE", "value: VALUE",
"value: OPEN_PAR value CLOSE_PAR",
"value: VARIABLE", "value: VARIABLE",
"value: value PLUS value", "value: value PLUS value",
"value: value SUBTRACT value", "value: value SUBTRACT value",
"value: value MULTIPLY value",
"value: value DIVIDE value",
"value: function", "value: function",
"$$1:", "$$1:",
"function: FUNCTION OPEN_PAR $$1 CLOSE_PAR" "function: FUNCTION OPEN_PAR $$1 CLOSE_PAR"
@ -582,89 +612,114 @@ void YYPARSENAME::yytables()
{ 3, 3, 12 }, { 3, 3, 12 },
{ 3, 2, 13 }, { 3, 2, 13 },
{ 4, 3, 14 }, { 4, 3, 14 },
{ 5, 3, 15 }, { 5, 1, 15 },
{ 5, 1, 16 }, { 5, 1, 16 },
{ 5, 1, 17 }, { 5, 1, 17 },
{ 5, 1, 18 }, { 5, 1, 18 },
{ 5, 1, 19 }, { 6, 3, 19 },
{ 6, 3, 20 }, { 7, 3, 20 },
{ 7, 3, 21 }, { 8, 3, 21 },
{ 8, 3, 22 }, { 9, 3, 22 },
{ 9, 3, 23 }, { 10, 1, 23 },
{ 10, 1, 24 }, { 11, 1, 24 },
{ 11, 1, 25 }, { 11, 3, 25 },
{ 11, 1, 26 }, { 11, 1, 26 },
{ 11, 3, 27 }, { 11, 3, 27 },
{ 11, 3, 28 }, { 11, 3, 28 },
{ 11, 1, 29 }, { 11, 3, 29 },
{ 13, 0, 30 }, { 11, 3, 30 },
{ 12, 4, 31 } { 11, 1, 31 },
{ 13, 0, 32 },
{ 12, 4, 33 }
}; };
yyreduction = reduction; yyreduction = reduction;
static const yytokenaction_t YYNEARFAR YYBASED_CODE tokenaction[] = { static const yytokenaction_t YYNEARFAR YYBASED_CODE tokenaction[] = {
{ 67, YYAT_SHIFT, 3 }, { 71, YYAT_SHIFT, 3 },
{ 67, YYAT_SHIFT, 4 }, { 71, YYAT_SHIFT, 4 },
{ 68, YYAT_SHIFT, 70 }, { 72, YYAT_SHIFT, 74 },
{ 67, YYAT_SHIFT, 5 }, { 71, YYAT_SHIFT, 5 },
{ 67, YYAT_SHIFT, 6 }, { 71, YYAT_SHIFT, 6 },
{ 67, YYAT_SHIFT, 7 }, { 71, YYAT_SHIFT, 7 },
{ 67, YYAT_SHIFT, 8 }, { 71, YYAT_SHIFT, 8 },
{ 2, YYAT_SHIFT, 3 }, { 2, YYAT_SHIFT, 3 },
{ 2, YYAT_SHIFT, 4 }, { 2, YYAT_SHIFT, 4 },
{ 65, YYAT_SHIFT, 68 }, { 69, YYAT_SHIFT, 72 },
{ 2, YYAT_SHIFT, 5 }, { 2, YYAT_SHIFT, 5 },
{ 2, YYAT_SHIFT, 6 }, { 2, YYAT_SHIFT, 6 },
{ 2, YYAT_SHIFT, 7 }, { 2, YYAT_SHIFT, 7 },
{ 2, YYAT_SHIFT, 8 }, { 2, YYAT_SHIFT, 8 },
{ 67, YYAT_SHIFT, 9 }, { 59, YYAT_SHIFT, 71 },
{ 40, YYAT_SHIFT, 50 }, { 56, YYAT_SHIFT, 70 },
{ 40, YYAT_SHIFT, 51 }, { 71, YYAT_SHIFT, 9 },
{ 67, YYAT_SHIFT, 10 }, { 42, YYAT_SHIFT, 57 },
{ 57, YYAT_SHIFT, 67 }, { 40, YYAT_SHIFT, 56 },
{ 40, YYAT_SHIFT, 54 }, { 71, YYAT_SHIFT, 10 },
{ 67, YYAT_SHIFT, 11 }, { 39, YYAT_SHIFT, 55 },
{ 38, YYAT_SHIFT, 54 },
{ 71, YYAT_SHIFT, 11 },
{ 2, YYAT_SHIFT, 9 }, { 2, YYAT_SHIFT, 9 },
{ 67, YYAT_SHIFT, 12 }, { 71, YYAT_SHIFT, 12 },
{ 54, YYAT_SHIFT, 66 }, { 31, YYAT_SHIFT, 45 },
{ 2, YYAT_SHIFT, 10 }, { 2, YYAT_SHIFT, 10 },
{ 63, YYAT_SHIFT, 50 }, { 23, YYAT_SHIFT, 41 },
{ 63, YYAT_SHIFT, 51 }, { 20, YYAT_SHIFT, 39 },
{ 2, YYAT_SHIFT, 11 }, { 2, YYAT_SHIFT, 11 },
{ 51, YYAT_ERROR, 0 }, { 16, YYAT_SHIFT, 27 },
{ 2, YYAT_SHIFT, 12 }, { 2, YYAT_SHIFT, 12 },
{ 36, YYAT_SHIFT, 46 }, { 36, YYAT_SHIFT, 46 },
{ 36, YYAT_SHIFT, 47 }, { 36, YYAT_SHIFT, 47 },
{ 36, YYAT_SHIFT, 48 }, { 36, YYAT_SHIFT, 48 },
{ 36, YYAT_SHIFT, 49 }, { 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 }, { 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 }, { 14, YYAT_SHIFT, 25 },
{ 12, YYAT_SHIFT, 24 }, { 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 }, { 8, YYAT_SHIFT, 22 },
{ 7, YYAT_SHIFT, 21 }, { 7, YYAT_SHIFT, 21 },
{ 5, YYAT_SHIFT, 19 }, { 5, YYAT_SHIFT, 19 },
@ -673,105 +728,111 @@ void YYPARSENAME::yytables()
{ 1, YYAT_ACCEPT, 0 } { 1, YYAT_ACCEPT, 0 }
}; };
yytokenaction = tokenaction; yytokenaction = tokenaction;
yytokenaction_size = 68; yytokenaction_size = 91;
static const yystateaction_t YYNEARFAR YYBASED_CODE stateaction[] = { static const yystateaction_t YYNEARFAR YYBASED_CODE stateaction[] = {
{ 0, 0, YYAT_REDUCE, 3 }, { 0, 0, YYAT_REDUCE, 3 },
{ 67, 1, YYAT_ERROR, 0 }, { 90, 1, YYAT_ERROR, 0 },
{ -250, 1, YYAT_REDUCE, 1 }, { -250, 1, YYAT_REDUCE, 1 },
{ -205, 1, YYAT_DEFAULT, 68 }, { -184, 1, YYAT_DEFAULT, 72 },
{ -207, 1, YYAT_DEFAULT, 39 }, { -186, 1, YYAT_DEFAULT, 39 },
{ -208, 1, YYAT_DEFAULT, 39 }, { -187, 1, YYAT_DEFAULT, 39 },
{ 0, 0, YYAT_DEFAULT, 67 }, { 0, 0, YYAT_DEFAULT, 71 },
{ -208, 1, YYAT_DEFAULT, 68 }, { -187, 1, YYAT_DEFAULT, 72 },
{ -210, 1, YYAT_DEFAULT, 39 }, { -189, 1, YYAT_DEFAULT, 39 },
{ 0, 0, YYAT_REDUCE, 4 }, { 0, 0, YYAT_REDUCE, 4 },
{ 0, 0, YYAT_REDUCE, 3 }, { 0, 0, YYAT_REDUCE, 3 },
{ 0, 0, YYAT_REDUCE, 25 }, { 0, 0, YYAT_REDUCE, 24 },
{ -211, 1, YYAT_DEFAULT, 39 }, { -229, 1, YYAT_DEFAULT, 39 },
{ 0, 0, YYAT_REDUCE, 2 }, { 0, 0, YYAT_REDUCE, 2 },
{ -211, 1, YYAT_DEFAULT, 68 }, { -229, 1, YYAT_DEFAULT, 72 },
{ -205, 1, YYAT_ERROR, 0 }, { -228, 1, YYAT_ERROR, 0 },
{ -213, 1, YYAT_DEFAULT, 68 }, { -243, 1, YYAT_DEFAULT, 72 },
{ 0, 0, YYAT_REDUCE, 5 }, { 0, 0, YYAT_REDUCE, 5 },
{ 0, 0, YYAT_DEFAULT, 53 }, { 0, 0, YYAT_DEFAULT, 55 },
{ 0, 0, YYAT_DEFAULT, 53 }, { 0, 0, YYAT_DEFAULT, 55 },
{ -203, 1, YYAT_ERROR, 0 }, { -232, 1, YYAT_ERROR, 0 },
{ 0, 0, YYAT_REDUCE, 6 }, { 0, 0, YYAT_REDUCE, 6 },
{ 0, 0, YYAT_DEFAULT, 51 }, { 0, 0, YYAT_DEFAULT, 55 },
{ -219, 1, YYAT_DEFAULT, 67 }, { -250, 1, YYAT_DEFAULT, 71 },
{ 0, 0, YYAT_REDUCE, 31 }, { 0, 0, YYAT_REDUCE, 33 },
{ 0, 0, YYAT_REDUCE, 8 }, { 0, 0, YYAT_REDUCE, 8 },
{ 0, 0, YYAT_DEFAULT, 51 }, { 0, 0, YYAT_DEFAULT, 55 },
{ 0, 0, YYAT_REDUCE, 14 }, { 0, 0, YYAT_REDUCE, 14 },
{ 0, 0, YYAT_DEFAULT, 53 }, { 0, 0, YYAT_DEFAULT, 55 },
{ 0, 0, YYAT_REDUCE, 27 }, { 0, 0, YYAT_REDUCE, 27 },
{ 0, 0, YYAT_REDUCE, 26 }, { 0, 0, YYAT_REDUCE, 25 },
{ -218, 1, YYAT_DEFAULT, 65 }, { -250, 1, YYAT_DEFAULT, 69 },
{ 0, 0, YYAT_REDUCE, 16 },
{ 0, 0, YYAT_REDUCE, 17 }, { 0, 0, YYAT_REDUCE, 17 },
{ 0, 0, YYAT_REDUCE, 18 }, { 0, 0, YYAT_REDUCE, 18 },
{ 0, 0, YYAT_REDUCE, 19 }, { 0, 0, YYAT_REDUCE, 19 },
{ 0, 0, YYAT_REDUCE, 20 }, { -233, 1, YYAT_DEFAULT, 44 },
{ -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 },
{ 0, 0, YYAT_REDUCE, 32 }, { 0, 0, YYAT_REDUCE, 32 },
{ 0, 0, YYAT_REDUCE, 16 }, { -254, 1, YYAT_DEFAULT, 69 },
{ -241, 1, YYAT_REDUCE, 9 }, { -254, 1, YYAT_ERROR, 0 },
{ -221, 1, YYAT_REDUCE, 21 }, { -257, 1, YYAT_DEFAULT, 44 },
{ -223, 1, YYAT_REDUCE, 22 }, { 0, 0, YYAT_REDUCE, 13 },
{ -225, 1, YYAT_REDUCE, 23 }, { -258, 1, YYAT_DEFAULT, 69 },
{ -227, 1, YYAT_REDUCE, 24 }, { -188, 1, YYAT_REDUCE, 15 },
{ -234, 1, YYAT_REDUCE, 28 }, { -232, 1, YYAT_DEFAULT, 69 },
{ -244, 1, YYAT_REDUCE, 29 }, { 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 }, { 0, 0, YYAT_REDUCE, 11 },
{ -264, 1, YYAT_ERROR, 0 }, { -266, 1, YYAT_ERROR, 0 },
{ 0, 0, YYAT_REDUCE, 7 }, { 0, 0, YYAT_REDUCE, 7 },
{ -257, 1, YYAT_DEFAULT, 68 }, { -257, 1, YYAT_DEFAULT, 72 },
{ -269, 1, YYAT_ERROR, 0 }, { -271, 1, YYAT_ERROR, 0 },
{ 0, 0, YYAT_REDUCE, 10 }, { 0, 0, YYAT_REDUCE, 10 },
{ 0, 0, YYAT_REDUCE, 12 } { 0, 0, YYAT_REDUCE, 12 }
}; };
yystateaction = stateaction; yystateaction = stateaction;
static const yynontermgoto_t YYNEARFAR YYBASED_CODE nontermgoto[] = { static const yynontermgoto_t YYNEARFAR YYBASED_CODE nontermgoto[] = {
{ 53, 65 }, { 55, 69 },
{ 53, 32 }, { 55, 32 },
{ 53, 33 }, { 55, 33 },
{ 53, 34 }, { 55, 34 },
{ 53, 35 }, { 55, 35 },
{ 52, 64 }, { 54, 68 },
{ 53, 36 }, { 55, 36 },
{ 67, 69 }, { 71, 73 },
{ 67, 14 }, { 71, 14 },
{ 51, 63 }, { 53, 67 },
{ 51, 37 }, { 53, 37 },
{ 0, 1 }, { 0, 1 },
{ 0, 2 }, { 0, 2 },
{ 50, 62 }, { 52, 66 },
{ 67, 15 }, { 71, 15 },
{ 49, 61 }, { 51, 65 },
{ 67, 16 }, { 71, 16 },
{ 48, 60 }, { 50, 64 },
{ 47, 59 }, { 49, 63 },
{ 46, 58 }, { 48, 62 },
{ 45, 57 }, { 47, 61 },
{ 46, 60 },
{ 45, 59 },
{ 28, 44 }, { 28, 44 },
{ 26, 43 }, { 26, 43 },
{ 24, 42 }, { 24, 42 },
@ -783,7 +844,7 @@ void YYPARSENAME::yytables()
{ 6, 20 } { 6, 20 }
}; };
yynontermgoto = nontermgoto; yynontermgoto = nontermgoto;
yynontermgoto_size = 30; yynontermgoto_size = 32;
static const yystategoto_t YYNEARFAR YYBASED_CODE stategoto[] = { static const yystategoto_t YYNEARFAR YYBASED_CODE stategoto[] = {
{ 10, -1 }, { 10, -1 },
@ -792,11 +853,11 @@ void YYPARSENAME::yytables()
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 26, 67 }, { 28, 71 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 26, -1 }, { 28, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
@ -804,17 +865,17 @@ void YYPARSENAME::yytables()
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 22, 53 }, { 24, 55 },
{ 21, 53 }, { 23, 55 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 14, 51 },
{ 21, 67 },
{ 10, -1 },
{ 0, -1 },
{ 11, 51 },
{ 0, -1 },
{ 16, 53 }, { 16, 53 },
{ 23, 71 },
{ 12, -1 },
{ 0, -1 },
{ 13, 53 },
{ 0, -1 },
{ 12, 53 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
@ -831,15 +892,19 @@ void YYPARSENAME::yytables()
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 17, 67 }, { 19, 71 },
{ 8, 51 }, { 10, 53 },
{ 7, 51 }, { 9, 53 },
{ 6, 51 }, { 8, 53 },
{ 4, 51 }, { 7, 53 },
{ 2, 51 }, { 6, 53 },
{ 4, 53 },
{ 2, 53 },
{ -2, -1 }, { -2, -1 },
{ 2, 67 }, { 2, 71 },
{ -5, 51 }, { -5, 53 },
{ 0, -1 },
{ 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },
{ 0, -1 }, { 0, -1 },

View file

@ -74,13 +74,15 @@ union tagYYSTYPE {
#define GREATERTHAN 268 #define GREATERTHAN 268
#define PLUS 269 #define PLUS 269
#define SUBTRACT 270 #define SUBTRACT 270
#define END_STMT 271 #define MULTIPLY 271
#define OPEN_PAR 272 #define DIVIDE 272
#define CLOSE_PAR 273 #define END_STMT 273
#define BEGIN_CS 274 #define OPEN_PAR 274
#define END_CS 275 #define CLOSE_PAR 275
#define COMMA 276 #define BEGIN_CS 276
#define VARIABLE 277 #define END_CS 277
#define VALUE 278 #define COMMA 278
#define FUNCTION 279 #define VARIABLE 279
#define VALUE 280
#define FUNCTION 281
#endif #endif

View file

@ -19,31 +19,33 @@
15 assign_expression : variable ASSIGN value 15 assign_expression : variable ASSIGN value
16 expression : OPEN_PAR expression CLOSE_PAR 16 expression : equal_expression
17 | equal_expression 17 | notequal_expression
18 | notequal_expression 18 | lessthan_expression
19 | lessthan_expression 19 | greaterthan_expression
20 | 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 27 | VARIABLE
28 | value PLUS value 28 | value PLUS value
29 | value SUBTRACT 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 state 0
@ -151,9 +153,9 @@ state 10
state 11 state 11
variable : VARIABLE . (25) variable : VARIABLE . (24)
. reduce 25 . reduce 24
state 12 state 12
@ -242,6 +244,7 @@ state 21
state 22 state 22
statement : PRINT OPEN_PAR . value CLOSE_PAR END_STMT statement : PRINT OPEN_PAR . value CLOSE_PAR END_STMT
OPEN_PAR shift 28
VARIABLE shift 29 VARIABLE shift 29
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
@ -274,9 +277,9 @@ state 23
state 24 state 24
function : FUNCTION OPEN_PAR . $$1 CLOSE_PAR function : FUNCTION OPEN_PAR . $$1 CLOSE_PAR
$$1 : . (31) $$1 : . (33)
. reduce 31 . reduce 33
$$1 goto 42 $$1 goto 42
@ -290,6 +293,7 @@ state 25
state 26 state 26
assign_expression : variable ASSIGN . value assign_expression : variable ASSIGN . value
OPEN_PAR shift 28
VARIABLE shift 29 VARIABLE shift 29
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
@ -305,19 +309,14 @@ state 27
state 28 state 28
expression : OPEN_PAR . expression CLOSE_PAR value : OPEN_PAR . value CLOSE_PAR
OPEN_PAR shift 28 OPEN_PAR shift 28
VARIABLE shift 29 VARIABLE shift 29
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
expression goto 44 value goto 44
equal_expression goto 32
notequal_expression goto 33
lessthan_expression goto 34
greaterthan_expression goto 35
value goto 36
function goto 37 function goto 37
@ -328,9 +327,9 @@ state 29
state 30 state 30
value : VALUE . (26) value : VALUE . (25)
. reduce 26 . reduce 25
state 31 state 31
@ -341,29 +340,29 @@ state 31
state 32 state 32
expression : equal_expression . (17) expression : equal_expression . (16)
. reduce 16
state 33
expression : notequal_expression . (17)
. reduce 17 . reduce 17
state 33 state 34
expression : notequal_expression . (18) expression : lessthan_expression . (18)
. reduce 18 . reduce 18
state 34 state 35
expression : lessthan_expression . (19) expression : greaterthan_expression . (19)
. reduce 19 . reduce 19
state 35
expression : greaterthan_expression . (20)
. reduce 20
state 36 state 36
equal_expression : value . EQUAL value equal_expression : value . EQUAL value
notequal_expression : value . NOTEQUAL value notequal_expression : value . NOTEQUAL value
@ -371,6 +370,8 @@ state 36
greaterthan_expression : value . GREATERTHAN value greaterthan_expression : value . GREATERTHAN value
value : value . PLUS value value : value . PLUS value
value : value . SUBTRACT value value : value . SUBTRACT value
value : value . MULTIPLY value
value : value . DIVIDE value
EQUAL shift 46 EQUAL shift 46
NOTEQUAL shift 47 NOTEQUAL shift 47
@ -378,34 +379,40 @@ state 36
GREATERTHAN shift 49 GREATERTHAN shift 49
PLUS shift 50 PLUS shift 50
SUBTRACT shift 51 SUBTRACT shift 51
MULTIPLY shift 52
DIVIDE shift 53
state 37 state 37
value : function . (30) value : function . (32)
. reduce 30 . reduce 32
state 38 state 38
statement : WHILE OPEN_PAR expression . CLOSE_PAR statement statement : WHILE OPEN_PAR expression . CLOSE_PAR statement
CLOSE_PAR shift 52 CLOSE_PAR shift 54
state 39 state 39
statement : DO statement WHILE . OPEN_PAR expression CLOSE_PAR END_STMT statement : DO statement WHILE . OPEN_PAR expression CLOSE_PAR END_STMT
OPEN_PAR shift 53 OPEN_PAR shift 55
state 40 state 40
statement : PRINT OPEN_PAR value . CLOSE_PAR END_STMT statement : PRINT OPEN_PAR value . CLOSE_PAR END_STMT
value : value . PLUS value value : value . PLUS value
value : value . SUBTRACT value value : value . SUBTRACT value
value : value . MULTIPLY value
value : value . DIVIDE value
PLUS shift 50 PLUS shift 50
SUBTRACT shift 51 SUBTRACT shift 51
CLOSE_PAR shift 54 MULTIPLY shift 52
DIVIDE shift 53
CLOSE_PAR shift 56
state 41 state 41
@ -417,23 +424,35 @@ state 41
state 42 state 42
function : FUNCTION OPEN_PAR $$1 . CLOSE_PAR function : FUNCTION OPEN_PAR $$1 . CLOSE_PAR
CLOSE_PAR shift 55 CLOSE_PAR shift 57
state 43 state 43
assign_expression : variable ASSIGN value . (15) assign_expression : variable ASSIGN value . (15)
value : value . PLUS value value : value . PLUS value
value : value . SUBTRACT value value : value . SUBTRACT value
value : value . MULTIPLY value
value : value . DIVIDE value
PLUS shift 50 PLUS shift 50
SUBTRACT shift 51 SUBTRACT shift 51
MULTIPLY shift 52
DIVIDE shift 53
. reduce 15 . reduce 15
state 44 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 state 45
@ -451,7 +470,7 @@ state 45
VARIABLE shift 11 VARIABLE shift 11
FUNCTION shift 12 FUNCTION shift 12
statement goto 57 statement goto 59
assign_expression goto 14 assign_expression goto 14
variable goto 15 variable goto 15
function goto 16 function goto 16
@ -460,28 +479,7 @@ state 45
state 46 state 46
equal_expression : value EQUAL . value equal_expression : value EQUAL . value
VARIABLE shift 29 OPEN_PAR shift 28
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
VARIABLE shift 29 VARIABLE shift 29
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
@ -490,9 +488,10 @@ state 48
function goto 37 function goto 37
state 49 state 47
greaterthan_expression : value GREATERTHAN . value notequal_expression : value NOTEQUAL . value
OPEN_PAR shift 28
VARIABLE shift 29 VARIABLE shift 29
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
@ -501,9 +500,10 @@ state 49
function goto 37 function goto 37
state 50 state 48
value : value PLUS . value lessthan_expression : value LESSTHAN . value
OPEN_PAR shift 28
VARIABLE shift 29 VARIABLE shift 29
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
@ -512,9 +512,10 @@ state 50
function goto 37 function goto 37
state 51 state 49
value : value SUBTRACT . value greaterthan_expression : value GREATERTHAN . value
OPEN_PAR shift 28
VARIABLE shift 29 VARIABLE shift 29
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
@ -523,7 +524,55 @@ state 51
function goto 37 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 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 statement : WHILE OPEN_PAR expression CLOSE_PAR . statement
STOP shift 3 STOP shift 3
@ -537,13 +586,13 @@ state 52
VARIABLE shift 11 VARIABLE shift 11
FUNCTION shift 12 FUNCTION shift 12
statement goto 64 statement goto 68
assign_expression goto 14 assign_expression goto 14
variable goto 15 variable goto 15
function goto 16 function goto 16
state 53 state 55
statement : DO statement WHILE OPEN_PAR . expression CLOSE_PAR END_STMT statement : DO statement WHILE OPEN_PAR . expression CLOSE_PAR END_STMT
OPEN_PAR shift 28 OPEN_PAR shift 28
@ -551,7 +600,7 @@ state 53
VALUE shift 30 VALUE shift 30
FUNCTION shift 12 FUNCTION shift 12
expression goto 65 expression goto 69
equal_expression goto 32 equal_expression goto 32
notequal_expression goto 33 notequal_expression goto 33
lessthan_expression goto 34 lessthan_expression goto 34
@ -560,116 +609,180 @@ state 53
function goto 37 function goto 37
state 54 state 56
statement : PRINT OPEN_PAR value CLOSE_PAR . END_STMT 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 state 57
statement : IF OPEN_PAR expression CLOSE_PAR statement . (9) function : FUNCTION OPEN_PAR $$1 CLOSE_PAR . (34)
statement : IF OPEN_PAR expression CLOSE_PAR statement . ELSE statement
ELSE shift 67 . reduce 34
. reduce 9
state 58 state 58
equal_expression : value EQUAL value . (21) value : OPEN_PAR value CLOSE_PAR . (26)
value : value . PLUS value
value : value . SUBTRACT value
PLUS shift 50 . reduce 26
SUBTRACT shift 51
. reduce 21
59: shift-reduce conflict (shift 71, reduce 9) on ELSE
state 59 state 59
notequal_expression : value NOTEQUAL value . (22) statement : IF OPEN_PAR expression CLOSE_PAR statement . (9)
value : value . PLUS value statement : IF OPEN_PAR expression CLOSE_PAR statement . ELSE statement
value : value . SUBTRACT value
PLUS shift 50 ELSE shift 71
SUBTRACT shift 51 . reduce 9
. reduce 22
state 60 state 60
lessthan_expression : value LESSTHAN value . (23) equal_expression : value EQUAL value . (20)
value : value . PLUS value value : value . PLUS value
value : value . SUBTRACT value value : value . SUBTRACT value
value : value . MULTIPLY value
value : value . DIVIDE value
PLUS shift 50 PLUS shift 50
SUBTRACT shift 51 SUBTRACT shift 51
. reduce 23 MULTIPLY shift 52
DIVIDE shift 53
. reduce 20
state 61 state 61
greaterthan_expression : value GREATERTHAN value . (24) notequal_expression : value NOTEQUAL value . (21)
value : value . PLUS value value : value . PLUS value
value : value . SUBTRACT value value : value . SUBTRACT value
value : value . MULTIPLY value
value : value . DIVIDE value
PLUS shift 50 PLUS shift 50
SUBTRACT shift 51 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 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 . (28)
value : value . PLUS value value : value . PLUS value
value : value . SUBTRACT value value : value . SUBTRACT value
value : value . MULTIPLY value
value : value . DIVIDE value
PLUS shift 50 PLUS shift 50
SUBTRACT shift 51 SUBTRACT shift 51
MULTIPLY shift 52
DIVIDE shift 53
. reduce 28 . reduce 28
63: shift-reduce conflict (shift 50, reduce 29) on PLUS 65: shift-reduce conflict (shift 50, reduce 29) on PLUS
63: shift-reduce conflict (shift 51, reduce 29) on SUBTRACT 65: shift-reduce conflict (shift 51, reduce 29) on SUBTRACT
state 63 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 . PLUS value
value : value SUBTRACT value . (29) value : value SUBTRACT value . (29)
value : value . SUBTRACT value value : value . SUBTRACT value
value : value . MULTIPLY value
value : value . DIVIDE value
PLUS shift 50 PLUS shift 50
SUBTRACT shift 51 SUBTRACT shift 51
MULTIPLY shift 52
DIVIDE shift 53
. reduce 29 . 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) statement : WHILE OPEN_PAR expression CLOSE_PAR statement . (11)
. reduce 11 . reduce 11
state 65 state 69
statement : DO statement WHILE OPEN_PAR expression . CLOSE_PAR END_STMT 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) statement : PRINT OPEN_PAR value CLOSE_PAR END_STMT . (7)
. reduce 7 . reduce 7
state 67 state 71
statement : IF OPEN_PAR expression CLOSE_PAR statement ELSE . statement statement : IF OPEN_PAR expression CLOSE_PAR statement ELSE . statement
STOP shift 3 STOP shift 3
@ -683,34 +796,36 @@ state 67
VARIABLE shift 11 VARIABLE shift 11
FUNCTION shift 12 FUNCTION shift 12
statement goto 69 statement goto 73
assign_expression goto 14 assign_expression goto 14
variable goto 15 variable goto 15
function goto 16 function goto 16
state 68 state 72
statement : DO statement WHILE OPEN_PAR expression CLOSE_PAR . END_STMT 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) statement : IF OPEN_PAR expression CLOSE_PAR statement ELSE statement . (10)
. reduce 10 . reduce 10
state 70 state 74
statement : DO statement WHILE OPEN_PAR expression CLOSE_PAR END_STMT . (12) statement : DO statement WHILE OPEN_PAR expression CLOSE_PAR END_STMT . (12)
. reduce 12 . reduce 12
State 57 contains 1 shift-reduce conflict State 59 contains 1 shift-reduce conflict
State 62 contains 2 shift-reduce conflicts State 64 contains 4 shift-reduce conflicts
State 63 contains 2 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 26 tokens, 14 nonterminals
33 grammar rules, 71 states 35 grammar rules, 75 states

View file

@ -77,6 +77,8 @@ private:
%token GREATERTHAN %token GREATERTHAN
%token PLUS %token PLUS
%token SUBTRACT %token SUBTRACT
%token MULTIPLY
%token DIVIDE
%token END_STMT %token END_STMT
%token OPEN_PAR %token OPEN_PAR
%token CLOSE_PAR %token CLOSE_PAR
@ -133,8 +135,7 @@ assign_expression
expression expression
:OPEN_PAR expression CLOSE_PAR {$$=$2;} :equal_expression {$$=$1;}
|equal_expression {$$=$1;}
|notequal_expression {$$=$1;} |notequal_expression {$$=$1;}
|lessthan_expression {$$=$1;} |lessthan_expression {$$=$1;}
|greaterthan_expression {$$=$1;} |greaterthan_expression {$$=$1;}
@ -163,11 +164,14 @@ variable
value value
:VALUE {$$=new CTreeNode(VALUE_EXPR,$1);} :VALUE {$$=new CTreeNode(VALUE_EXPR,$1);}
|OPEN_PAR value CLOSE_PAR {$$=$2;}
|VARIABLE {$$=new CTreeNode(VARIABLE_EXPR,$1);} // variable value |VARIABLE {$$=new CTreeNode(VARIABLE_EXPR,$1);} // variable value
// |PLUS value {$$=$2;} // |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 PLUS value {$$=new CTreeNode(PLUS_EXPR,$1,$3);}
|value SUBTRACT value {$$=new CTreeNode(SUBTRACT_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;} |function {$$=$1;}
; ;

View file

@ -2,29 +2,13 @@
#include data/scripts/defs/charanim.scr #include data/scripts/defs/charanim.scr
//do /*
//{ _setCharacterAnimation(CHAR_SPONGEBOB,ANIM_QUIET);
// print($tmp1); _setText(123);
// $tmp1=$tmp1+1; pause;
// 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;
#define x $tmp1 #define x $tmp1
#define y $tmp2 #define y $tmp2
#define vx $tmp3 #define vx $tmp3
@ -38,16 +22,14 @@ vy=velocity;
while(1==1) while(1==1)
{ {
// readout for fps :) // readout for fps :)
$tmp0=_getFrameTime(); $tmp0=_getFrameTime();
//print($tmp0); $tmp5=50;
$tmp5=50; do{
do{
_drawSprite(4,$tmp5,50,10); _drawSprite(4,$tmp5,50,10);
$tmp5=$tmp5+15; $tmp5=$tmp5+20;
$tmp0=$tmp0-1; $tmp0=$tmp0-1;
}while($tmp0>0); }while($tmp0>0);
_drawSprite(0,x,y,100); _drawSprite(0,x,y,100);
$tmp0=_getFrameTime(); $tmp0=_getFrameTime();

View file

@ -295,6 +295,32 @@ PAUL_DBGMSG("pc:0x%04d sp:%03d",m_pc*2,m_sp);
push(val1+val2); push(val1+val2);
break; 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 case OP_NEG: // value pushes result to stack
val1=pop(); val1=pop();
#ifdef FULL_CODE_OUTPUT #ifdef FULL_CODE_OUTPUT
@ -327,7 +353,7 @@ PAUL_DBGMSG("pc:0x%04d sp:%03d",m_pc*2,m_sp);
break; break;
default: 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; m_state=CRASHED_ILLEGAL_OPCODE;
break; break;
} }

View file

@ -78,6 +78,7 @@ private:
STOPPED_STACK_NOT_EMPTY, STOPPED_STACK_NOT_EMPTY,
CRASHED_ILLEGAL_OPCODE, CRASHED_ILLEGAL_OPCODE,
CRASHED_DIVIDE_BY_ZERO,
}ScriptState; }ScriptState;
enum enum
@ -104,6 +105,8 @@ private:
OP_IS_GREATERTHAN_VALUE,// value, value pushes result ( 0 or 1 ) to stack OP_IS_GREATERTHAN_VALUE,// value, value pushes result ( 0 or 1 ) to stack
OP_ASSIGN, // varidx, value OP_ASSIGN, // varidx, value
OP_ADD, // value, value pushes result to stack 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_NEG, // value pushes result to stack
OP_PRINT, // value OP_PRINT, // value
OP_CALL_FUNCTION, // functionnumber, argcount args pushes return value to stack OP_CALL_FUNCTION, // functionnumber, argcount args pushes return value to stack

Binary file not shown.