From 82f78708e78254a6a5c80e1265724b75594e2389 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sat, 9 Jul 2016 13:09:25 +0200 Subject: DIRECTOR: Lingo: Fixed <> operator, added logical operations and && --- engines/director/director.cpp | 1 + engines/director/lingo/lingo-code.cpp | 50 +++ engines/director/lingo/lingo-gr.cpp | 680 ++++++++++++++++++---------------- engines/director/lingo/lingo-gr.h | 12 +- engines/director/lingo/lingo-gr.y | 6 +- engines/director/lingo/lingo-lex.cpp | 400 ++++++++++---------- engines/director/lingo/lingo-lex.l | 6 +- engines/director/lingo/lingo.h | 6 + 8 files changed, 658 insertions(+), 503 deletions(-) (limited to 'engines') diff --git a/engines/director/director.cpp b/engines/director/director.cpp index 040eaac7c1..2f77234dcd 100644 --- a/engines/director/director.cpp +++ b/engines/director/director.cpp @@ -129,6 +129,7 @@ Common::Error DirectorEngine::run() { end repeat\n\ set z = \"foo bar baz\"\n\ set z1 = z & \" meow\"\n\ + set z1 = z1 && \"woof\"\n\ put z\n\ put z1\n\ ", kMovieScript, 2); diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp index a532764b14..b2b96ade66 100644 --- a/engines/director/lingo/lingo-code.cpp +++ b/engines/director/lingo/lingo-code.cpp @@ -297,6 +297,56 @@ void Lingo::c_ampersand() { g_lingo->push(d1); } +void Lingo::c_concat() { + Datum d2 = g_lingo->pop(); + Datum d1 = g_lingo->pop(); + + if (d1.type != STRING || d2.type != STRING) { + error("Wrong operands for & operation: %d %d", d1.type, d2.type); + } + + *d1.u.s += " "; + *d1.u.s += *d2.u.s; + + delete d2.u.s; + + g_lingo->push(d1); +} + +void Lingo::c_and() { + Datum d2 = g_lingo->pop(); + Datum d1 = g_lingo->pop(); + + d1.toInt(); + d2.toInt(); + + d1.u.i = (d1.u.i && d2.u.i) ? 1 : 0; + + g_lingo->push(d1); +} + +void Lingo::c_or() { + Datum d2 = g_lingo->pop(); + Datum d1 = g_lingo->pop(); + + d1.toInt(); + d2.toInt(); + + d1.u.i = (d1.u.i || d2.u.i) ? 1 : 0; + + g_lingo->push(d1); +} + +void Lingo::c_not() { + Datum d = g_lingo->pop(); + + d.toInt(); + + d.u.i = ~d.u.i ? 1 : 0; + + g_lingo->push(d); +} + void Lingo::c_eq() { Datum d2 = g_lingo->pop(); Datum d1 = g_lingo->pop(); diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index da427d3e39..2077d5c9ba 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -107,7 +107,11 @@ tGT = 296, tLT = 297, tEQ = 298, - tNEQ = 299 + tNEQ = 299, + tAND = 300, + tOR = 301, + tNOT = 302, + tCONCAT = 303 }; #endif /* Tokens. */ @@ -153,6 +157,10 @@ #define tLT 297 #define tEQ 298 #define tNEQ 299 +#define tAND 300 +#define tOR 301 +#define tNOT 302 +#define tCONCAT 303 @@ -204,7 +212,7 @@ typedef union YYSTYPE int narg; /* number of arguments */ } /* Line 193 of yacc.c. */ -#line 208 "engines/director/lingo/lingo-gr.cpp" +#line 216 "engines/director/lingo/lingo-gr.cpp" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -217,7 +225,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 221 "engines/director/lingo/lingo-gr.cpp" +#line 229 "engines/director/lingo/lingo-gr.cpp" #ifdef short # undef short @@ -430,22 +438,22 @@ union yyalloc #endif /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 62 +#define YYFINAL 64 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 439 +#define YYLAST 540 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 58 +#define YYNTOKENS 62 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 33 /* YYNRULES -- Number of rules. */ -#define YYNRULES 100 +#define YYNRULES 104 /* YYNRULES -- Number of states. */ -#define YYNSTATES 211 +#define YYNSTATES 219 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 299 +#define YYMAXUTOK 303 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -454,12 +462,12 @@ union yyalloc static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 51, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 55, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 50, 56, 2, - 52, 53, 48, 46, 57, 47, 2, 49, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 54, 60, 2, + 56, 57, 52, 50, 61, 51, 2, 53, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 55, 45, 54, 2, 2, 2, 2, 2, 2, 2, + 59, 49, 58, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -482,7 +490,8 @@ static const yytype_uint8 yytranslate[] = 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48 }; #if YYDEBUG @@ -496,54 +505,55 @@ static const yytype_uint16 yyprhs[] = 149, 152, 154, 157, 159, 166, 168, 174, 176, 180, 184, 187, 191, 193, 195, 196, 197, 198, 201, 204, 206, 208, 210, 215, 220, 222, 224, 228, 232, 236, - 240, 244, 248, 252, 256, 260, 264, 267, 270, 274, - 277, 280, 283, 285, 287, 290, 292, 296, 299, 302, - 305, 308, 312, 315, 319, 322, 325, 327, 331, 334, - 338, 339, 348, 349, 351, 355, 360, 361, 365, 366, - 368 + 240, 244, 248, 252, 256, 260, 264, 268, 271, 275, + 279, 282, 285, 289, 292, 295, 298, 300, 302, 305, + 307, 311, 314, 317, 320, 323, 327, 330, 334, 337, + 340, 342, 346, 349, 353, 354, 363, 364, 366, 370, + 375, 376, 380, 381, 383 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 59, 0, -1, 59, 60, 61, -1, 61, -1, 51, - -1, -1, 85, -1, 80, -1, 89, -1, 62, -1, - 64, -1, 1, -1, 31, 79, 22, 10, -1, 33, - 10, 45, 79, -1, 33, 10, 35, 79, -1, 79, - -1, 80, -1, 63, -1, 65, -1, 72, 52, 71, - 53, 78, 77, 16, 32, -1, 73, 45, 79, 77, - 35, 79, 77, 78, 77, 16, 32, -1, 73, 45, - 79, 77, 13, 35, 79, 77, 78, 77, 16, 32, - -1, 74, 71, 34, 60, 78, 77, 16, 21, -1, - 74, 71, 34, 60, 78, 77, 14, 78, 77, 16, - 21, -1, 74, 71, 34, 60, 78, 77, 76, 67, - 77, 60, 16, 21, -1, 74, 71, 34, 76, 63, - 77, -1, 74, 71, 34, 76, 63, 77, 38, 76, - 63, 77, -1, 74, 71, 34, 76, 63, 77, 68, - 77, 66, 77, -1, -1, 38, 76, 63, -1, 67, - 70, -1, 70, -1, 68, 69, -1, 69, -1, 75, - 71, 34, 76, 64, 77, -1, 68, -1, 75, 71, - 34, 78, 77, -1, 79, -1, 79, 45, 79, -1, - 52, 71, 53, -1, 32, 37, -1, 32, 36, 10, - -1, 21, -1, 15, -1, -1, -1, -1, 78, 60, - -1, 78, 64, -1, 7, -1, 8, -1, 11, -1, - 9, 52, 90, 53, -1, 10, 52, 90, 53, -1, - 10, -1, 62, -1, 79, 46, 79, -1, 79, 47, - 79, -1, 79, 48, 79, -1, 79, 49, 79, -1, - 79, 54, 79, -1, 79, 55, 79, -1, 79, 44, - 79, -1, 79, 39, 79, -1, 79, 40, 79, -1, - 79, 56, 79, -1, 46, 79, -1, 47, 79, -1, - 52, 79, 53, -1, 25, 11, -1, 26, 10, -1, - 31, 79, -1, 82, -1, 17, -1, 19, 81, -1, - 10, -1, 81, 57, 10, -1, 20, 23, -1, 20, - 28, -1, 20, 30, -1, 20, 83, -1, 20, 83, - 84, -1, 20, 84, -1, 35, 18, 11, -1, 18, - 11, -1, 35, 11, -1, 11, -1, 29, 27, 11, - -1, 27, 11, -1, 35, 27, 11, -1, -1, 24, - 10, 86, 76, 87, 60, 88, 78, -1, -1, 10, - -1, 87, 57, 10, -1, 87, 60, 57, 10, -1, - -1, 10, 76, 90, -1, -1, 79, -1, 90, 57, - 79, -1 + 63, 0, -1, 63, 64, 65, -1, 65, -1, 55, + -1, -1, 89, -1, 84, -1, 93, -1, 66, -1, + 68, -1, 1, -1, 31, 83, 22, 10, -1, 33, + 10, 49, 83, -1, 33, 10, 35, 83, -1, 83, + -1, 84, -1, 67, -1, 69, -1, 76, 56, 75, + 57, 82, 81, 16, 32, -1, 77, 49, 83, 81, + 35, 83, 81, 82, 81, 16, 32, -1, 77, 49, + 83, 81, 13, 35, 83, 81, 82, 81, 16, 32, + -1, 78, 75, 34, 64, 82, 81, 16, 21, -1, + 78, 75, 34, 64, 82, 81, 14, 82, 81, 16, + 21, -1, 78, 75, 34, 64, 82, 81, 80, 71, + 81, 64, 16, 21, -1, 78, 75, 34, 80, 67, + 81, -1, 78, 75, 34, 80, 67, 81, 38, 80, + 67, 81, -1, 78, 75, 34, 80, 67, 81, 72, + 81, 70, 81, -1, -1, 38, 80, 67, -1, 71, + 74, -1, 74, -1, 72, 73, -1, 73, -1, 79, + 75, 34, 80, 68, 81, -1, 72, -1, 79, 75, + 34, 82, 81, -1, 83, -1, 83, 49, 83, -1, + 56, 75, 57, -1, 32, 37, -1, 32, 36, 10, + -1, 21, -1, 15, -1, -1, -1, -1, 82, 64, + -1, 82, 68, -1, 7, -1, 8, -1, 11, -1, + 9, 56, 94, 57, -1, 10, 56, 94, 57, -1, + 10, -1, 66, -1, 83, 50, 83, -1, 83, 51, + 83, -1, 83, 52, 83, -1, 83, 53, 83, -1, + 83, 58, 83, -1, 83, 59, 83, -1, 83, 44, + 83, -1, 83, 39, 83, -1, 83, 40, 83, -1, + 83, 45, 83, -1, 83, 46, 83, -1, 47, 83, + -1, 83, 60, 83, -1, 83, 48, 83, -1, 50, + 83, -1, 51, 83, -1, 56, 83, 57, -1, 25, + 11, -1, 26, 10, -1, 31, 83, -1, 86, -1, + 17, -1, 19, 85, -1, 10, -1, 85, 61, 10, + -1, 20, 23, -1, 20, 28, -1, 20, 30, -1, + 20, 87, -1, 20, 87, 88, -1, 20, 88, -1, + 35, 18, 11, -1, 18, 11, -1, 35, 11, -1, + 11, -1, 29, 27, 11, -1, 27, 11, -1, 35, + 27, 11, -1, -1, 24, 10, 90, 80, 91, 64, + 92, 82, -1, -1, 10, -1, 91, 61, 10, -1, + 91, 64, 61, 10, -1, -1, 10, 80, 94, -1, + -1, 83, -1, 94, 61, 83, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -555,11 +565,11 @@ static const yytype_uint16 yyrline[] = 240, 241, 244, 245, 248, 256, 257, 265, 266, 267, 269, 271, 277, 283, 290, 292, 294, 295, 296, 299, 304, 307, 310, 316, 324, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 343, - 344, 345, 346, 347, 349, 352, 353, 364, 365, 366, - 367, 372, 378, 385, 386, 387, 388, 391, 392, 393, - 421, 421, 428, 429, 430, 431, 433, 436, 444, 445, - 446 + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 347, 348, 349, 350, 351, 353, 356, + 357, 368, 369, 370, 371, 376, 382, 389, 390, 391, + 392, 395, 396, 397, 425, 425, 432, 433, 434, 435, + 437, 440, 448, 449, 450 }; #endif @@ -573,14 +583,15 @@ static const char *const yytname[] = "tNLELSIF", "tEND", "tEXIT", "tFRAME", "tGLOBAL", "tGO", "tIF", "tINTO", "tLOOP", "tMACRO", "tMCI", "tMCIWAIT", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO", "tWITH", - "tWHILE", "tNLELSE", "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ", "'='", - "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", - "'&'", "','", "$accept", "program", "nl", "programline", "asgn", - "stmtoneliner", "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt", - "elseifstmtoneliner", "elseifstmtoneliner1", "elseifstmt1", "cond", - "repeatwhile", "repeatwith", "if", "elseif", "begin", "end", "stmtlist", - "expr", "func", "globallist", "gotofunc", "gotoframe", "gotomovie", - "defn", "@1", "argdef", "argstore", "macro", "arglist", 0 + "tWHILE", "tNLELSE", "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ", "tAND", + "tOR", "tNOT", "tCONCAT", "'='", "'+'", "'-'", "'*'", "'/'", "'%'", + "'\\n'", "'('", "')'", "'>'", "'<'", "'&'", "','", "$accept", "program", + "nl", "programline", "asgn", "stmtoneliner", "stmt", "ifstmt", + "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner", + "elseifstmtoneliner1", "elseifstmt1", "cond", "repeatwhile", + "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "expr", "func", + "globallist", "gotofunc", "gotoframe", "gotomovie", "defn", "@1", + "argdef", "argstore", "macro", "arglist", 0 }; #endif @@ -593,25 +604,26 @@ static const yytype_uint16 yytoknum[] = 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 61, 43, 45, 42, 47, - 37, 10, 40, 41, 62, 60, 38, 44 + 295, 296, 297, 298, 299, 300, 301, 302, 303, 61, + 43, 45, 42, 47, 37, 10, 40, 41, 62, 60, + 38, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 58, 59, 59, 60, 61, 61, 61, 61, 61, - 61, 61, 62, 62, 62, 63, 63, 64, 64, 64, - 64, 64, 65, 65, 65, 65, 65, 65, 66, 66, - 67, 67, 68, 68, 69, 70, 70, 71, 71, 71, - 72, 73, 74, 75, 76, 77, 78, 78, 78, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, - 80, 80, 80, 80, 80, 81, 81, 82, 82, 82, - 82, 82, 82, 83, 83, 83, 83, 84, 84, 84, - 86, 85, 87, 87, 87, 87, 88, 89, 90, 90, - 90 + 0, 62, 63, 63, 64, 65, 65, 65, 65, 65, + 65, 65, 66, 66, 66, 67, 67, 68, 68, 68, + 68, 68, 69, 69, 69, 69, 69, 69, 70, 70, + 71, 71, 72, 72, 73, 74, 74, 75, 75, 75, + 76, 77, 78, 79, 80, 81, 82, 82, 82, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, + 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, + 87, 88, 88, 88, 90, 89, 91, 91, 91, 91, + 92, 93, 94, 94, 94 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -623,11 +635,11 @@ static const yytype_uint8 yyr2[] = 2, 1, 2, 1, 6, 1, 5, 1, 3, 3, 2, 3, 1, 1, 0, 0, 0, 2, 2, 1, 1, 1, 4, 4, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 2, 2, 3, 2, - 2, 2, 1, 1, 2, 1, 3, 2, 2, 2, - 2, 3, 2, 3, 2, 2, 1, 3, 2, 3, - 0, 8, 0, 1, 3, 4, 0, 3, 0, 1, - 3 + 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, + 2, 2, 3, 2, 2, 2, 1, 1, 2, 1, + 3, 2, 2, 2, 2, 3, 2, 3, 2, 2, + 1, 3, 2, 3, 0, 8, 0, 1, 3, 4, + 0, 3, 0, 1, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -635,75 +647,75 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 11, 49, 50, 0, 44, 51, 73, 0, 0, + 0, 11, 49, 50, 0, 44, 51, 77, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3, 55, 17, 10, 18, 0, 0, 0, 15, - 7, 72, 6, 8, 98, 98, 98, 75, 74, 86, - 0, 77, 0, 78, 0, 79, 0, 80, 82, 90, - 69, 70, 54, 0, 55, 71, 0, 40, 0, 66, - 67, 0, 1, 4, 0, 0, 0, 0, 0, 37, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 97, 0, 84, 88, 0, 85, 0, - 0, 0, 81, 44, 0, 0, 41, 0, 0, 68, - 2, 0, 45, 0, 0, 44, 0, 63, 64, 62, - 56, 57, 58, 59, 60, 61, 65, 52, 0, 53, - 76, 87, 83, 89, 92, 12, 14, 13, 46, 0, - 39, 46, 0, 38, 100, 93, 0, 45, 0, 0, - 45, 45, 16, 0, 96, 47, 48, 0, 0, 45, - 44, 25, 94, 0, 46, 0, 45, 46, 46, 0, - 0, 43, 44, 45, 33, 0, 95, 91, 19, 46, - 45, 45, 22, 45, 35, 31, 0, 0, 32, 28, - 0, 45, 0, 0, 30, 0, 0, 45, 44, 45, - 44, 0, 0, 0, 0, 44, 26, 0, 27, 0, - 0, 20, 23, 0, 45, 29, 45, 21, 24, 36, - 34 + 0, 0, 3, 55, 17, 10, 18, 0, 0, 0, + 15, 7, 76, 6, 8, 102, 102, 102, 79, 78, + 90, 0, 81, 0, 82, 0, 83, 0, 84, 86, + 94, 73, 74, 54, 0, 55, 75, 0, 40, 0, + 67, 70, 71, 0, 1, 4, 0, 0, 0, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 103, 0, 0, 101, 0, + 88, 92, 0, 89, 0, 0, 0, 85, 44, 0, + 0, 41, 0, 0, 72, 2, 0, 45, 0, 0, + 44, 0, 63, 64, 62, 65, 66, 69, 56, 57, + 58, 59, 60, 61, 68, 52, 0, 53, 80, 91, + 87, 93, 96, 12, 14, 13, 46, 0, 39, 46, + 0, 38, 104, 97, 0, 45, 0, 0, 45, 45, + 16, 0, 100, 47, 48, 0, 0, 45, 44, 25, + 98, 0, 46, 0, 45, 46, 46, 0, 0, 43, + 44, 45, 33, 0, 99, 95, 19, 46, 45, 45, + 22, 45, 35, 31, 0, 0, 32, 28, 0, 45, + 0, 0, 30, 0, 0, 45, 44, 45, 44, 0, + 0, 0, 0, 44, 26, 0, 27, 0, 0, 20, + 23, 0, 45, 29, 45, 21, 24, 36, 34 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 20, 145, 21, 54, 23, 146, 25, 189, 173, - 174, 164, 175, 68, 26, 27, 28, 165, 199, 129, - 137, 29, 142, 38, 31, 47, 48, 32, 93, 136, - 154, 33, 81 + -1, 21, 153, 22, 55, 24, 154, 26, 197, 181, + 182, 172, 183, 70, 27, 28, 29, 173, 207, 137, + 145, 30, 150, 39, 32, 48, 49, 33, 98, 144, + 162, 34, 86 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -150 +#define YYPACT_NINF -156 static const yytype_int16 yypact[] = { - 162, -150, -150, -150, -21, 383, -150, -150, 15, 329, - -150, 32, 42, 50, 84, -23, 52, 84, 84, 84, - 7, -150, 8, -150, -150, -150, 13, 18, 236, 370, - -150, -150, -150, -150, 84, 84, 84, -150, 25, -150, - 72, -150, 73, -150, 59, -150, 5, 12, -150, -150, - -150, -150, 36, 84, -150, 295, 80, -150, 11, 83, - 83, 339, -150, -150, 162, 236, 84, 236, 62, 357, - 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, - 370, -27, 4, 40, 90, -150, -150, 91, -150, 93, - 94, 79, -150, -150, 295, 98, -150, 84, 84, -150, - -150, 57, 370, 58, 321, 65, 84, 370, 370, 370, - 182, 182, 83, 83, 370, 370, 370, -150, 84, -150, - -150, -150, -150, -150, 110, -150, 370, 370, -150, -1, - -150, -150, 285, 370, 370, -150, -29, 208, 89, 84, - 208, -150, -150, 115, 69, -150, -150, 113, 84, 370, - 34, -5, -150, 122, -150, 101, 370, -150, -150, 120, - 119, -150, -150, 119, -150, 236, -150, 208, -150, -150, - 208, 208, -150, 119, 119, -150, 236, 285, -150, 106, - 114, 208, 131, 134, -150, 65, 117, -150, -150, -150, - -150, 136, 123, 133, 140, -6, -150, 285, -150, 254, - 125, -150, -150, 139, 208, -150, -150, -150, -150, -150, - -150 + 170, -156, -156, -156, -48, 441, -156, -156, 36, 108, + -156, 39, 43, 45, 326, 5, 50, 326, 326, 326, + 326, 4, -156, 9, -156, -156, -156, 11, 12, 333, + 424, -156, -156, -156, -156, 326, 326, 326, -156, 26, + -156, 51, -156, 54, -156, 63, -156, 16, 18, -156, + -156, -156, -156, 37, 326, -156, 346, 82, -156, -21, + 480, 480, 480, 385, -156, -156, 170, 333, 326, 333, + 61, 407, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 424, -25, -17, 40, 87, + -156, -156, 91, -156, 92, 96, 71, -156, -156, 346, + 100, -156, 326, 326, -156, -156, 55, 424, 57, 363, + 56, 326, 424, 424, 424, 424, 424, 424, 463, 463, + 480, 480, 424, 424, 424, -156, 326, -156, -156, -156, + -156, -156, 106, -156, 424, 424, -156, -2, -156, -156, + 299, 424, 424, -156, -31, 220, 83, 326, 220, -156, + -156, 107, 60, -156, -156, 111, 326, 424, 1, -3, + -156, 113, -156, 101, 424, -156, -156, 103, 119, -156, + -156, 119, -156, 333, -156, 220, -156, -156, 220, 220, + -156, 119, 119, -156, 333, 299, -156, 104, 105, 220, + 125, 128, -156, 56, 116, -156, -156, -156, -156, 129, + 115, 130, 136, -5, -156, 299, -156, 270, 121, -156, + -156, 134, 220, -156, -156, -156, -156, -156, -156 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -150, -150, -18, 100, 6, -128, 0, -150, -150, -150, - 14, -136, 2, -62, -150, -150, -150, -149, -4, -28, - -114, 1, 21, -150, -150, -150, 121, -150, -150, -150, - -150, -150, 16 + -156, -156, -19, 90, 6, -117, 0, -156, -156, -156, + 3, -153, -24, -64, -156, -156, -156, -155, -4, -49, + -114, 2, 7, -156, -156, -156, 112, -156, -156, -156, + -156, -156, 21 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -713,98 +725,120 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -55 static const yytype_int16 yytable[] = { - 24, 36, 64, 101, 141, 103, 22, 62, -9, -46, - 161, 176, 138, 56, 57, 55, 88, 140, 59, 60, - 61, 30, 63, 89, 176, 37, 117, 178, 143, 69, - 118, 34, 90, 162, 139, 80, 80, 80, 178, 42, - 167, 44, 49, 170, 171, -46, 97, 91, 158, 187, - 159, 82, 83, 50, 94, 181, 98, 119, 63, -9, - 51, 118, 58, 66, 24, 65, 69, 102, 104, 205, - 22, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 204, 84, 85, 86, 30, 87, 131, 35, 124, - 96, 2, 3, 4, 52, 6, 105, 118, 126, 127, - 120, 132, 121, 180, 122, 123, 90, 133, 125, 147, - 128, 130, 150, 151, 186, 53, 63, 16, 144, 134, - 135, 157, 70, 71, 148, 152, 153, 72, 169, 155, - 17, 18, 166, 168, 161, 179, 19, 77, 78, 79, - 149, 172, 182, 183, 188, 185, 160, 192, 190, 156, - 193, 195, 200, 191, 202, 201, 203, 207, 177, 196, - 208, 198, -5, 1, 100, 163, 69, 194, 92, 2, - 3, 4, 5, 6, 0, 184, 209, 69, 210, 7, - 0, 8, 9, 10, 197, 0, 11, 12, 13, 0, - 0, 0, 0, 14, 15, 16, 0, 0, 0, 206, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, - 0, 0, 0, -5, 19, 2, 3, 4, 52, 6, - 0, 70, 71, 0, 0, 7, 72, 8, 9, 10, - 75, 76, 0, 12, 13, 0, 77, 78, 79, 14, - 15, 16, 0, 2, 3, 4, 52, 6, 0, 0, - 0, 0, 0, 0, 17, 18, 0, 0, 0, 63, - 19, 2, 3, 4, 52, 6, 0, 53, 0, 16, - 0, 7, 0, 8, 9, 10, 0, 0, 0, 12, - 13, 0, 17, 18, 0, 14, 15, 16, 67, 0, - 0, 0, 2, 3, 4, 52, 6, 0, 0, 0, - 17, 18, 7, 0, 8, 9, 19, 0, 0, 0, - 12, 13, 0, 0, 0, 0, 14, 95, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 17, 18, 0, 70, 71, 0, 19, 0, 72, - 39, 73, 74, 75, 76, 0, 0, 40, 0, 77, - 78, 79, 41, 0, 0, 0, 42, 43, 44, 45, - 70, 71, 0, 0, 46, 72, 106, 73, 74, 75, - 76, 0, 0, 0, 99, 77, 78, 79, 70, 71, - 0, 0, 0, 72, 0, 73, 74, 75, 76, 0, - 0, 0, 99, 77, 78, 79, 70, 71, 0, 0, - 0, 72, 106, 73, 74, 75, 76, 0, 0, 70, - 71, 77, 78, 79, 72, 0, 73, 74, 75, 76, - 0, 0, -54, -54, 77, 78, 79, -54, 0, 0, - 0, -54, -54, 0, 0, 35, 0, -54, -54, -54 + 25, 37, 66, 106, 64, 108, 23, 31, 35, -9, + -46, 146, 169, 184, 102, 166, 56, 167, 186, 60, + 61, 62, 63, 149, 65, 148, 184, 93, 103, 186, + 151, 71, 125, 147, 94, 170, 126, 85, 85, 85, + 127, 57, 58, 95, 126, 43, 38, 45, 175, 50, + -46, 178, 179, 96, 51, 52, 99, 87, 88, 65, + 59, 68, 90, 189, -9, 91, 25, 67, 195, 71, + 107, 109, 23, 31, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 89, 213, 212, + 92, 139, 101, 36, 132, 110, 155, 128, 95, 158, + 159, 126, 129, 130, 134, 135, 140, 131, 165, 188, + 133, 65, 136, 141, 138, 177, 143, 160, 156, 40, + 194, 161, 187, 174, 180, 152, 41, 163, 142, 190, + 191, 42, 193, 176, 169, 43, 44, 45, 46, 198, + 199, 200, 196, 47, 201, 208, 204, 209, 206, 157, + 203, 210, 211, 215, 168, 216, 105, 192, 164, 0, + 97, 0, 171, 217, 0, 218, 185, 0, 0, 0, + -5, 1, 0, 0, 202, 71, 0, 2, 3, 4, + 5, 6, 0, 0, 0, 0, 71, 7, 0, 8, + 9, 10, 205, 0, 11, 12, 13, 0, 0, 0, + 0, 14, 15, 16, 0, 0, 0, 214, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 18, 19, 0, 0, 0, -5, 20, 2, 3, 4, + 53, 6, 0, 0, 0, 0, 0, 7, 0, 8, + 9, 10, 0, 0, 0, 12, 13, 0, 0, 0, + 0, 14, 15, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, + 18, 19, 0, 0, 0, 65, 20, 2, 3, 4, + 53, 6, 0, 0, 0, 0, 0, 7, 0, 8, + 9, 10, 0, 0, 0, 12, 13, 0, 0, 0, + 0, 14, 15, 16, 0, 0, 2, 3, 4, 53, + 6, 0, 0, 0, 0, 0, 7, 17, 8, 9, + 18, 19, 0, 0, 12, 13, 20, 0, 0, 0, + 14, 0, 16, 2, 3, 4, 53, 6, 0, 0, + 2, 3, 4, 53, 6, 0, 17, 0, 0, 18, + 19, 0, 0, 0, 0, 20, 0, 54, 0, 16, + 0, 0, 0, 0, 54, 0, 16, 0, 100, 0, + 0, 0, 0, 17, 0, 0, 18, 19, 0, 0, + 17, 0, 20, 18, 19, 72, 73, 0, 0, 69, + 74, 75, 76, 0, 77, 0, 78, 79, 80, 81, + 0, 0, 72, 73, 82, 83, 84, 74, 75, 76, + 0, 77, 111, 78, 79, 80, 81, 0, 0, 0, + 104, 82, 83, 84, 72, 73, 0, 0, 0, 74, + 75, 76, 0, 77, 0, 78, 79, 80, 81, 0, + 0, 0, 104, 82, 83, 84, 72, 73, 0, 0, + 0, 74, 75, 76, 0, 77, 111, 78, 79, 80, + 81, 0, 0, 72, 73, 82, 83, 84, 74, 75, + 76, 0, 77, 0, 78, 79, 80, 81, 0, 0, + -54, -54, 82, 83, 84, -54, -54, -54, 0, -54, + 0, 0, 0, -54, -54, 0, 0, 36, 0, -54, + -54, -54, 72, 73, 0, 0, 0, 74, 75, 76, + 0, 77, 0, 0, 0, 80, 81, 0, 0, 72, + 73, 82, 83, 84, 74, 75, 76, 0, 77, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, + 84 }; static const yytype_int16 yycheck[] = { - 0, 5, 20, 65, 132, 67, 0, 0, 0, 15, - 15, 160, 13, 36, 37, 14, 11, 131, 17, 18, - 19, 0, 51, 18, 173, 10, 53, 163, 57, 28, - 57, 52, 27, 38, 35, 34, 35, 36, 174, 27, - 154, 29, 10, 157, 158, 51, 35, 35, 14, 177, - 16, 35, 36, 11, 53, 169, 45, 53, 51, 51, - 10, 57, 10, 45, 64, 52, 65, 66, 67, 197, - 64, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 195, 57, 11, 11, 64, 27, 105, 52, 93, - 10, 7, 8, 9, 10, 11, 34, 57, 97, 98, - 10, 105, 11, 165, 11, 11, 27, 106, 10, 137, - 53, 53, 140, 141, 176, 31, 51, 33, 136, 118, - 10, 149, 39, 40, 35, 10, 57, 44, 156, 16, - 46, 47, 10, 32, 15, 163, 52, 54, 55, 56, - 139, 21, 170, 171, 38, 173, 150, 16, 34, 148, - 16, 34, 16, 181, 21, 32, 16, 32, 162, 187, - 21, 189, 0, 1, 64, 151, 165, 185, 47, 7, - 8, 9, 10, 11, -1, 173, 204, 176, 206, 17, - -1, 19, 20, 21, 188, -1, 24, 25, 26, -1, - -1, -1, -1, 31, 32, 33, -1, -1, -1, 199, - -1, -1, -1, -1, -1, -1, -1, -1, 46, 47, - -1, -1, -1, 51, 52, 7, 8, 9, 10, 11, - -1, 39, 40, -1, -1, 17, 44, 19, 20, 21, - 48, 49, -1, 25, 26, -1, 54, 55, 56, 31, - 32, 33, -1, 7, 8, 9, 10, 11, -1, -1, - -1, -1, -1, -1, 46, 47, -1, -1, -1, 51, - 52, 7, 8, 9, 10, 11, -1, 31, -1, 33, - -1, 17, -1, 19, 20, 21, -1, -1, -1, 25, - 26, -1, 46, 47, -1, 31, 32, 33, 52, -1, - -1, -1, 7, 8, 9, 10, 11, -1, -1, -1, - 46, 47, 17, -1, 19, 20, 52, -1, -1, -1, - 25, 26, -1, -1, -1, -1, 31, 22, 33, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 46, 47, -1, 39, 40, -1, 52, -1, 44, - 11, 46, 47, 48, 49, -1, -1, 18, -1, 54, - 55, 56, 23, -1, -1, -1, 27, 28, 29, 30, - 39, 40, -1, -1, 35, 44, 45, 46, 47, 48, - 49, -1, -1, -1, 53, 54, 55, 56, 39, 40, - -1, -1, -1, 44, -1, 46, 47, 48, 49, -1, - -1, -1, 53, 54, 55, 56, 39, 40, -1, -1, - -1, 44, 45, 46, 47, 48, 49, -1, -1, 39, - 40, 54, 55, 56, 44, -1, 46, 47, 48, 49, - -1, -1, 39, 40, 54, 55, 56, 44, -1, -1, - -1, 48, 49, -1, -1, 52, -1, 54, 55, 56 + 0, 5, 21, 67, 0, 69, 0, 0, 56, 0, + 15, 13, 15, 168, 35, 14, 14, 16, 171, 17, + 18, 19, 20, 140, 55, 139, 181, 11, 49, 182, + 61, 29, 57, 35, 18, 38, 61, 35, 36, 37, + 57, 36, 37, 27, 61, 27, 10, 29, 162, 10, + 55, 165, 166, 35, 11, 10, 54, 36, 37, 55, + 10, 49, 11, 177, 55, 11, 66, 56, 185, 67, + 68, 69, 66, 66, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 61, 205, 203, + 27, 110, 10, 56, 98, 34, 145, 10, 27, 148, + 149, 61, 11, 11, 102, 103, 110, 11, 157, 173, + 10, 55, 57, 111, 57, 164, 10, 10, 35, 11, + 184, 61, 171, 10, 21, 144, 18, 16, 126, 178, + 179, 23, 181, 32, 15, 27, 28, 29, 30, 34, + 189, 16, 38, 35, 16, 16, 195, 32, 197, 147, + 34, 21, 16, 32, 158, 21, 66, 181, 156, -1, + 48, -1, 159, 212, -1, 214, 170, -1, -1, -1, + 0, 1, -1, -1, 193, 173, -1, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 184, 17, -1, 19, + 20, 21, 196, -1, 24, 25, 26, -1, -1, -1, + -1, 31, 32, 33, -1, -1, -1, 207, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 47, -1, -1, + 50, 51, -1, -1, -1, 55, 56, 7, 8, 9, + 10, 11, -1, -1, -1, -1, -1, 17, -1, 19, + 20, 21, -1, -1, -1, 25, 26, -1, -1, -1, + -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 47, -1, -1, + 50, 51, -1, -1, -1, 55, 56, 7, 8, 9, + 10, 11, -1, -1, -1, -1, -1, 17, -1, 19, + 20, 21, -1, -1, -1, 25, 26, -1, -1, -1, + -1, 31, 32, 33, -1, -1, 7, 8, 9, 10, + 11, -1, -1, -1, -1, -1, 17, 47, 19, 20, + 50, 51, -1, -1, 25, 26, 56, -1, -1, -1, + 31, -1, 33, 7, 8, 9, 10, 11, -1, -1, + 7, 8, 9, 10, 11, -1, 47, -1, -1, 50, + 51, -1, -1, -1, -1, 56, -1, 31, -1, 33, + -1, -1, -1, -1, 31, -1, 33, -1, 22, -1, + -1, -1, -1, 47, -1, -1, 50, 51, -1, -1, + 47, -1, 56, 50, 51, 39, 40, -1, -1, 56, + 44, 45, 46, -1, 48, -1, 50, 51, 52, 53, + -1, -1, 39, 40, 58, 59, 60, 44, 45, 46, + -1, 48, 49, 50, 51, 52, 53, -1, -1, -1, + 57, 58, 59, 60, 39, 40, -1, -1, -1, 44, + 45, 46, -1, 48, -1, 50, 51, 52, 53, -1, + -1, -1, 57, 58, 59, 60, 39, 40, -1, -1, + -1, 44, 45, 46, -1, 48, 49, 50, 51, 52, + 53, -1, -1, 39, 40, 58, 59, 60, 44, 45, + 46, -1, 48, -1, 50, 51, 52, 53, -1, -1, + 39, 40, 58, 59, 60, 44, 45, 46, -1, 48, + -1, -1, -1, 52, 53, -1, -1, 56, -1, 58, + 59, 60, 39, 40, -1, -1, -1, 44, 45, 46, + -1, 48, -1, -1, -1, 52, 53, -1, -1, 39, + 40, 58, 59, 60, 44, 45, 46, -1, 48, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, + 60 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -812,27 +846,27 @@ static const yytype_int16 yycheck[] = static const yytype_uint8 yystos[] = { 0, 1, 7, 8, 9, 10, 11, 17, 19, 20, - 21, 24, 25, 26, 31, 32, 33, 46, 47, 52, - 59, 61, 62, 63, 64, 65, 72, 73, 74, 79, - 80, 82, 85, 89, 52, 52, 76, 10, 81, 11, - 18, 23, 27, 28, 29, 30, 35, 83, 84, 10, - 11, 10, 10, 31, 62, 79, 36, 37, 10, 79, - 79, 79, 0, 51, 60, 52, 45, 52, 71, 79, - 39, 40, 44, 46, 47, 48, 49, 54, 55, 56, - 79, 90, 90, 90, 57, 11, 11, 27, 11, 18, - 27, 35, 84, 86, 79, 22, 10, 35, 45, 53, - 61, 71, 79, 71, 79, 34, 45, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 53, 57, 53, - 10, 11, 11, 11, 76, 10, 79, 79, 53, 77, - 53, 60, 76, 79, 79, 10, 87, 78, 13, 35, - 78, 63, 80, 57, 60, 60, 64, 77, 35, 79, - 77, 77, 10, 57, 88, 16, 79, 77, 14, 16, - 76, 15, 38, 68, 69, 75, 10, 78, 32, 77, - 78, 78, 21, 67, 68, 70, 75, 76, 69, 77, - 71, 78, 77, 77, 70, 77, 71, 63, 38, 66, - 34, 77, 16, 16, 60, 34, 77, 76, 77, 76, - 16, 32, 21, 16, 78, 63, 64, 32, 21, 77, - 77 + 21, 24, 25, 26, 31, 32, 33, 47, 50, 51, + 56, 63, 65, 66, 67, 68, 69, 76, 77, 78, + 83, 84, 86, 89, 93, 56, 56, 80, 10, 85, + 11, 18, 23, 27, 28, 29, 30, 35, 87, 88, + 10, 11, 10, 10, 31, 66, 83, 36, 37, 10, + 83, 83, 83, 83, 0, 55, 64, 56, 49, 56, + 75, 83, 39, 40, 44, 45, 46, 48, 50, 51, + 52, 53, 58, 59, 60, 83, 94, 94, 94, 61, + 11, 11, 27, 11, 18, 27, 35, 88, 90, 83, + 22, 10, 35, 49, 57, 65, 75, 83, 75, 83, + 34, 49, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 57, 61, 57, 10, 11, + 11, 11, 80, 10, 83, 83, 57, 81, 57, 64, + 80, 83, 83, 10, 91, 82, 13, 35, 82, 67, + 84, 61, 64, 64, 68, 81, 35, 83, 81, 81, + 10, 61, 92, 16, 83, 81, 14, 16, 80, 15, + 38, 72, 73, 79, 10, 82, 32, 81, 82, 82, + 21, 71, 72, 74, 79, 80, 73, 81, 75, 82, + 81, 81, 74, 81, 75, 67, 38, 70, 34, 81, + 16, 16, 64, 34, 81, 80, 81, 80, 16, 32, + 21, 16, 82, 67, 68, 32, 21, 81, 81 }; #define yyerrok (yyerrstatus = 0) @@ -2007,72 +2041,92 @@ yyreduce: case 65: #line 337 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_ampersand); ;} + { g_lingo->code1(g_lingo->c_and); ;} break; case 66: #line 338 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (2)].code); ;} + { g_lingo->code1(g_lingo->c_or); ;} break; case 67: #line 339 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;} + { g_lingo->code1(g_lingo->c_not); ;} break; case 68: #line 340 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (3)].code); ;} + { g_lingo->code1(g_lingo->c_ampersand); ;} break; case 69: -#line 343 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} +#line 341 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_concat); ;} break; case 70: -#line 344 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} +#line 342 "engines/director/lingo/lingo-gr.y" + { (yyval.code) = (yyvsp[(2) - (2)].code); ;} break; case 71: -#line 345 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_printtop); ;} +#line 343 "engines/director/lingo/lingo-gr.y" + { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;} + break; + + case 72: +#line 344 "engines/director/lingo/lingo-gr.y" + { (yyval.code) = (yyvsp[(2) - (3)].code); ;} break; case 73: #line 347 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} + break; + + case 74: +#line 348 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} + break; + + case 75: +#line 349 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_printtop); ;} + break; + + case 77: +#line 351 "engines/director/lingo/lingo-gr.y" { g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); ;} break; - case 75: -#line 352 "engines/director/lingo/lingo-gr.y" + case 79: +#line 356 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;} break; - case 76: -#line 353 "engines/director/lingo/lingo-gr.y" + case 80: +#line 357 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;} break; - case 77: -#line 364 "engines/director/lingo/lingo-gr.y" + case 81: +#line 368 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_gotoloop); ;} break; - case 78: -#line 365 "engines/director/lingo/lingo-gr.y" + case 82: +#line 369 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_gotonext); ;} break; - case 79: -#line 366 "engines/director/lingo/lingo-gr.y" + case 83: +#line 370 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_gotoprevious); ;} break; - case 80: -#line 367 "engines/director/lingo/lingo-gr.y" + case 84: +#line 371 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); @@ -2080,8 +2134,8 @@ yyreduce: delete (yyvsp[(2) - (2)].s); ;} break; - case 81: -#line 372 "engines/director/lingo/lingo-gr.y" + case 85: +#line 376 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str()); @@ -2090,8 +2144,8 @@ yyreduce: delete (yyvsp[(3) - (3)].s); ;} break; - case 82: -#line 378 "engines/director/lingo/lingo-gr.y" + case 86: +#line 382 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString(""); @@ -2099,48 +2153,48 @@ yyreduce: delete (yyvsp[(2) - (2)].s); ;} break; - case 83: -#line 385 "engines/director/lingo/lingo-gr.y" + case 87: +#line 389 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; - case 84: -#line 386 "engines/director/lingo/lingo-gr.y" + case 88: +#line 390 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(2) - (2)].s); ;} break; - case 85: -#line 387 "engines/director/lingo/lingo-gr.y" + case 89: +#line 391 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(2) - (2)].s); ;} break; - case 86: -#line 388 "engines/director/lingo/lingo-gr.y" + case 90: +#line 392 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(1) - (1)].s); ;} break; - case 87: -#line 391 "engines/director/lingo/lingo-gr.y" + case 91: +#line 395 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; - case 88: -#line 392 "engines/director/lingo/lingo-gr.y" + case 92: +#line 396 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(2) - (2)].s); ;} break; - case 89: -#line 393 "engines/director/lingo/lingo-gr.y" + case 93: +#line 397 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; - case 90: -#line 421 "engines/director/lingo/lingo-gr.y" + case 94: +#line 425 "engines/director/lingo/lingo-gr.y" { g_lingo->_indef = true; ;} break; - case 91: -#line 422 "engines/director/lingo/lingo-gr.y" + case 95: +#line 426 "engines/director/lingo/lingo-gr.y" { g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); @@ -2148,33 +2202,33 @@ yyreduce: g_lingo->_indef = false; ;} break; - case 92: -#line 428 "engines/director/lingo/lingo-gr.y" + case 96: +#line 432 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = 0; ;} break; - case 93: -#line 429 "engines/director/lingo/lingo-gr.y" + case 97: +#line 433 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;} break; - case 94: -#line 430 "engines/director/lingo/lingo-gr.y" + case 98: +#line 434 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; - case 95: -#line 431 "engines/director/lingo/lingo-gr.y" + case 99: +#line 435 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;} break; - case 96: -#line 433 "engines/director/lingo/lingo-gr.y" + case 100: +#line 437 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArgStore(); ;} break; - case 97: -#line 436 "engines/director/lingo/lingo-gr.y" + case 101: +#line 440 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_call); g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str()); @@ -2183,24 +2237,24 @@ yyreduce: g_lingo->code1(numpar); ;} break; - case 98: -#line 444 "engines/director/lingo/lingo-gr.y" + case 102: +#line 448 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = 0; ;} break; - case 99: -#line 445 "engines/director/lingo/lingo-gr.y" + case 103: +#line 449 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = 1; ;} break; - case 100: -#line 446 "engines/director/lingo/lingo-gr.y" + case 104: +#line 450 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; /* Line 1267 of yacc.c. */ -#line 2204 "engines/director/lingo/lingo-gr.cpp" +#line 2258 "engines/director/lingo/lingo-gr.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2414,6 +2468,6 @@ yyreturn: } -#line 449 "engines/director/lingo/lingo-gr.y" +#line 453 "engines/director/lingo/lingo-gr.y" diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h index 62462ae2d5..a22d489e6e 100644 --- a/engines/director/lingo/lingo-gr.h +++ b/engines/director/lingo/lingo-gr.h @@ -80,7 +80,11 @@ tGT = 296, tLT = 297, tEQ = 298, - tNEQ = 299 + tNEQ = 299, + tAND = 300, + tOR = 301, + tNOT = 302, + tCONCAT = 303 }; #endif /* Tokens. */ @@ -126,6 +130,10 @@ #define tLT 297 #define tEQ 298 #define tNEQ 299 +#define tAND 300 +#define tOR 301 +#define tNOT 302 +#define tCONCAT 303 @@ -141,7 +149,7 @@ typedef union YYSTYPE int narg; /* number of arguments */ } /* Line 1529 of yacc.c. */ -#line 145 "engines/director/lingo/lingo-gr.hpp" +#line 153 "engines/director/lingo/lingo-gr.hpp" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index 002b4546f6..155b615bfa 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -77,7 +77,7 @@ using namespace Director; %token tDOWN tELSE tNLELSIF tEND tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO %token tMCI tMCIWAIT tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO %token tWITH tWHILE tNLELSE -%token tGE tLE tGT tLT tEQ tNEQ +%token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT tCONCAT %type asgn begin elseif elsestmtoneliner end expr if repeatwhile repeatwith stmtlist %type gotoframe gotomovie @@ -334,7 +334,11 @@ expr: INT { | expr tNEQ expr { g_lingo->code1(g_lingo->c_neq); } | expr tGE expr { g_lingo->code1(g_lingo->c_ge); } | expr tLE expr { g_lingo->code1(g_lingo->c_le); } + | expr tAND expr { g_lingo->code1(g_lingo->c_and); } + | expr tOR expr { g_lingo->code1(g_lingo->c_or); } + | tNOT expr %prec UNARY { g_lingo->code1(g_lingo->c_not); } | expr '&' expr { g_lingo->code1(g_lingo->c_ampersand); } + | expr tCONCAT expr { g_lingo->code1(g_lingo->c_concat); } | '+' expr %prec UNARY { $$ = $2; } | '-' expr %prec UNARY { $$ = $2; g_lingo->code1(g_lingo->c_negate); } | '(' expr ')' { $$ = $2; } diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp index 76a11bea56..0a0af1173c 100644 --- a/engines/director/lingo/lingo-lex.cpp +++ b/engines/director/lingo/lingo-lex.cpp @@ -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 40 -#define YY_END_OF_BUFFER 41 +#define YY_NUM_RULES 44 +#define YY_END_OF_BUFFER 45 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -373,23 +373,23 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[132] = +static yyconst flex_int16_t yy_accept[139] = { 0, - 0, 0, 41, 39, 3, 37, 37, 39, 39, 39, - 36, 36, 35, 36, 36, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 2, 2, 3, 37, 0, 0, 37, 30, 0, 38, - 1, 34, 35, 32, 31, 33, 33, 33, 33, 33, - 33, 33, 13, 5, 33, 33, 33, 33, 33, 33, - 21, 33, 33, 33, 33, 33, 27, 33, 33, 2, - 2, 0, 1, 34, 33, 33, 9, 33, 33, 33, - 33, 33, 33, 17, 33, 33, 33, 23, 33, 25, - 33, 33, 33, 0, 4, 8, 10, 33, 33, 14, - - 15, 33, 33, 33, 20, 33, 33, 26, 33, 28, - 0, 11, 33, 16, 33, 19, 33, 33, 29, 7, - 12, 33, 33, 24, 0, 18, 33, 0, 22, 6, - 0 + 0, 0, 45, 43, 3, 41, 41, 43, 43, 40, + 40, 40, 39, 40, 40, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 2, 2, 3, 41, 0, 0, 41, 0, 42, + 36, 1, 38, 39, 35, 33, 34, 37, 37, 37, + 37, 37, 37, 37, 37, 14, 6, 37, 37, 37, + 37, 37, 37, 37, 23, 24, 37, 37, 37, 37, + 37, 30, 37, 37, 2, 2, 0, 1, 38, 4, + 37, 37, 10, 37, 37, 37, 37, 37, 37, 18, + 37, 37, 22, 37, 26, 37, 28, 37, 37, 37, + + 0, 5, 9, 11, 37, 37, 15, 16, 37, 37, + 37, 21, 37, 37, 29, 37, 31, 0, 12, 37, + 17, 37, 20, 37, 37, 32, 8, 13, 37, 37, + 27, 0, 19, 37, 0, 25, 7, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -397,13 +397,13 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 6, 7, 1, 1, 8, 8, 1, 8, - 8, 8, 8, 8, 9, 10, 8, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 8, 1, 12, + 1, 5, 1, 6, 1, 1, 7, 8, 1, 7, + 7, 7, 7, 7, 9, 10, 7, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 7, 1, 12, 13, 14, 1, 1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 24, 25, 26, 27, 28, 29, 24, 30, 31, 32, 33, 34, 35, 36, 24, 24, - 1, 1, 1, 8, 24, 1, 37, 38, 39, 40, + 1, 1, 1, 7, 24, 1, 37, 38, 39, 40, 41, 42, 43, 44, 45, 24, 24, 46, 47, 48, 49, 50, 24, 51, 52, 53, 54, 55, 56, 57, @@ -434,90 +434,95 @@ static yyconst flex_int32_t yy_meta[58] = 4, 4, 4, 4, 4, 4, 4 } ; -static yyconst flex_int16_t yy_base[135] = +static yyconst flex_int16_t yy_base[142] = { 0, - 0, 56, 212, 320, 60, 64, 68, 72, 175, 180, - 320, 174, 49, 169, 167, 0, 50, 54, 50, 57, - 66, 55, 79, 68, 68, 82, 72, 76, 97, 98, - 127, 135, 145, 94, 149, 153, 157, 320, 167, 320, - 0, 158, 112, 320, 320, 0, 49, 93, 116, 112, - 129, 135, 0, 0, 132, 137, 150, 145, 136, 135, - 0, 154, 143, 147, 145, 159, 0, 156, 149, 201, - 205, 168, 0, 116, 172, 192, 0, 181, 189, 200, - 190, 190, 191, 187, 200, 193, 192, 0, 208, 0, - 202, 205, 209, 204, 0, 0, 0, 213, 222, 0, - - 0, 213, 229, 229, 0, 229, 240, 0, 238, 0, - 239, 0, 235, 0, 238, 0, 235, 232, 0, 87, - 0, 233, 234, 0, 266, 0, 238, 252, 0, 320, - 320, 311, 122, 315 + 0, 56, 149, 335, 60, 64, 68, 72, 138, 335, + 131, 128, 49, 65, 121, 53, 0, 53, 57, 53, + 60, 69, 58, 82, 94, 78, 61, 97, 99, 102, + 103, 150, 154, 158, 124, 162, 131, 166, 126, 335, + 335, 0, 89, 131, 335, 335, 335, 0, 105, 138, + 143, 157, 153, 162, 151, 0, 0, 148, 153, 165, + 160, 151, 150, 155, 0, 0, 169, 158, 162, 160, + 174, 0, 173, 171, 217, 223, 184, 0, 84, 0, + 187, 197, 0, 191, 203, 201, 203, 203, 203, 199, + 213, 208, 0, 207, 0, 218, 0, 215, 218, 223, + + 216, 0, 0, 0, 229, 234, 0, 0, 223, 241, + 238, 0, 237, 250, 0, 247, 0, 250, 0, 248, + 0, 251, 0, 248, 245, 0, 85, 0, 248, 248, + 0, 281, 0, 253, 265, 0, 335, 335, 326, 88, + 330 } ; -static yyconst flex_int16_t yy_def[135] = +static yyconst flex_int16_t yy_def[142] = { 0, - 131, 1, 131, 131, 131, 131, 131, 131, 131, 132, - 131, 131, 131, 131, 131, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 131, 131, 131, 131, 131, 131, 131, 131, 132, 131, - 134, 131, 131, 131, 131, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 131, - 131, 131, 134, 131, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 131, 133, 133, 133, 133, 133, 133, - - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 131, 133, 133, 133, 133, 133, 133, 133, 133, 131, - 133, 133, 133, 133, 131, 133, 133, 131, 133, 131, - 0, 131, 131, 131 + 138, 1, 138, 138, 138, 138, 138, 138, 139, 138, + 138, 138, 138, 138, 138, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 138, 138, 138, 138, 138, 138, 138, 139, 138, + 138, 141, 138, 138, 138, 138, 138, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 138, 138, 138, 141, 138, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + + 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 138, 140, 140, + 140, 140, 140, 140, 140, 140, 138, 140, 140, 140, + 140, 138, 140, 140, 138, 140, 138, 0, 138, 138, + 138 } ; -static yyconst flex_int16_t yy_nxt[378] = +static yyconst flex_int16_t yy_nxt[393] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, - 13, 14, 11, 15, 16, 16, 16, 17, 18, 19, - 20, 16, 21, 16, 22, 23, 24, 25, 26, 27, - 28, 29, 16, 16, 30, 16, 16, 16, 16, 17, - 18, 19, 20, 16, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 16, 16, 30, 16, 31, 42, 43, - 32, 33, 34, 34, 35, 36, 37, 37, 36, 36, - 37, 37, 36, 35, 34, 34, 35, 47, 48, 51, - 49, 52, 56, 75, 53, 54, 60, 61, 125, 50, - 64, 125, 55, 57, 65, 58, 34, 34, 47, 48, - - 51, 49, 52, 56, 75, 53, 59, 54, 60, 61, - 50, 62, 64, 55, 63, 57, 65, 58, 66, 68, - 69, 42, 43, 76, 67, 46, 74, 59, 70, 34, - 34, 71, 62, 77, 78, 63, 71, 34, 34, 71, - 66, 68, 69, 79, 76, 67, 33, 34, 34, 35, - 35, 34, 34, 35, 36, 77, 78, 36, 36, 37, - 37, 36, 80, 81, 82, 79, 83, 84, 74, 85, - 86, 72, 87, 40, 88, 89, 90, 91, 92, 45, - 93, 44, 41, 80, 81, 82, 40, 38, 83, 84, - 85, 86, 94, 72, 87, 88, 89, 90, 95, 91, - - 92, 93, 70, 34, 34, 71, 71, 34, 34, 71, - 96, 131, 97, 94, 98, 99, 131, 100, 101, 95, - 102, 103, 104, 131, 105, 106, 107, 131, 108, 109, - 110, 112, 96, 97, 111, 98, 113, 99, 100, 101, - 114, 102, 103, 115, 104, 105, 106, 116, 107, 108, - 109, 117, 110, 112, 118, 111, 119, 120, 113, 121, - 122, 114, 123, 124, 126, 115, 127, 125, 129, 116, - 125, 130, 131, 117, 131, 131, 118, 131, 119, 120, - 121, 131, 122, 123, 124, 126, 131, 127, 128, 129, - 131, 131, 131, 130, 131, 131, 131, 131, 131, 131, - - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 128, 39, 131, 39, 39, 73, 131, 131, 73, 3, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131 + 13, 14, 10, 15, 16, 17, 17, 18, 19, 20, + 21, 17, 22, 17, 23, 24, 25, 26, 27, 28, + 29, 30, 17, 17, 31, 17, 16, 17, 17, 18, + 19, 20, 21, 17, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 17, 17, 31, 17, 32, 43, 44, + 33, 34, 35, 35, 36, 37, 38, 38, 37, 37, + 38, 38, 37, 36, 35, 35, 36, 45, 46, 49, + 50, 51, 54, 52, 55, 59, 132, 56, 57, 132, + 67, 48, 53, 68, 79, 58, 60, 65, 61, 79, + + 49, 50, 51, 54, 52, 55, 59, 66, 56, 62, + 57, 67, 63, 53, 68, 69, 58, 70, 60, 65, + 61, 64, 80, 71, 73, 74, 35, 35, 66, 72, + 62, 40, 37, 47, 63, 37, 42, 69, 41, 70, + 43, 44, 64, 40, 80, 71, 73, 74, 138, 77, + 72, 75, 35, 35, 76, 76, 35, 35, 76, 34, + 35, 35, 36, 36, 35, 35, 36, 37, 38, 38, + 37, 77, 81, 82, 83, 84, 85, 138, 86, 87, + 88, 89, 90, 138, 91, 92, 93, 94, 138, 95, + 96, 97, 98, 81, 82, 99, 83, 84, 85, 86, + + 87, 88, 100, 89, 90, 91, 92, 93, 101, 94, + 95, 96, 97, 102, 98, 103, 106, 99, 75, 35, + 35, 76, 104, 100, 76, 35, 35, 76, 105, 101, + 107, 108, 109, 110, 102, 111, 114, 103, 106, 112, + 113, 115, 116, 104, 117, 138, 118, 119, 120, 105, + 121, 107, 108, 109, 110, 122, 123, 111, 114, 124, + 112, 113, 115, 116, 125, 126, 117, 118, 127, 119, + 120, 121, 128, 129, 138, 130, 131, 122, 123, 133, + 134, 124, 132, 136, 137, 132, 125, 126, 138, 138, + 127, 138, 138, 128, 138, 129, 130, 131, 138, 138, + + 133, 134, 138, 135, 136, 138, 137, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 135, 39, 138, 39, 39, + 78, 138, 138, 78, 3, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138 + } ; -static yyconst flex_int16_t yy_chk[378] = +static yyconst flex_int16_t yy_chk[393] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -526,40 +531,43 @@ static yyconst flex_int16_t yy_chk[378] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 13, 13, 2, 5, 5, 5, 5, 6, 6, 6, 6, 7, - 7, 7, 7, 8, 8, 8, 8, 17, 18, 19, - 18, 20, 22, 47, 20, 21, 24, 25, 120, 18, - 27, 120, 21, 23, 28, 23, 34, 34, 17, 18, - - 19, 18, 20, 22, 47, 20, 23, 21, 24, 25, - 18, 26, 27, 21, 26, 23, 28, 23, 29, 30, - 30, 43, 43, 48, 29, 133, 74, 23, 31, 31, - 31, 31, 26, 49, 50, 26, 32, 32, 32, 32, - 29, 30, 30, 51, 48, 29, 33, 33, 33, 33, - 35, 35, 35, 35, 36, 49, 50, 36, 37, 37, - 37, 37, 52, 55, 56, 51, 57, 58, 42, 59, - 60, 36, 62, 39, 63, 64, 65, 66, 68, 15, - 69, 14, 12, 52, 55, 56, 10, 9, 57, 58, - 59, 60, 72, 36, 62, 63, 64, 65, 75, 66, - - 68, 69, 70, 70, 70, 70, 71, 71, 71, 71, - 76, 3, 78, 72, 79, 80, 0, 81, 82, 75, - 83, 84, 85, 0, 86, 87, 89, 0, 91, 92, - 93, 98, 76, 78, 94, 79, 99, 80, 81, 82, - 102, 83, 84, 103, 85, 86, 87, 104, 89, 91, - 92, 106, 93, 98, 107, 94, 109, 111, 99, 113, - 115, 102, 117, 118, 122, 103, 123, 125, 127, 104, - 125, 128, 0, 106, 0, 0, 107, 0, 109, 111, - 113, 0, 115, 117, 118, 122, 0, 123, 125, 127, - 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, - + 7, 7, 7, 8, 8, 8, 8, 14, 14, 16, + 18, 19, 20, 19, 21, 23, 127, 21, 22, 127, + 27, 140, 19, 27, 79, 22, 24, 26, 24, 43, + + 16, 18, 19, 20, 19, 21, 23, 26, 21, 24, + 22, 27, 25, 19, 27, 28, 22, 29, 24, 26, + 24, 25, 49, 30, 31, 31, 35, 35, 26, 30, + 24, 39, 37, 15, 25, 37, 12, 28, 11, 29, + 44, 44, 25, 9, 49, 30, 31, 31, 3, 37, + 30, 32, 32, 32, 32, 33, 33, 33, 33, 34, + 34, 34, 34, 36, 36, 36, 36, 38, 38, 38, + 38, 37, 50, 51, 52, 53, 54, 0, 55, 58, + 59, 60, 61, 0, 62, 63, 64, 67, 0, 68, + 69, 70, 71, 50, 51, 73, 52, 53, 54, 55, + + 58, 59, 74, 60, 61, 62, 63, 64, 77, 67, + 68, 69, 70, 81, 71, 82, 86, 73, 75, 75, + 75, 75, 84, 74, 76, 76, 76, 76, 85, 77, + 87, 88, 89, 90, 81, 91, 96, 82, 86, 92, + 94, 98, 99, 84, 100, 0, 101, 105, 106, 85, + 109, 87, 88, 89, 90, 110, 111, 91, 96, 113, + 92, 94, 98, 99, 114, 116, 100, 101, 118, 105, + 106, 109, 120, 122, 0, 124, 125, 110, 111, 129, + 130, 113, 132, 134, 135, 132, 114, 116, 0, 0, + 118, 0, 0, 120, 0, 122, 124, 125, 0, 0, + + 129, 130, 0, 132, 134, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 125, 132, 0, 132, 132, 134, 0, 0, 134, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131 + 0, 0, 0, 0, 0, 132, 139, 0, 139, 139, + 141, 0, 0, 141, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138 + } ; static yy_state_type yy_last_accepting_state; @@ -622,7 +630,7 @@ static void countnl() { Director::g_lingo->_colnumber = strlen(p); } -#line 626 "engines/director/lingo/lingo-lex.cpp" +#line 634 "engines/director/lingo/lingo-lex.cpp" #define INITIAL 0 @@ -810,7 +818,7 @@ YY_DECL #line 58 "engines/director/lingo/lingo-lex.l" -#line 814 "engines/director/lingo/lingo-lex.cpp" +#line 822 "engines/director/lingo/lingo-lex.cpp" if ( !(yy_init) ) { @@ -864,13 +872,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 >= 132 ) + if ( yy_current_state >= 139 ) 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] != 320 ); + while ( yy_base[yy_current_state] != 335 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -912,153 +920,173 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP #line 64 "engines/director/lingo/lingo-lex.l" -{ count(); return tDOWN; } +{ count(); return tAND; } YY_BREAK case 5: YY_RULE_SETUP #line 65 "engines/director/lingo/lingo-lex.l" -{ count(); return tIF; } +{ count(); return tDOWN; } YY_BREAK case 6: -/* rule 6 can match eol */ YY_RULE_SETUP #line 66 "engines/director/lingo/lingo-lex.l" -{ countnl(); return tNLELSIF; } +{ count(); return tIF; } YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 67 "engines/director/lingo/lingo-lex.l" -{ countnl(); return tNLELSE; } +{ countnl(); return tNLELSIF; } YY_BREAK case 8: +/* rule 8 can match eol */ YY_RULE_SETUP #line 68 "engines/director/lingo/lingo-lex.l" -{ count(); return tELSE; } +{ countnl(); return tNLELSE; } YY_BREAK case 9: YY_RULE_SETUP #line 69 "engines/director/lingo/lingo-lex.l" -{ count(); return tEND; } +{ count(); return tELSE; } YY_BREAK case 10: YY_RULE_SETUP #line 70 "engines/director/lingo/lingo-lex.l" -{ count(); return tEXIT; } +{ count(); return tEND; } YY_BREAK case 11: YY_RULE_SETUP #line 71 "engines/director/lingo/lingo-lex.l" -{ count(); return tFRAME; } +{ count(); return tEXIT; } YY_BREAK case 12: YY_RULE_SETUP #line 72 "engines/director/lingo/lingo-lex.l" -{ count(); return tGLOBAL; } +{ count(); return tFRAME; } YY_BREAK case 13: YY_RULE_SETUP #line 73 "engines/director/lingo/lingo-lex.l" -{ count(); return tGO; } +{ count(); return tGLOBAL; } YY_BREAK case 14: YY_RULE_SETUP #line 74 "engines/director/lingo/lingo-lex.l" -{ count(); return tINTO; } +{ count(); return tGO; } YY_BREAK case 15: YY_RULE_SETUP #line 75 "engines/director/lingo/lingo-lex.l" -{ count(); return tLOOP; } +{ count(); return tINTO; } YY_BREAK case 16: YY_RULE_SETUP #line 76 "engines/director/lingo/lingo-lex.l" -{ count(); return tMACRO; } +{ count(); return tLOOP; } YY_BREAK case 17: YY_RULE_SETUP #line 77 "engines/director/lingo/lingo-lex.l" -{ count(); return tMCI; } +{ count(); return tMACRO; } YY_BREAK case 18: YY_RULE_SETUP #line 78 "engines/director/lingo/lingo-lex.l" -{ count(); return tMCIWAIT; } +{ count(); return tMCI; } YY_BREAK case 19: YY_RULE_SETUP #line 79 "engines/director/lingo/lingo-lex.l" -{ count(); return tMOVIE; } +{ count(); return tMCIWAIT; } YY_BREAK case 20: YY_RULE_SETUP #line 80 "engines/director/lingo/lingo-lex.l" -{ count(); return tNEXT; } +{ count(); return tMOVIE; } YY_BREAK case 21: YY_RULE_SETUP #line 81 "engines/director/lingo/lingo-lex.l" -{ count(); return tOF; } +{ count(); return tNEXT; } YY_BREAK case 22: YY_RULE_SETUP #line 82 "engines/director/lingo/lingo-lex.l" -{ count(); return tPREVIOUS; } +{ count(); return tNOT; } YY_BREAK case 23: YY_RULE_SETUP #line 83 "engines/director/lingo/lingo-lex.l" -{ count(); return tPUT; } +{ count(); return tOF; } YY_BREAK case 24: YY_RULE_SETUP #line 84 "engines/director/lingo/lingo-lex.l" -{ count(); return tREPEAT; } +{ count(); return tOR; } YY_BREAK case 25: YY_RULE_SETUP #line 85 "engines/director/lingo/lingo-lex.l" -{ count(); return tSET; } +{ count(); return tPREVIOUS; } YY_BREAK case 26: YY_RULE_SETUP #line 86 "engines/director/lingo/lingo-lex.l" -{ count(); return tTHEN; } +{ count(); return tPUT; } YY_BREAK case 27: YY_RULE_SETUP #line 87 "engines/director/lingo/lingo-lex.l" -{ count(); return tTO; } +{ count(); return tREPEAT; } YY_BREAK case 28: YY_RULE_SETUP #line 88 "engines/director/lingo/lingo-lex.l" -{ count(); return tWITH; } +{ count(); return tSET; } YY_BREAK case 29: YY_RULE_SETUP #line 89 "engines/director/lingo/lingo-lex.l" -{ count(); return tWHILE; } +{ count(); return tTHEN; } YY_BREAK case 30: YY_RULE_SETUP -#line 91 "engines/director/lingo/lingo-lex.l" -{ count(); return tNEQ; } +#line 90 "engines/director/lingo/lingo-lex.l" +{ count(); return tTO; } YY_BREAK case 31: YY_RULE_SETUP -#line 92 "engines/director/lingo/lingo-lex.l" -{ count(); return tGE; } +#line 91 "engines/director/lingo/lingo-lex.l" +{ count(); return tWITH; } YY_BREAK case 32: YY_RULE_SETUP -#line 93 "engines/director/lingo/lingo-lex.l" -{ count(); return tLE; } +#line 92 "engines/director/lingo/lingo-lex.l" +{ count(); return tWHILE; } YY_BREAK case 33: YY_RULE_SETUP +#line 94 "engines/director/lingo/lingo-lex.l" +{ count(); return tNEQ; } + YY_BREAK +case 34: +YY_RULE_SETUP #line 95 "engines/director/lingo/lingo-lex.l" +{ count(); return tGE; } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 96 "engines/director/lingo/lingo-lex.l" +{ count(); return tLE; } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 97 "engines/director/lingo/lingo-lex.l" +{ count(); return tCONCAT; } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 99 "engines/director/lingo/lingo-lex.l" { count(); yylval.s = new Common::String(yytext); @@ -1069,43 +1097,43 @@ YY_RULE_SETUP return ID; } YY_BREAK -case 34: +case 38: YY_RULE_SETUP -#line 104 "engines/director/lingo/lingo-lex.l" +#line 108 "engines/director/lingo/lingo-lex.l" { count(); yylval.f = atof(yytext); return FLOAT; } YY_BREAK -case 35: +case 39: YY_RULE_SETUP -#line 105 "engines/director/lingo/lingo-lex.l" +#line 109 "engines/director/lingo/lingo-lex.l" { count(); yylval.i = strtol(yytext, NULL, 10); return INT; } YY_BREAK -case 36: +case 40: YY_RULE_SETUP -#line 106 "engines/director/lingo/lingo-lex.l" +#line 110 "engines/director/lingo/lingo-lex.l" { count(); return *yytext; } YY_BREAK -case 37: -/* rule 37 can match eol */ +case 41: +/* rule 41 can match eol */ YY_RULE_SETUP -#line 107 "engines/director/lingo/lingo-lex.l" +#line 111 "engines/director/lingo/lingo-lex.l" { return '\n'; } YY_BREAK -case 38: +case 42: YY_RULE_SETUP -#line 108 "engines/director/lingo/lingo-lex.l" +#line 112 "engines/director/lingo/lingo-lex.l" { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; } YY_BREAK -case 39: +case 43: YY_RULE_SETUP -#line 109 "engines/director/lingo/lingo-lex.l" +#line 113 "engines/director/lingo/lingo-lex.l" YY_BREAK -case 40: +case 44: YY_RULE_SETUP -#line 111 "engines/director/lingo/lingo-lex.l" +#line 115 "engines/director/lingo/lingo-lex.l" ECHO; YY_BREAK -#line 1109 "engines/director/lingo/lingo-lex.cpp" +#line 1137 "engines/director/lingo/lingo-lex.cpp" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1398,7 +1426,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 >= 132 ) + if ( yy_current_state >= 139 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1426,11 +1454,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 >= 132 ) + if ( yy_current_state >= 139 ) 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 == 131); + yy_is_jam = (yy_current_state == 138); return yy_is_jam ? 0 : yy_current_state; } @@ -2105,7 +2133,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 111 "engines/director/lingo/lingo-lex.l" +#line 115 "engines/director/lingo/lingo-lex.l" diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l index 7b04c6b472..d241993d53 100644 --- a/engines/director/lingo/lingo-lex.l +++ b/engines/director/lingo/lingo-lex.l @@ -61,6 +61,7 @@ whitespace [\t ] ^{whitespace}+ { count(); } [\t]+ { count(); return ' '; } +(?i:and) { count(); return tAND; } (?i:down) { count(); return tDOWN; } (?i:if) { count(); return tIF; } (?i:[\n\r]+[\t ]+else[\t ]+if) { countnl(); return tNLELSIF; } @@ -78,7 +79,9 @@ whitespace [\t ] (?i:mciwait) { count(); return tMCIWAIT; } (?i:movie) { count(); return tMOVIE; } (?i:next) { count(); return tNEXT; } +(?i:not) { count(); return tNOT; } (?i:of) { count(); return tOF; } +(?i:or) { count(); return tOR; } (?i:previous) { count(); return tPREVIOUS; } (?i:put) { count(); return tPUT; } (?i:repeat) { count(); return tREPEAT; } @@ -88,9 +91,10 @@ whitespace [\t ] (?i:with) { count(); return tWITH; } (?i:while) { count(); return tWHILE; } -[!][=] { count(); return tNEQ; } +[<][>] { count(); return tNEQ; } [>][=] { count(); return tGE; } [<][=] { count(); return tLE; } +[&][&] { count(); return tCONCAT; } {identifier} { count(); diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index 5320d880ea..449b0556ff 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -178,7 +178,13 @@ public: static void c_mul(); static void c_div(); static void c_negate(); + + static void c_and(); + static void c_or(); + static void c_not(); + static void c_ampersand(); + static void c_concat(); static void c_constpush(); static void c_fconstpush(); -- cgit v1.2.3