DIRECTOR: Lingo: Defined 'mod' operator and specified operator precedence

This commit is contained in:
Eugene Sandulenko 2016-08-20 12:59:59 +02:00
parent dcbc7e3b4d
commit fdd4e8369a
7 changed files with 799 additions and 753 deletions

View File

@ -73,6 +73,7 @@ static struct FuncDescr {
{ Lingo::c_sub, "c_sub", "" },
{ Lingo::c_mul, "c_mul", "" },
{ Lingo::c_div, "c_div", "" },
{ Lingo::c_mod, "c_mod", "" },
{ Lingo::c_negate, "c_negate", "" },
{ Lingo::c_ampersand, "c_ampersand", "" },
{ Lingo::c_concat, "c_concat", "" },
@ -414,6 +415,21 @@ void Lingo::c_div() {
g_lingo->push(d1);
}
void Lingo::c_mod() {
Datum d2 = g_lingo->pop();
d2.toInt();
if (d2.u.i == 0)
error("division by zero");
Datum d1 = g_lingo->pop();
d1.toInt();
d1.u.i %= d2.u.i;
g_lingo->push(d1);
}
void Lingo::c_negate() {
Datum d = g_lingo->pop();

File diff suppressed because it is too large Load Diff

View File

@ -101,12 +101,13 @@
tAND = 317,
tOR = 318,
tNOT = 319,
tCONCAT = 320,
tCONTAINS = 321,
tSTARTS = 322,
tSPRITE = 323,
tINTERSECTS = 324,
tWITHIN = 325
tMOD = 320,
tCONCAT = 321,
tCONTAINS = 322,
tSTARTS = 323,
tSPRITE = 324,
tINTERSECTS = 325,
tWITHIN = 326
};
#endif
/* Tokens. */
@ -172,12 +173,13 @@
#define tAND 317
#define tOR 318
#define tNOT 319
#define tCONCAT 320
#define tCONTAINS 321
#define tSTARTS 322
#define tSPRITE 323
#define tINTERSECTS 324
#define tWITHIN 325
#define tMOD 320
#define tCONCAT 321
#define tCONTAINS 322
#define tSTARTS 323
#define tSPRITE 324
#define tINTERSECTS 325
#define tWITHIN 326
@ -195,7 +197,7 @@ typedef union YYSTYPE
Common::Array<double> *arr;
}
/* Line 1529 of yacc.c. */
#line 199 "engines/director/lingo/lingo-gr.hpp"
#line 201 "engines/director/lingo/lingo-gr.hpp"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1

View File

@ -86,7 +86,7 @@ void yyerror(char *s) {
%token tDOWN tELSE tNLELSIF tEND tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO
%token tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
%token tWITH tWHILE tNLELSE tFACTORY tMETHOD tOPEN tPLAY tDONE tPLAYACCEL tINSTANCE
%token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT
%token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT tMOD
%token tCONCAT tCONTAINS tSTARTS
%token tSPRITE tINTERSECTS tWITHIN
@ -94,8 +94,10 @@ void yyerror(char *s) {
%type<narg> argdef arglist
%right '='
%left tLT tLE tGT tGE tNEQ tCONTAINS tSTARTS
%left '&'
%left '+' '-'
%left '*' '/' '%'
%left '*' '/' '%' tAND tOR tMOD
%right UNARY
%%
@ -386,6 +388,7 @@ expr: INT { $$ = g_lingo->codeConst($1); }
| expr '-' expr { g_lingo->code1(g_lingo->c_sub); }
| expr '*' expr { g_lingo->code1(g_lingo->c_mul); }
| expr '/' expr { g_lingo->code1(g_lingo->c_div); }
| expr tMOD expr { g_lingo->code1(g_lingo->c_mod); }
| expr '>' expr { g_lingo->code1(g_lingo->c_gt); }
| expr '<' expr { g_lingo->code1(g_lingo->c_lt); }
| expr tNEQ expr { g_lingo->code1(g_lingo->c_neq); }

View File

@ -364,8 +364,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 58
#define YY_END_OF_BUFFER 59
#define YY_NUM_RULES 59
#define YY_END_OF_BUFFER 60
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@ -373,31 +373,31 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static yyconst flex_int16_t yy_accept[205] =
static yyconst flex_int16_t yy_accept[206] =
{ 0,
0, 0, 59, 57, 3, 55, 55, 57, 57, 54,
54, 54, 53, 54, 54, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 2, 2, 3, 55, 0, 0, 0, 0,
0, 56, 50, 1, 52, 53, 49, 47, 48, 51,
51, 51, 51, 51, 51, 51, 51, 51, 51, 18,
8, 51, 51, 51, 51, 51, 51, 51, 28, 51,
30, 51, 51, 51, 51, 51, 51, 51, 51, 41,
51, 51, 2, 2, 0, 1, 52, 4, 51, 51,
51, 51, 12, 51, 51, 51, 51, 0, 51, 51,
0, 0, 60, 58, 3, 56, 56, 58, 58, 55,
55, 55, 54, 55, 55, 52, 52, 52, 52, 52,
52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
52, 52, 2, 2, 3, 56, 0, 0, 0, 0,
0, 57, 51, 1, 53, 54, 50, 48, 49, 52,
52, 52, 52, 52, 52, 52, 52, 52, 52, 18,
8, 52, 52, 52, 52, 52, 52, 52, 29, 52,
31, 52, 52, 52, 52, 52, 52, 52, 52, 42,
52, 52, 2, 2, 0, 1, 53, 4, 52, 52,
52, 52, 12, 52, 52, 52, 52, 0, 52, 52,
51, 51, 51, 51, 51, 27, 51, 51, 51, 33,
51, 35, 51, 51, 51, 51, 51, 51, 0, 51,
6, 7, 11, 14, 51, 51, 51, 0, 51, 51,
21, 22, 51, 51, 51, 26, 29, 31, 51, 51,
51, 51, 0, 40, 45, 51, 43, 10, 51, 51,
15, 51, 17, 51, 51, 23, 51, 25, 51, 51,
51, 51, 39, 39, 46, 51, 0, 51, 51, 16,
51, 51, 24, 51, 34, 42, 36, 0, 39, 44,
0, 51, 13, 51, 51, 51, 0, 39, 9, 5,
19, 51, 32, 0, 39, 51, 0, 0, 20, 38,
52, 52, 52, 25, 52, 52, 28, 52, 52, 52,
34, 52, 36, 52, 52, 52, 52, 52, 52, 0,
52, 6, 7, 11, 14, 52, 52, 52, 0, 52,
52, 21, 22, 52, 52, 52, 27, 30, 32, 52,
52, 52, 52, 0, 41, 46, 52, 44, 10, 52,
52, 15, 52, 17, 52, 52, 23, 52, 26, 52,
52, 52, 52, 40, 40, 47, 52, 0, 52, 52,
16, 52, 52, 24, 52, 35, 43, 37, 0, 40,
45, 0, 52, 13, 52, 52, 52, 0, 40, 9,
5, 19, 52, 33, 0, 40, 52, 0, 0, 20,
0, 0, 37, 0
39, 0, 0, 38, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@ -443,61 +443,61 @@ static yyconst flex_int32_t yy_meta[63] =
5, 5
} ;
static yyconst flex_int16_t yy_base[210] =
static yyconst flex_int16_t yy_base[211] =
{ 0,
0, 61, 156, 516, 65, 69, 73, 77, 148, 516,
0, 61, 156, 521, 65, 69, 73, 77, 148, 521,
104, 99, 54, 70, 91, 58, 0, 58, 59, 69,
74, 70, 70, 71, 88, 105, 105, 110, 82, 118,
117, 130, 177, 181, 185, 516, 189, 193, 197, 106,
94, 516, 516, 0, 82, 132, 516, 516, 516, 0,
117, 130, 177, 181, 185, 521, 189, 193, 197, 106,
94, 521, 521, 0, 82, 132, 521, 521, 521, 0,
84, 119, 169, 116, 120, 174, 186, 191, 180, 171,
0, 177, 183, 196, 182, 183, 182, 188, 0, 204,
0, 209, 206, 194, 201, 203, 209, 229, 227, 0,
233, 222, 263, 270, 226, 0, 80, 0, 226, 234,
234, 243, 0, 237, 243, 254, 247, 284, 251, 271,
0, 177, 183, 196, 182, 201, 181, 188, 0, 204,
0, 209, 206, 194, 201, 207, 212, 231, 228, 0,
233, 222, 271, 280, 230, 0, 80, 0, 230, 234,
238, 247, 0, 235, 236, 244, 264, 293, 255, 271,
263, 264, 271, 273, 265, 0, 274, 264, 268, 0,
286, 0, 283, 278, 305, 284, 287, 291, 295, 305,
0, 0, 0, 0, 296, 309, 314, 306, 322, 309,
0, 0, 314, 315, 325, 0, 0, 0, 323, 332,
316, 317, 350, 0, 0, 332, 336, 202, 337, 326,
0, 338, 516, 338, 336, 0, 343, 0, 342, 342,
358, 347, 212, 378, 0, 361, 388, 364, 357, 0,
379, 378, 0, 366, 0, 0, 0, 399, 408, 0,
378, 373, 0, 390, 399, 375, 397, 423, 516, 0,
0, 381, 0, 428, 435, 388, 441, 443, 0, 445,
267, 266, 278, 0, 279, 271, 0, 279, 269, 273,
0, 290, 0, 287, 282, 309, 289, 292, 296, 300,
307, 0, 0, 0, 0, 296, 310, 318, 310, 324,
311, 0, 0, 317, 318, 330, 0, 0, 0, 328,
337, 322, 323, 363, 0, 0, 334, 334, 202, 336,
330, 0, 338, 521, 340, 340, 0, 355, 0, 347,
348, 364, 354, 212, 387, 0, 361, 388, 367, 359,
0, 383, 382, 0, 369, 0, 0, 0, 402, 404,
0, 393, 383, 0, 401, 405, 384, 403, 427, 521,
0, 0, 395, 0, 256, 429, 401, 441, 448, 0,
415, 447, 452, 516, 495, 497, 502, 506, 510
453, 404, 459, 460, 521, 500, 502, 507, 511, 515
} ;
static yyconst flex_int16_t yy_def[210] =
static yyconst flex_int16_t yy_def[211] =
{ 0,
204, 1, 204, 204, 204, 204, 204, 204, 205, 204,
204, 204, 204, 204, 204, 206, 206, 206, 206, 206,
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
206, 206, 204, 204, 204, 204, 204, 204, 204, 204,
205, 204, 204, 207, 204, 204, 204, 204, 204, 206,
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
206, 206, 204, 204, 204, 207, 204, 206, 206, 206,
206, 206, 206, 206, 206, 206, 206, 204, 206, 206,
205, 1, 205, 205, 205, 205, 205, 205, 206, 205,
205, 205, 205, 205, 205, 207, 207, 207, 207, 207,
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
207, 207, 205, 205, 205, 205, 205, 205, 205, 205,
206, 205, 205, 208, 205, 205, 205, 205, 205, 207,
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
207, 207, 205, 205, 205, 208, 205, 207, 207, 207,
207, 207, 207, 207, 207, 207, 207, 205, 207, 207,
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
206, 206, 206, 206, 206, 206, 206, 206, 204, 206,
206, 206, 206, 206, 206, 206, 206, 204, 206, 206,
206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
206, 206, 208, 206, 206, 206, 206, 204, 206, 206,
206, 206, 204, 206, 206, 206, 206, 206, 206, 206,
206, 206, 208, 208, 206, 206, 204, 206, 206, 206,
206, 206, 206, 206, 206, 206, 206, 204, 208, 206,
204, 206, 206, 206, 206, 206, 204, 208, 204, 206,
206, 206, 206, 204, 208, 206, 209, 204, 206, 209,
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
207, 207, 207, 207, 207, 207, 207, 207, 207, 205,
207, 207, 207, 207, 207, 207, 207, 207, 205, 207,
207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
207, 207, 207, 209, 207, 207, 207, 207, 205, 207,
207, 207, 207, 205, 207, 207, 207, 207, 207, 207,
207, 207, 207, 209, 209, 207, 207, 205, 207, 207,
207, 207, 207, 207, 207, 207, 207, 207, 205, 209,
207, 205, 207, 207, 207, 207, 207, 205, 209, 205,
207, 207, 207, 207, 205, 209, 207, 210, 205, 207,
204, 204, 209, 0, 204, 204, 204, 204, 204
210, 205, 205, 210, 0, 205, 205, 205, 205, 205
} ;
static yyconst flex_int16_t yy_nxt[579] =
static yyconst flex_int16_t yy_nxt[584] =
{ 0,
4, 5, 6, 7, 8, 9, 10, 11, 12, 4,
13, 14, 10, 15, 16, 17, 18, 19, 20, 21,
@ -515,56 +515,57 @@ static yyconst flex_int16_t yy_nxt[579] =
62, 60, 63, 67, 69, 75, 88, 64, 58, 56,
85, 65, 68, 70, 72, 71, 76, 93, 79, 66,
73, 45, 46, 74, 80, 89, 77, 92, 67, 69,
78, 81, 82, 42, 85, 204, 68, 70, 72, 71,
204, 76, 93, 79, 73, 204, 204, 74, 80, 89,
77, 92, 98, 204, 78, 98, 81, 82, 83, 36,
78, 81, 82, 42, 85, 205, 68, 70, 72, 71,
205, 76, 93, 79, 73, 205, 205, 74, 80, 89,
77, 92, 98, 205, 78, 98, 81, 82, 83, 36,
36, 84, 84, 36, 36, 84, 35, 36, 36, 37,
37, 36, 36, 37, 38, 90, 94, 38, 38, 39,
39, 38, 95, 167, 91, 96, 167, 97, 99, 100,
101, 40, 102, 178, 103, 40, 178, 104, 105, 90,
106, 94, 107, 108, 109, 204, 110, 95, 91, 111,
96, 97, 99, 100, 101, 112, 40, 102, 103, 113,
40, 104, 105, 114, 106, 115, 204, 107, 108, 109,
110, 116, 121, 111, 118, 117, 204, 119, 120, 112,
122, 123, 127, 113, 83, 36, 36, 84, 114, 124,
115, 84, 36, 36, 84, 125, 116, 121, 118, 126,
117, 119, 120, 129, 122, 98, 123, 127, 98, 130,
204, 132, 134, 124, 133, 135, 204, 136, 131, 125,
39, 38, 95, 168, 91, 96, 168, 97, 99, 100,
101, 40, 102, 179, 103, 40, 179, 106, 104, 90,
107, 94, 108, 109, 110, 205, 111, 95, 91, 112,
96, 97, 99, 100, 101, 105, 40, 102, 103, 113,
40, 106, 114, 104, 107, 115, 116, 108, 109, 110,
111, 117, 122, 112, 119, 118, 205, 198, 205, 105,
198, 120, 121, 113, 123, 124, 114, 125, 126, 127,
115, 116, 83, 36, 36, 84, 117, 122, 119, 128,
118, 84, 36, 36, 84, 120, 121, 130, 123, 131,
124, 125, 126, 127, 98, 133, 134, 98, 132, 135,
137, 138, 139, 126, 140, 141, 143, 129, 142, 143,
145, 146, 147, 148, 130, 132, 128, 134, 133, 149,
135, 136, 131, 150, 137, 138, 139, 151, 152, 140,
141, 144, 142, 153, 145, 146, 154, 147, 148, 155,
128, 156, 157, 158, 149, 159, 160, 150, 161, 162,
165, 143, 151, 152, 143, 144, 169, 153, 166, 168,
173, 154, 170, 155, 171, 156, 157, 172, 158, 174,
159, 160, 161, 162, 175, 165, 176, 204, 177, 178,
169, 164, 178, 166, 168, 173, 170, 180, 171, 167,
182, 172, 167, 174, 183, 184, 185, 189, 175, 186,
205, 136, 205, 137, 128, 138, 139, 140, 141, 142,
144, 130, 143, 144, 131, 146, 147, 148, 149, 133,
134, 150, 132, 151, 135, 129, 136, 137, 152, 138,
139, 140, 153, 141, 142, 145, 143, 154, 155, 146,
147, 156, 148, 149, 157, 158, 150, 151, 159, 129,
160, 161, 166, 152, 162, 163, 167, 153, 169, 145,
170, 154, 171, 155, 144, 156, 172, 144, 157, 158,
205, 173, 174, 159, 175, 160, 161, 166, 162, 163,
176, 167, 177, 169, 170, 178, 171, 181, 179, 168,
172, 179, 168, 183, 165, 173, 184, 174, 175, 185,
178, 176, 177, 178, 190, 164, 193, 179, 191, 178,
181, 180, 178, 196, 182, 192, 194, 204, 183, 199,
184, 185, 189, 186, 178, 204, 187, 178, 190, 197,
193, 179, 197, 191, 202, 181, 198, 196, 188, 198,
192, 194, 197, 199, 198, 197, 204, 198, 203, 204,
187, 203, 204, 203, 204, 195, 203, 204, 204, 202,
204, 204, 188, 204, 204, 204, 204, 204, 204, 204,
201, 204, 204, 204, 204, 204, 204, 204, 204, 195,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 201, 41, 41, 204, 41, 41,
186, 205, 187, 179, 176, 179, 179, 177, 179, 178,
182, 181, 190, 205, 191, 194, 180, 183, 165, 192,
184, 193, 195, 203, 185, 186, 187, 197, 179, 188,
199, 179, 200, 199, 189, 182, 205, 190, 191, 194,
180, 205, 198, 205, 192, 198, 193, 195, 203, 199,
205, 197, 199, 188, 205, 205, 200, 205, 189, 196,
204, 204, 205, 204, 204, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 202, 205, 205, 205, 205,
205, 205, 205, 196, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 202,
50, 50, 86, 86, 204, 86, 86, 163, 204, 204,
163, 200, 204, 204, 200, 3, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204
41, 41, 205, 41, 41, 50, 50, 86, 86, 205,
86, 86, 164, 205, 205, 164, 201, 205, 205, 201,
3, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205
} ;
static yyconst flex_int16_t yy_chk[579] =
static yyconst flex_int16_t yy_chk[584] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@ -588,47 +589,48 @@ static yyconst flex_int16_t yy_chk[579] =
33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
37, 37, 37, 37, 38, 53, 56, 38, 39, 39,
39, 39, 57, 148, 53, 58, 148, 59, 62, 62,
63, 38, 64, 163, 65, 39, 163, 66, 67, 53,
39, 39, 57, 149, 53, 58, 149, 59, 62, 62,
63, 38, 64, 164, 65, 39, 164, 67, 66, 53,
68, 56, 70, 72, 73, 0, 74, 57, 53, 75,
58, 59, 62, 62, 63, 76, 38, 64, 65, 77,
39, 66, 67, 78, 68, 79, 0, 70, 72, 73,
74, 81, 90, 75, 82, 81, 0, 85, 89, 76,
91, 92, 97, 77, 83, 83, 83, 83, 78, 94,
79, 84, 84, 84, 84, 95, 81, 90, 82, 96,
81, 85, 89, 99, 91, 98, 92, 97, 98, 100,
0, 101, 103, 94, 102, 104, 0, 105, 100, 95,
58, 59, 62, 62, 63, 66, 38, 64, 65, 76,
39, 67, 77, 66, 68, 78, 79, 70, 72, 73,
74, 81, 90, 75, 82, 81, 0, 195, 0, 66,
195, 85, 89, 76, 91, 92, 77, 94, 95, 96,
78, 79, 83, 83, 83, 83, 81, 90, 82, 97,
81, 84, 84, 84, 84, 85, 89, 99, 91, 100,
92, 94, 95, 96, 98, 101, 102, 98, 100, 103,
107, 108, 109, 96, 111, 113, 115, 99, 114, 115,
116, 117, 118, 119, 100, 101, 98, 103, 102, 120,
104, 105, 100, 125, 107, 108, 109, 126, 127, 111,
113, 115, 114, 128, 116, 117, 129, 118, 119, 130,
98, 133, 134, 135, 120, 139, 140, 125, 141, 142,
146, 143, 126, 127, 143, 115, 150, 128, 147, 149,
157, 129, 152, 130, 154, 133, 134, 155, 135, 159,
139, 140, 141, 142, 160, 146, 161, 0, 162, 164,
150, 143, 164, 147, 149, 157, 152, 166, 154, 167,
168, 155, 167, 159, 169, 171, 172, 181, 160, 174,
0, 105, 0, 106, 97, 108, 109, 110, 112, 114,
116, 99, 115, 116, 100, 117, 118, 119, 120, 101,
102, 121, 100, 126, 103, 98, 105, 106, 127, 108,
109, 110, 128, 112, 114, 116, 115, 129, 130, 117,
118, 131, 119, 120, 134, 135, 121, 126, 136, 98,
140, 141, 147, 127, 142, 143, 148, 128, 150, 116,
151, 129, 153, 130, 144, 131, 155, 144, 134, 135,
0, 156, 158, 136, 160, 140, 141, 147, 142, 143,
161, 148, 162, 150, 151, 163, 153, 167, 165, 168,
155, 165, 168, 169, 144, 156, 170, 158, 160, 172,
178, 161, 162, 178, 182, 143, 186, 164, 184, 179,
167, 166, 179, 192, 168, 185, 187, 0, 169, 196,
171, 172, 181, 174, 188, 0, 178, 188, 182, 194,
186, 164, 194, 184, 201, 167, 195, 192, 179, 195,
185, 187, 197, 196, 198, 197, 200, 198, 202, 200,
178, 202, 0, 203, 0, 188, 203, 0, 0, 201,
0, 0, 179, 0, 0, 0, 0, 0, 0, 0,
198, 0, 0, 0, 0, 0, 0, 0, 0, 188,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 198, 205, 205, 0, 205, 205,
173, 0, 175, 179, 161, 180, 179, 162, 180, 163,
168, 167, 182, 0, 183, 187, 165, 169, 144, 185,
170, 186, 188, 202, 172, 173, 175, 193, 189, 179,
196, 189, 197, 196, 180, 168, 0, 182, 183, 187,
165, 0, 198, 0, 185, 198, 186, 188, 202, 199,
0, 193, 199, 179, 201, 0, 197, 201, 180, 189,
203, 204, 0, 203, 204, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 199, 0, 0, 0, 0,
0, 0, 0, 189, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 199,
206, 206, 207, 207, 0, 207, 207, 208, 0, 0,
208, 209, 0, 0, 209, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
204, 204, 204, 204, 204, 204, 204, 204
206, 206, 0, 206, 206, 207, 207, 208, 208, 0,
208, 208, 209, 0, 0, 209, 210, 0, 0, 210,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
205, 205, 205
} ;
static yy_state_type yy_last_accepting_state;
@ -702,7 +704,7 @@ static void countnl() {
g_lingo->_colnumber = strlen(p);
}
#line 706 "engines/director/lingo/lingo-lex.cpp"
#line 708 "engines/director/lingo/lingo-lex.cpp"
#define INITIAL 0
@ -890,7 +892,7 @@ YY_DECL
#line 69 "engines/director/lingo/lingo-lex.l"
#line 894 "engines/director/lingo/lingo-lex.cpp"
#line 896 "engines/director/lingo/lingo-lex.cpp"
if ( !(yy_init) )
{
@ -944,13 +946,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 205 )
if ( yy_current_state >= 206 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
while ( yy_base[yy_current_state] != 516 );
while ( yy_base[yy_current_state] != 521 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@ -1099,66 +1101,71 @@ YY_RULE_SETUP
case 25:
YY_RULE_SETUP
#line 96 "engines/director/lingo/lingo-lex.l"
{ count(); return tMOVIE; }
{ count(); return tMOD; }
YY_BREAK
case 26:
YY_RULE_SETUP
#line 97 "engines/director/lingo/lingo-lex.l"
{ count(); return tNEXT; }
{ count(); return tMOVIE; }
YY_BREAK
case 27:
YY_RULE_SETUP
#line 98 "engines/director/lingo/lingo-lex.l"
{ count(); return tNOT; }
{ count(); return tNEXT; }
YY_BREAK
case 28:
YY_RULE_SETUP
#line 99 "engines/director/lingo/lingo-lex.l"
{ count(); return tOF; }
{ count(); return tNOT; }
YY_BREAK
case 29:
YY_RULE_SETUP
#line 100 "engines/director/lingo/lingo-lex.l"
{ count(); return tOPEN; }
{ count(); return tOF; }
YY_BREAK
case 30:
YY_RULE_SETUP
#line 101 "engines/director/lingo/lingo-lex.l"
{ count(); return tOR; }
{ count(); return tOPEN; }
YY_BREAK
case 31:
YY_RULE_SETUP
#line 102 "engines/director/lingo/lingo-lex.l"
{ count(); return tPLAY; }
{ count(); return tOR; }
YY_BREAK
case 32:
YY_RULE_SETUP
#line 103 "engines/director/lingo/lingo-lex.l"
{ count(); return tPREVIOUS; }
{ count(); return tPLAY; }
YY_BREAK
case 33:
YY_RULE_SETUP
#line 104 "engines/director/lingo/lingo-lex.l"
{ count(); return tPUT; }
{ count(); return tPREVIOUS; }
YY_BREAK
case 34:
YY_RULE_SETUP
#line 105 "engines/director/lingo/lingo-lex.l"
{ count(); return tREPEAT; }
{ count(); return tPUT; }
YY_BREAK
case 35:
YY_RULE_SETUP
#line 106 "engines/director/lingo/lingo-lex.l"
{ count(); return tSET; }
{ count(); return tREPEAT; }
YY_BREAK
case 36:
YY_RULE_SETUP
#line 107 "engines/director/lingo/lingo-lex.l"
{ count(); return tSTARTS; }
{ count(); return tSET; }
YY_BREAK
case 37:
YY_RULE_SETUP
#line 108 "engines/director/lingo/lingo-lex.l"
{ count(); return tSTARTS; }
YY_BREAK
case 38:
YY_RULE_SETUP
#line 109 "engines/director/lingo/lingo-lex.l"
{
count();
@ -1168,9 +1175,9 @@ YY_RULE_SETUP
return THEENTITYWITHID;
}
YY_BREAK
case 38:
case 39:
YY_RULE_SETUP
#line 116 "engines/director/lingo/lingo-lex.l"
#line 117 "engines/director/lingo/lingo-lex.l"
{
count();
@ -1212,9 +1219,9 @@ YY_RULE_SETUP
warning("Unhandled the entity %s", ptr);
}
YY_BREAK
case 39:
case 40:
YY_RULE_SETUP
#line 156 "engines/director/lingo/lingo-lex.l"
#line 157 "engines/director/lingo/lingo-lex.l"
{
count();
@ -1235,64 +1242,64 @@ YY_RULE_SETUP
warning("Unhandled the entity %s", ptr);
}
YY_BREAK
case 40:
YY_RULE_SETUP
#line 175 "engines/director/lingo/lingo-lex.l"
{ count(); return tTHEN; }
YY_BREAK
case 41:
YY_RULE_SETUP
#line 176 "engines/director/lingo/lingo-lex.l"
{ count(); return tTO; }
{ count(); return tTHEN; }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 177 "engines/director/lingo/lingo-lex.l"
{ count(); return tSPRITE; }
{ count(); return tTO; }
YY_BREAK
case 43:
YY_RULE_SETUP
#line 178 "engines/director/lingo/lingo-lex.l"
{ count(); return tWITH; }
{ count(); return tSPRITE; }
YY_BREAK
case 44:
YY_RULE_SETUP
#line 179 "engines/director/lingo/lingo-lex.l"
{ count(); return tWITHIN; }
{ count(); return tWITH; }
YY_BREAK
case 45:
YY_RULE_SETUP
#line 180 "engines/director/lingo/lingo-lex.l"
{ count(); return tWHEN; }
{ count(); return tWITHIN; }
YY_BREAK
case 46:
YY_RULE_SETUP
#line 181 "engines/director/lingo/lingo-lex.l"
{ count(); return tWHILE; }
{ count(); return tWHEN; }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 183 "engines/director/lingo/lingo-lex.l"
{ count(); return tNEQ; }
#line 182 "engines/director/lingo/lingo-lex.l"
{ count(); return tWHILE; }
YY_BREAK
case 48:
YY_RULE_SETUP
#line 184 "engines/director/lingo/lingo-lex.l"
{ count(); return tGE; }
{ count(); return tNEQ; }
YY_BREAK
case 49:
YY_RULE_SETUP
#line 185 "engines/director/lingo/lingo-lex.l"
{ count(); return tLE; }
{ count(); return tGE; }
YY_BREAK
case 50:
YY_RULE_SETUP
#line 186 "engines/director/lingo/lingo-lex.l"
{ count(); return tCONCAT; }
{ count(); return tLE; }
YY_BREAK
case 51:
YY_RULE_SETUP
#line 188 "engines/director/lingo/lingo-lex.l"
#line 187 "engines/director/lingo/lingo-lex.l"
{ count(); return tCONCAT; }
YY_BREAK
case 52:
YY_RULE_SETUP
#line 189 "engines/director/lingo/lingo-lex.l"
{
count();
yylval.s = new Common::String(yytext);
@ -1320,43 +1327,43 @@ YY_RULE_SETUP
return ID;
}
YY_BREAK
case 52:
YY_RULE_SETUP
#line 214 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.f = atof(yytext); return FLOAT; }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 215 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
{ count(); yylval.f = atof(yytext); return FLOAT; }
YY_BREAK
case 54:
YY_RULE_SETUP
#line 216 "engines/director/lingo/lingo-lex.l"
{ count(); return *yytext; }
{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
YY_BREAK
case 55:
/* rule 55 can match eol */
YY_RULE_SETUP
#line 217 "engines/director/lingo/lingo-lex.l"
{ return '\n'; }
{ count(); return *yytext; }
YY_BREAK
case 56:
/* rule 56 can match eol */
YY_RULE_SETUP
#line 218 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
{ return '\n'; }
YY_BREAK
case 57:
YY_RULE_SETUP
#line 219 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
YY_BREAK
case 58:
YY_RULE_SETUP
#line 221 "engines/director/lingo/lingo-lex.l"
#line 220 "engines/director/lingo/lingo-lex.l"
YY_BREAK
case 59:
YY_RULE_SETUP
#line 222 "engines/director/lingo/lingo-lex.l"
ECHO;
YY_BREAK
#line 1360 "engines/director/lingo/lingo-lex.cpp"
#line 1367 "engines/director/lingo/lingo-lex.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@ -1649,7 +1656,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 205 )
if ( yy_current_state >= 206 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@ -1677,11 +1684,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 205 )
if ( yy_current_state >= 206 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 204);
yy_is_jam = (yy_current_state == 205);
return yy_is_jam ? 0 : yy_current_state;
}
@ -2356,7 +2363,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
#line 221 "engines/director/lingo/lingo-lex.l"
#line 222 "engines/director/lingo/lingo-lex.l"

View File

@ -93,6 +93,7 @@ whitespace [\t ]
(?i:loop) { count(); return tLOOP; }
(?i:macro) { count(); return tMACRO; }
(?i:method) { count(); return tMETHOD; }
(?i:mod) { count(); return tMOD; }
(?i:movie) { count(); return tMOVIE; }
(?i:next) { count(); return tNEXT; }
(?i:not) { count(); return tNOT; }

View File

@ -236,6 +236,7 @@ public:
static void c_sub();
static void c_mul();
static void c_div();
static void c_mod();
static void c_negate();
static void c_and();