DIRECTOR: Lingo: Fix 'intersects' operator parsing and added 'within' operator

This commit is contained in:
Eugene Sandulenko 2016-07-17 13:46:05 +03:00
parent d53ff7b180
commit 9172820158
8 changed files with 655 additions and 597 deletions

View File

@ -399,6 +399,15 @@ void Lingo::c_intersects() {
g_lingo->push(d1);
}
void Lingo::c_within() {
Datum d2 = g_lingo->pop();
Datum d1 = g_lingo->pop();
warning("STUB: c_within");
g_lingo->push(d1);
}
void Lingo::c_and() {
Datum d2 = g_lingo->pop();
Datum d1 = g_lingo->pop();

File diff suppressed because it is too large Load Diff

View File

@ -93,7 +93,9 @@
tCONCAT = 309,
tCONTAINS = 310,
tSTARTS = 311,
tINTERSECTS = 312
tSPRITE = 312,
tINTERSECTS = 313,
tWITHIN = 314
};
#endif
/* Tokens. */
@ -151,7 +153,9 @@
#define tCONCAT 309
#define tCONTAINS 310
#define tSTARTS 311
#define tINTERSECTS 312
#define tSPRITE 312
#define tINTERSECTS 313
#define tWITHIN 314
@ -168,7 +172,7 @@ typedef union YYSTYPE
int narg; /* number of arguments */
}
/* Line 1529 of yacc.c. */
#line 172 "engines/director/lingo/lingo-gr.hpp"
#line 176 "engines/director/lingo/lingo-gr.hpp"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1

View File

@ -85,14 +85,13 @@ void yyerror(char *s) {
%token tWITH tWHILE tNLELSE tFACTORY tMETHOD
%token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT
%token tCONCAT tCONTAINS tSTARTS
%token tINTERSECTS
%token tSPRITE tINTERSECTS tWITHIN
%type<code> asgn begin elseif elsestmtoneliner end expr if repeatwhile repeatwith stmtlist
%type<s> gotoframe gotomovie
%type<narg> argdef arglist
%right '='
%left tINTERSECTS
%left '+' '-'
%left '*' '/' '%'
%right UNARY
@ -401,10 +400,11 @@ expr: INT {
| expr tCONCAT expr { g_lingo->code1(g_lingo->c_concat); }
| expr tCONTAINS expr { g_lingo->code1(g_lingo->c_contains); }
| expr tSTARTS expr { g_lingo->code1(g_lingo->c_starts); }
| expr tINTERSECTS expr { g_lingo->code1(g_lingo->c_intersects); }
| '+' expr %prec UNARY { $$ = $2; }
| '-' expr %prec UNARY { $$ = $2; g_lingo->code1(g_lingo->c_negate); }
| '(' expr ')' { $$ = $2; }
| tSPRITE expr tINTERSECTS expr { g_lingo->code1(g_lingo->c_intersects); }
| tSPRITE expr tWITHIN expr { g_lingo->code1(g_lingo->c_within); }
;
func: tMCI STRING { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString($2->c_str()); delete $2; }

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 52
#define YY_END_OF_BUFFER 53
#define YY_NUM_RULES 54
#define YY_END_OF_BUFFER 55
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@ -373,27 +373,28 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static yyconst flex_int16_t yy_accept[179] =
static yyconst flex_int16_t yy_accept[186] =
{ 0,
0, 0, 53, 51, 3, 49, 49, 51, 51, 48,
48, 48, 47, 48, 48, 45, 45, 45, 45, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
45, 45, 2, 2, 3, 49, 0, 0, 49, 0,
0, 50, 44, 1, 46, 47, 43, 41, 42, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 16,
7, 45, 45, 45, 45, 45, 45, 45, 45, 27,
28, 45, 45, 45, 45, 45, 45, 37, 45, 45,
2, 2, 0, 1, 46, 4, 45, 45, 45, 11,
45, 45, 45, 45, 45, 45, 45, 21, 45, 45,
0, 0, 55, 53, 3, 51, 51, 53, 53, 50,
50, 50, 49, 50, 50, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
47, 47, 2, 2, 3, 51, 0, 0, 51, 0,
0, 52, 46, 1, 48, 49, 45, 43, 44, 47,
47, 47, 47, 47, 47, 47, 47, 47, 47, 16,
7, 47, 47, 47, 47, 47, 47, 47, 47, 27,
28, 47, 47, 47, 47, 47, 47, 47, 37, 47,
47, 2, 2, 0, 1, 48, 4, 47, 47, 47,
11, 47, 47, 47, 47, 47, 47, 47, 21, 47,
45, 26, 45, 30, 45, 32, 45, 45, 45, 45,
45, 0, 45, 6, 10, 13, 45, 45, 45, 45,
18, 19, 45, 45, 45, 45, 25, 45, 45, 45,
0, 36, 39, 45, 38, 9, 45, 45, 14, 45,
45, 20, 45, 45, 24, 45, 45, 45, 35, 40,
0, 45, 45, 15, 45, 45, 23, 45, 31, 33,
0, 0, 45, 12, 45, 22, 45, 0, 8, 5,
45, 29, 0, 45, 0, 17, 34, 0
47, 47, 26, 47, 30, 47, 32, 47, 47, 47,
47, 47, 47, 0, 47, 6, 10, 13, 47, 47,
47, 47, 18, 19, 47, 47, 47, 47, 25, 47,
47, 47, 47, 0, 36, 41, 47, 39, 9, 47,
47, 14, 47, 47, 20, 47, 47, 24, 47, 47,
47, 47, 35, 42, 47, 0, 47, 47, 15, 47,
47, 23, 47, 31, 38, 33, 0, 40, 0, 47,
12, 47, 22, 47, 0, 8, 5, 47, 29, 0,
47, 0, 17, 34, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@ -438,55 +439,55 @@ static yyconst flex_int32_t yy_meta[61] =
6, 6, 6, 6, 6, 6, 6, 6, 6, 6
} ;
static yyconst flex_int16_t yy_base[184] =
static yyconst flex_int16_t yy_base[191] =
{ 0,
0, 59, 268, 426, 63, 67, 71, 75, 252, 426,
224, 181, 52, 68, 132, 56, 0, 56, 57, 67,
72, 68, 68, 69, 112, 70, 79, 103, 81, 103,
106, 115, 139, 145, 162, 101, 166, 170, 174, 135,
133, 426, 426, 0, 90, 163, 426, 426, 426, 0,
112, 153, 146, 151, 166, 162, 169, 172, 163, 0,
0, 160, 167, 171, 173, 166, 165, 164, 169, 0,
0, 183, 174, 178, 184, 204, 206, 0, 208, 201,
232, 242, 207, 0, 80, 0, 208, 214, 209, 0,
210, 216, 224, 237, 238, 230, 230, 227, 232, 244,
0, 59, 210, 446, 63, 67, 71, 75, 192, 446,
150, 148, 52, 68, 137, 56, 0, 56, 57, 67,
72, 68, 68, 69, 112, 70, 79, 103, 81, 109,
120, 121, 170, 174, 178, 101, 182, 186, 190, 97,
143, 446, 446, 0, 90, 124, 446, 446, 446, 0,
112, 110, 104, 115, 147, 167, 179, 182, 119, 0,
0, 167, 172, 184, 179, 172, 173, 172, 179, 0,
0, 193, 183, 187, 185, 188, 198, 200, 0, 205,
200, 242, 254, 211, 0, 80, 0, 217, 223, 232,
0, 221, 222, 234, 245, 243, 235, 236, 232, 246,
237, 0, 236, 0, 253, 0, 244, 274, 248, 255,
262, 267, 272, 0, 0, 0, 262, 269, 279, 269,
0, 0, 272, 280, 274, 285, 0, 282, 291, 277,
192, 0, 0, 288, 0, 312, 292, 290, 0, 296,
295, 0, 293, 309, 0, 305, 302, 304, 336, 0,
340, 309, 300, 0, 327, 316, 0, 317, 0, 0,
350, 333, 330, 0, 345, 0, 334, 346, 426, 0,
336, 0, 362, 338, 370, 0, 374, 426, 401, 403,
409, 414, 419
246, 242, 0, 244, 0, 260, 0, 257, 252, 279,
261, 266, 273, 277, 283, 0, 0, 0, 272, 283,
292, 279, 0, 0, 282, 297, 287, 294, 0, 293,
302, 289, 292, 201, 0, 0, 299, 302, 325, 305,
304, 0, 310, 308, 0, 320, 327, 0, 320, 318,
327, 320, 351, 0, 327, 358, 328, 322, 0, 342,
332, 0, 332, 0, 0, 0, 370, 0, 346, 337,
0, 359, 0, 348, 360, 446, 0, 351, 0, 384,
353, 390, 0, 391, 446, 421, 423, 429, 434, 439
} ;
static yyconst flex_int16_t yy_def[184] =
static yyconst flex_int16_t yy_def[191] =
{ 0,
178, 1, 178, 178, 178, 178, 178, 178, 179, 178,
178, 178, 178, 178, 178, 180, 180, 180, 180, 180,
180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
180, 180, 178, 178, 178, 178, 178, 178, 178, 178,
179, 178, 178, 181, 178, 178, 178, 178, 178, 180,
180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
178, 178, 178, 181, 178, 180, 180, 180, 180, 180,
180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
185, 1, 185, 185, 185, 185, 185, 185, 186, 185,
185, 185, 185, 185, 185, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 185, 185, 185, 185, 185, 185, 185, 185,
186, 185, 185, 188, 185, 185, 185, 185, 185, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 185, 185, 185, 188, 185, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
180, 178, 180, 180, 180, 180, 180, 180, 180, 180,
180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
182, 180, 180, 180, 180, 178, 180, 180, 180, 180,
180, 180, 180, 180, 180, 180, 180, 180, 182, 180,
178, 180, 180, 180, 180, 180, 180, 180, 180, 180,
178, 178, 180, 180, 180, 180, 180, 178, 178, 180,
180, 180, 178, 180, 183, 180, 183, 0, 178, 178,
178, 178, 178
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 187, 185, 187, 187, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 187, 189, 187, 187, 187, 187, 185, 187,
187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
187, 187, 189, 187, 187, 185, 187, 187, 187, 187,
187, 187, 187, 187, 187, 187, 185, 187, 185, 187,
187, 187, 187, 187, 185, 185, 187, 187, 187, 185,
187, 190, 187, 190, 0, 185, 185, 185, 185, 185
} ;
static yyconst flex_int16_t yy_nxt[487] =
static yyconst flex_int16_t yy_nxt[507] =
{ 0,
4, 5, 6, 7, 8, 9, 10, 11, 12, 4,
13, 14, 10, 15, 16, 17, 18, 19, 20, 21,
@ -497,53 +498,56 @@ static yyconst flex_int16_t yy_nxt[487] =
33, 45, 46, 34, 35, 36, 36, 37, 38, 39,
39, 38, 38, 39, 39, 38, 37, 36, 36, 37,
47, 48, 51, 52, 53, 40, 57, 61, 68, 40,
85, 54, 59, 55, 62, 60, 63, 69, 70, 74,
86, 54, 59, 55, 62, 60, 63, 69, 70, 74,
85, 58, 56, 36, 36, 51, 52, 53, 71, 40,
86, 58, 56, 36, 36, 51, 52, 53, 71, 40,
57, 61, 68, 40, 54, 59, 55, 62, 60, 63,
69, 75, 70, 74, 58, 56, 64, 77, 65, 86,
66, 71, 72, 78, 76, 73, 79, 80, 42, 67,
81, 36, 36, 82, 49, 75, 82, 36, 36, 82,
64, 77, 65, 86, 66, 72, 78, 76, 73, 83,
79, 80, 67, 35, 36, 36, 37, 37, 36, 36,
37, 38, 45, 46, 38, 38, 39, 39, 38, 87,
88, 89, 83, 90, 91, 92, 93, 97, 40, 44,
94, 95, 40, 131, 96, 98, 131, 99, 100, 101,
69, 84, 70, 74, 58, 56, 64, 75, 65, 87,
66, 71, 72, 45, 46, 73, 88, 76, 89, 67,
77, 78, 80, 81, 84, 90, 95, 79, 42, 49,
64, 75, 65, 87, 66, 72, 44, 43, 73, 88,
76, 89, 67, 77, 91, 78, 80, 81, 90, 95,
79, 82, 36, 36, 83, 83, 36, 36, 83, 35,
36, 36, 37, 37, 36, 36, 37, 38, 91, 92,
38, 38, 39, 39, 38, 93, 94, 42, 96, 97,
102, 103, 87, 88, 89, 104, 105, 90, 91, 92,
93, 97, 40, 94, 95, 106, 40, 96, 107, 98,
99, 100, 101, 102, 108, 103, 109, 115, 104, 105,
110, 43, 111, 81, 36, 36, 82, 112, 106, 113,
114, 116, 107, 82, 36, 36, 82, 117, 108, 118,
109, 115, 119, 125, 110, 111, 120, 42, 122, 123,
112, 124, 113, 114, 116, 121, 126, 178, 127, 128,
117, 129, 118, 130, 133, 131, 119, 125, 131, 134,
120, 122, 123, 135, 124, 136, 137, 139, 121, 138,
126, 127, 128, 140, 143, 129, 130, 133, 141, 142,
98, 99, 134, 100, 40, 134, 101, 102, 40, 185,
103, 104, 109, 92, 105, 106, 107, 108, 110, 93,
94, 96, 97, 111, 98, 99, 100, 112, 40, 101,
102, 113, 40, 103, 185, 104, 109, 105, 106, 107,
108, 114, 110, 82, 36, 36, 83, 111, 115, 116,
117, 112, 118, 119, 113, 83, 36, 36, 83, 120,
121, 122, 185, 124, 114, 125, 126, 127, 128, 185,
123, 115, 116, 129, 117, 118, 119, 130, 131, 132,
134, 133, 120, 134, 121, 122, 124, 136, 125, 126,
137, 127, 128, 123, 138, 139, 129, 140, 185, 141,
132, 144, 134, 145, 146, 147, 150, 135, 148, 136,
137, 139, 138, 151, 152, 156, 151, 140, 143, 153,
154, 141, 142, 132, 144, 155, 157, 145, 146, 147,
150, 148, 158, 159, 160, 163, 164, 161, 152, 156,
161, 151, 153, 154, 151, 165, 178, 166, 155, 167,
157, 161, 169, 178, 161, 158, 159, 160, 163, 164,
170, 171, 162, 175, 172, 173, 175, 174, 176, 165,
166, 175, 167, 178, 175, 178, 169, 168, 178, 178,
178, 178, 178, 170, 178, 171, 162, 172, 178, 173,
174, 176, 178, 178, 178, 178, 178, 178, 178, 178,
130, 142, 131, 132, 133, 135, 143, 185, 144, 145,
136, 146, 148, 137, 147, 149, 150, 154, 138, 139,
151, 140, 141, 152, 155, 142, 156, 157, 135, 156,
143, 144, 145, 158, 159, 146, 148, 147, 160, 149,
150, 154, 161, 151, 162, 165, 152, 163, 155, 164,
166, 157, 167, 168, 170, 167, 158, 159, 171, 156,
172, 160, 156, 173, 174, 176, 161, 177, 162, 165,
163, 167, 164, 166, 167, 178, 168, 170, 179, 180,
169, 171, 181, 183, 172, 182, 173, 174, 182, 176,
177, 182, 185, 185, 182, 185, 185, 175, 185, 178,
168, 41, 41, 178, 41, 41, 41, 50, 50, 84,
84, 178, 178, 84, 84, 149, 178, 178, 178, 149,
177, 178, 178, 178, 177, 3, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178
185, 179, 185, 180, 169, 181, 183, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
175, 41, 41, 185, 41, 41, 41, 50, 50, 85,
85, 185, 185, 85, 85, 153, 185, 185, 185, 153,
184, 185, 185, 185, 184, 3, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185
} ;
static yyconst flex_int16_t yy_chk[487] =
static yyconst flex_int16_t yy_chk[507] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@ -554,50 +558,53 @@ static yyconst flex_int16_t yy_chk[487] =
2, 13, 13, 2, 5, 5, 5, 5, 6, 6,
6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
14, 14, 16, 18, 19, 6, 21, 23, 26, 7,
85, 20, 22, 20, 23, 22, 24, 26, 27, 29,
86, 20, 22, 20, 23, 22, 24, 26, 27, 29,
45, 21, 20, 36, 36, 16, 18, 19, 27, 6,
21, 23, 26, 7, 20, 22, 20, 23, 22, 24,
26, 30, 27, 29, 21, 20, 25, 31, 25, 51,
25, 27, 28, 31, 30, 28, 32, 32, 41, 25,
33, 33, 33, 33, 15, 30, 34, 34, 34, 34,
25, 31, 25, 51, 25, 28, 31, 30, 28, 40,
32, 32, 25, 35, 35, 35, 35, 37, 37, 37,
37, 38, 46, 46, 38, 39, 39, 39, 39, 52,
53, 54, 40, 55, 56, 57, 58, 64, 38, 12,
59, 62, 39, 131, 63, 65, 131, 66, 67, 68,
26, 40, 27, 29, 21, 20, 25, 30, 25, 51,
25, 27, 28, 46, 46, 28, 52, 30, 53, 25,
30, 31, 32, 32, 40, 54, 59, 31, 41, 15,
25, 30, 25, 51, 25, 28, 12, 11, 28, 52,
30, 53, 25, 30, 55, 31, 32, 32, 54, 59,
31, 33, 33, 33, 33, 34, 34, 34, 34, 35,
35, 35, 35, 37, 37, 37, 37, 38, 55, 56,
38, 39, 39, 39, 39, 57, 58, 9, 62, 63,
69, 72, 52, 53, 54, 73, 74, 55, 56, 57,
58, 64, 38, 59, 62, 75, 39, 63, 76, 65,
66, 67, 68, 69, 77, 72, 79, 89, 73, 74,
79, 11, 80, 81, 81, 81, 81, 83, 75, 87,
88, 91, 76, 82, 82, 82, 82, 92, 77, 93,
79, 89, 94, 99, 79, 80, 95, 9, 96, 97,
83, 98, 87, 88, 91, 95, 100, 3, 101, 103,
92, 105, 93, 107, 109, 108, 94, 99, 108, 110,
95, 96, 97, 111, 98, 112, 113, 118, 95, 117,
100, 101, 103, 119, 124, 105, 107, 109, 120, 123,
64, 65, 134, 66, 38, 134, 67, 68, 39, 3,
69, 72, 77, 56, 73, 74, 75, 76, 78, 57,
58, 62, 63, 80, 64, 65, 66, 80, 38, 67,
68, 81, 39, 69, 0, 72, 77, 73, 74, 75,
76, 84, 78, 82, 82, 82, 82, 80, 88, 89,
90, 80, 92, 93, 81, 83, 83, 83, 83, 94,
95, 96, 0, 97, 84, 98, 99, 100, 101, 0,
96, 88, 89, 102, 90, 92, 93, 104, 106, 108,
110, 109, 94, 110, 95, 96, 97, 111, 98, 99,
112, 100, 101, 96, 113, 114, 102, 115, 0, 119,
108, 125, 110, 126, 128, 129, 134, 111, 130, 112,
113, 118, 117, 136, 137, 143, 136, 119, 124, 138,
140, 120, 123, 108, 125, 141, 144, 126, 128, 129,
134, 130, 146, 147, 148, 152, 153, 149, 137, 143,
149, 151, 138, 140, 151, 155, 0, 156, 141, 158,
144, 161, 162, 0, 161, 146, 147, 148, 152, 153,
163, 165, 151, 173, 167, 168, 173, 171, 174, 155,
156, 175, 158, 0, 175, 177, 162, 161, 177, 0,
0, 0, 0, 163, 0, 165, 151, 167, 0, 168,
171, 174, 0, 0, 0, 0, 0, 0, 0, 0,
104, 120, 106, 108, 109, 110, 121, 0, 122, 125,
111, 126, 128, 112, 127, 130, 131, 137, 113, 114,
132, 115, 119, 133, 138, 120, 139, 140, 110, 139,
121, 122, 125, 141, 143, 126, 128, 127, 144, 130,
131, 137, 146, 132, 147, 151, 133, 149, 138, 150,
152, 140, 153, 155, 157, 153, 141, 143, 158, 156,
160, 144, 156, 161, 163, 169, 146, 170, 147, 151,
149, 167, 150, 152, 167, 172, 155, 157, 174, 175,
156, 158, 178, 181, 160, 180, 161, 163, 180, 169,
170, 182, 184, 0, 182, 184, 0, 167, 0, 172,
161, 179, 179, 0, 179, 179, 179, 180, 180, 181,
181, 0, 0, 181, 181, 182, 0, 0, 0, 182,
183, 0, 0, 0, 183, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
178, 178, 178, 178, 178, 178
0, 174, 0, 175, 156, 178, 181, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
167, 186, 186, 0, 186, 186, 186, 187, 187, 188,
188, 0, 0, 188, 188, 189, 0, 0, 0, 189,
190, 0, 0, 0, 190, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
185, 185, 185, 185, 185, 185
} ;
static yy_state_type yy_last_accepting_state;
@ -662,7 +669,7 @@ static void countnl() {
g_lingo->_colnumber = strlen(p);
}
#line 666 "engines/director/lingo/lingo-lex.cpp"
#line 673 "engines/director/lingo/lingo-lex.cpp"
#define INITIAL 0
@ -850,7 +857,7 @@ YY_DECL
#line 60 "engines/director/lingo/lingo-lex.l"
#line 854 "engines/director/lingo/lingo-lex.cpp"
#line 861 "engines/director/lingo/lingo-lex.cpp"
if ( !(yy_init) )
{
@ -904,13 +911,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 >= 179 )
if ( yy_current_state >= 186 )
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] != 426 );
while ( yy_base[yy_current_state] != 446 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@ -1181,41 +1188,51 @@ YY_RULE_SETUP
case 38:
YY_RULE_SETUP
#line 157 "engines/director/lingo/lingo-lex.l"
{ count(); return tWITH; }
{ count(); return tSPRITE; }
YY_BREAK
case 39:
YY_RULE_SETUP
#line 158 "engines/director/lingo/lingo-lex.l"
{ count(); return tWHEN; }
{ count(); return tWITH; }
YY_BREAK
case 40:
YY_RULE_SETUP
#line 159 "engines/director/lingo/lingo-lex.l"
{ count(); return tWHILE; }
{ count(); return tWITHIN; }
YY_BREAK
case 41:
YY_RULE_SETUP
#line 161 "engines/director/lingo/lingo-lex.l"
{ count(); return tNEQ; }
#line 160 "engines/director/lingo/lingo-lex.l"
{ count(); return tWHEN; }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 162 "engines/director/lingo/lingo-lex.l"
{ count(); return tGE; }
#line 161 "engines/director/lingo/lingo-lex.l"
{ count(); return tWHILE; }
YY_BREAK
case 43:
YY_RULE_SETUP
#line 163 "engines/director/lingo/lingo-lex.l"
{ count(); return tLE; }
{ count(); return tNEQ; }
YY_BREAK
case 44:
YY_RULE_SETUP
#line 164 "engines/director/lingo/lingo-lex.l"
{ count(); return tCONCAT; }
{ count(); return tGE; }
YY_BREAK
case 45:
YY_RULE_SETUP
#line 165 "engines/director/lingo/lingo-lex.l"
{ count(); return tLE; }
YY_BREAK
case 46:
YY_RULE_SETUP
#line 166 "engines/director/lingo/lingo-lex.l"
{ count(); return tCONCAT; }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 168 "engines/director/lingo/lingo-lex.l"
{
count();
yylval.s = new Common::String(yytext);
@ -1230,43 +1247,43 @@ YY_RULE_SETUP
return ID;
}
YY_BREAK
case 46:
YY_RULE_SETUP
#line 179 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.f = atof(yytext); return FLOAT; }
YY_BREAK
case 47:
YY_RULE_SETUP
#line 180 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
YY_BREAK
case 48:
YY_RULE_SETUP
#line 181 "engines/director/lingo/lingo-lex.l"
{ count(); return *yytext; }
{ count(); yylval.f = atof(yytext); return FLOAT; }
YY_BREAK
case 49:
/* rule 49 can match eol */
YY_RULE_SETUP
#line 182 "engines/director/lingo/lingo-lex.l"
{ return '\n'; }
{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
YY_BREAK
case 50:
YY_RULE_SETUP
#line 183 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
{ count(); return *yytext; }
YY_BREAK
case 51:
/* rule 51 can match eol */
YY_RULE_SETUP
#line 184 "engines/director/lingo/lingo-lex.l"
{ return '\n'; }
YY_BREAK
case 52:
YY_RULE_SETUP
#line 185 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 186 "engines/director/lingo/lingo-lex.l"
YY_BREAK
case 54:
YY_RULE_SETUP
#line 188 "engines/director/lingo/lingo-lex.l"
ECHO;
YY_BREAK
#line 1270 "engines/director/lingo/lingo-lex.cpp"
#line 1287 "engines/director/lingo/lingo-lex.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@ -1559,7 +1576,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 >= 179 )
if ( yy_current_state >= 186 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@ -1587,11 +1604,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 >= 179 )
if ( yy_current_state >= 186 )
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 == 178);
yy_is_jam = (yy_current_state == 185);
return yy_is_jam ? 0 : yy_current_state;
}
@ -2266,7 +2283,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
#line 186 "engines/director/lingo/lingo-lex.l"
#line 188 "engines/director/lingo/lingo-lex.l"

View File

@ -154,7 +154,9 @@ whitespace [\t ]
}
(?i:then) { count(); return tTHEN; }
(?i:to) { count(); return tTO; }
(?i:sprite) { count(); return tSPRITE; }
(?i:with) { count(); return tWITH; }
(?i:within) { count(); return tWITHIN; }
(?i:when) { count(); return tWHEN; }
(?i:while) { count(); return tWHILE; }

View File

@ -204,6 +204,7 @@ public:
static void c_starts();
static void c_intersects();
static void c_within();
static void c_constpush();
static void c_fconstpush();

View File

@ -37,12 +37,12 @@ method mAtFrame
dontpassevent
set the castnum of sprite 14 to bcast
set the LocV of sprite 14 to (startV-stepV)
-- if sprite 14 intersects 10 and (startV-6) <= targetV then
if sprite 14 intersects 10 and (startV-6) <= targetV then
set the castnum of sprite 14 to f16
set the perframehook to false
me(hit)
exit
-- end if
end if
if startV < targetV or bcast>g17 then
set the perframehook to false
set the locV of sprite 14 to 340