diff options
author | Eugene Sandulenko | 2017-02-12 11:12:54 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2017-02-12 11:12:54 +0100 |
commit | e76fec67a13ccc433de6eb41e45649e68a2865cc (patch) | |
tree | 17a2cc7d56c8c29b9eb925df0e304c53ceba13ac /engines/director/lingo | |
parent | d1a08b5145ea822c106e34043bf9b0a0be16c90d (diff) | |
download | scummvm-rg350-e76fec67a13ccc433de6eb41e45649e68a2865cc.tar.gz scummvm-rg350-e76fec67a13ccc433de6eb41e45649e68a2865cc.tar.bz2 scummvm-rg350-e76fec67a13ccc433de6eb41e45649e68a2865cc.zip |
DIRECTOR: Lingo: Fixing position count in lexer
Diffstat (limited to 'engines/director/lingo')
-rw-r--r-- | engines/director/lingo/lingo-lex.cpp | 175 | ||||
-rw-r--r-- | engines/director/lingo/lingo-lex.l | 23 |
2 files changed, 84 insertions, 114 deletions
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp index 66199ecaa1..54e62948a0 100644 --- a/engines/director/lingo/lingo-lex.cpp +++ b/engines/director/lingo/lingo-lex.cpp @@ -745,6 +745,9 @@ using namespace Director; int yyparse(); static void count() { + if (debugChannelSet(-1, kDebugLingoCompile)) + debug("LEXER: Read '%s' at %d:%d", yytext, g_lingo->_linenumber, g_lingo->_colnumber); + g_lingo->_colnumber += strlen(yytext); } @@ -777,7 +780,7 @@ static int checkImmediate(int token) { return token; } -#line 781 "engines/director/lingo/lingo-lex.cpp" +#line 784 "engines/director/lingo/lingo-lex.cpp" #define INITIAL 0 @@ -960,10 +963,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 82 "engines/director/lingo/lingo-lex.l" +#line 85 "engines/director/lingo/lingo-lex.l" -#line 967 "engines/director/lingo/lingo-lex.cpp" +#line 970 "engines/director/lingo/lingo-lex.cpp" if ( !(yy_init) ) { @@ -1049,84 +1052,84 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 84 "engines/director/lingo/lingo-lex.l" +#line 87 "engines/director/lingo/lingo-lex.l" YY_BREAK case 2: YY_RULE_SETUP -#line 85 "engines/director/lingo/lingo-lex.l" +#line 88 "engines/director/lingo/lingo-lex.l" { count(); } YY_BREAK case 3: YY_RULE_SETUP -#line 86 "engines/director/lingo/lingo-lex.l" +#line 89 "engines/director/lingo/lingo-lex.l" { count(); return ' '; } YY_BREAK case 4: YY_RULE_SETUP -#line 88 "engines/director/lingo/lingo-lex.l" +#line 91 "engines/director/lingo/lingo-lex.l" { count(); yylval.s = new Common::String(yytext); return SYMBOL; } // D3 YY_BREAK case 5: YY_RULE_SETUP -#line 90 "engines/director/lingo/lingo-lex.l" +#line 93 "engines/director/lingo/lingo-lex.l" { count(); return tAFTER; } // D3 YY_BREAK case 6: YY_RULE_SETUP -#line 91 "engines/director/lingo/lingo-lex.l" +#line 94 "engines/director/lingo/lingo-lex.l" { count(); return tAND; } YY_BREAK case 7: YY_RULE_SETUP -#line 92 "engines/director/lingo/lingo-lex.l" +#line 95 "engines/director/lingo/lingo-lex.l" { count(); return tBEFORE; } // D3 YY_BREAK case 8: YY_RULE_SETUP -#line 93 "engines/director/lingo/lingo-lex.l" +#line 96 "engines/director/lingo/lingo-lex.l" { count(); return tCHAR; } // D3 YY_BREAK case 9: YY_RULE_SETUP -#line 94 "engines/director/lingo/lingo-lex.l" +#line 97 "engines/director/lingo/lingo-lex.l" { count(); return tCONTAINS; } YY_BREAK case 10: YY_RULE_SETUP -#line 95 "engines/director/lingo/lingo-lex.l" +#line 98 "engines/director/lingo/lingo-lex.l" { count(); return tDONE; } YY_BREAK case 11: YY_RULE_SETUP -#line 96 "engines/director/lingo/lingo-lex.l" +#line 99 "engines/director/lingo/lingo-lex.l" { count(); return tDOWN; } YY_BREAK case 12: YY_RULE_SETUP -#line 97 "engines/director/lingo/lingo-lex.l" +#line 100 "engines/director/lingo/lingo-lex.l" { count(); return tIF; } YY_BREAK case 13: /* rule 13 can match eol */ YY_RULE_SETUP -#line 98 "engines/director/lingo/lingo-lex.l" +#line 101 "engines/director/lingo/lingo-lex.l" { countnl(); return tNLELSIF; } YY_BREAK case 14: /* rule 14 can match eol */ YY_RULE_SETUP -#line 99 "engines/director/lingo/lingo-lex.l" +#line 102 "engines/director/lingo/lingo-lex.l" { countnl(); return tNLELSE; } YY_BREAK case 15: YY_RULE_SETUP -#line 100 "engines/director/lingo/lingo-lex.l" +#line 103 "engines/director/lingo/lingo-lex.l" { count(); return tELSE; } YY_BREAK case 16: YY_RULE_SETUP -#line 101 "engines/director/lingo/lingo-lex.l" +#line 104 "engines/director/lingo/lingo-lex.l" { count(); @@ -1141,168 +1144,165 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 112 "engines/director/lingo/lingo-lex.l" +#line 115 "engines/director/lingo/lingo-lex.l" { count(); return tFACTORY; } YY_BREAK case 18: YY_RULE_SETUP -#line 113 "engines/director/lingo/lingo-lex.l" +#line 116 "engines/director/lingo/lingo-lex.l" { count(); return tEXIT; } YY_BREAK case 19: YY_RULE_SETUP -#line 114 "engines/director/lingo/lingo-lex.l" +#line 117 "engines/director/lingo/lingo-lex.l" { count(); return tFRAME; } YY_BREAK case 20: YY_RULE_SETUP -#line 115 "engines/director/lingo/lingo-lex.l" +#line 118 "engines/director/lingo/lingo-lex.l" { count(); return tGLOBAL; } YY_BREAK case 21: YY_RULE_SETUP -#line 116 "engines/director/lingo/lingo-lex.l" +#line 119 "engines/director/lingo/lingo-lex.l" { count(); return tGO; } YY_BREAK case 22: YY_RULE_SETUP -#line 117 "engines/director/lingo/lingo-lex.l" +#line 120 "engines/director/lingo/lingo-lex.l" { count(); return tGO; } YY_BREAK case 23: YY_RULE_SETUP -#line 118 "engines/director/lingo/lingo-lex.l" +#line 121 "engines/director/lingo/lingo-lex.l" { count(); return tINSTANCE; } YY_BREAK case 24: YY_RULE_SETUP -#line 119 "engines/director/lingo/lingo-lex.l" +#line 122 "engines/director/lingo/lingo-lex.l" { count(); return tINTERSECTS; } YY_BREAK case 25: YY_RULE_SETUP -#line 120 "engines/director/lingo/lingo-lex.l" +#line 123 "engines/director/lingo/lingo-lex.l" { count(); return tINTO; } YY_BREAK case 26: YY_RULE_SETUP -#line 121 "engines/director/lingo/lingo-lex.l" +#line 124 "engines/director/lingo/lingo-lex.l" { count(); return tITEM; } YY_BREAK case 27: YY_RULE_SETUP -#line 122 "engines/director/lingo/lingo-lex.l" +#line 125 "engines/director/lingo/lingo-lex.l" { count(); return tLINE; } YY_BREAK case 28: YY_RULE_SETUP -#line 123 "engines/director/lingo/lingo-lex.l" +#line 126 "engines/director/lingo/lingo-lex.l" { count(); return checkImmediate(tLOOP); } YY_BREAK case 29: YY_RULE_SETUP -#line 124 "engines/director/lingo/lingo-lex.l" +#line 127 "engines/director/lingo/lingo-lex.l" { count(); return tMACRO; } YY_BREAK case 30: YY_RULE_SETUP -#line 125 "engines/director/lingo/lingo-lex.l" +#line 128 "engines/director/lingo/lingo-lex.l" { count(); return tMETHOD; } YY_BREAK case 31: YY_RULE_SETUP -#line 126 "engines/director/lingo/lingo-lex.l" +#line 129 "engines/director/lingo/lingo-lex.l" { count(); return tMOD; } YY_BREAK case 32: YY_RULE_SETUP -#line 127 "engines/director/lingo/lingo-lex.l" +#line 130 "engines/director/lingo/lingo-lex.l" { count(); return tMOVIE; } YY_BREAK case 33: YY_RULE_SETUP -#line 128 "engines/director/lingo/lingo-lex.l" +#line 131 "engines/director/lingo/lingo-lex.l" { count(); return tNEXT; } YY_BREAK case 34: YY_RULE_SETUP -#line 129 "engines/director/lingo/lingo-lex.l" +#line 132 "engines/director/lingo/lingo-lex.l" { count(); return tNOT; } YY_BREAK case 35: YY_RULE_SETUP -#line 130 "engines/director/lingo/lingo-lex.l" +#line 133 "engines/director/lingo/lingo-lex.l" { count(); return tOF; } YY_BREAK case 36: YY_RULE_SETUP -#line 131 "engines/director/lingo/lingo-lex.l" +#line 134 "engines/director/lingo/lingo-lex.l" { count(); return tON; } // D3 YY_BREAK case 37: YY_RULE_SETUP -#line 132 "engines/director/lingo/lingo-lex.l" +#line 135 "engines/director/lingo/lingo-lex.l" { count(); return tOPEN; } YY_BREAK case 38: YY_RULE_SETUP -#line 133 "engines/director/lingo/lingo-lex.l" +#line 136 "engines/director/lingo/lingo-lex.l" { count(); return tOR; } YY_BREAK case 39: YY_RULE_SETUP -#line 134 "engines/director/lingo/lingo-lex.l" +#line 137 "engines/director/lingo/lingo-lex.l" { count(); return tPLAY; } YY_BREAK case 40: YY_RULE_SETUP -#line 135 "engines/director/lingo/lingo-lex.l" +#line 138 "engines/director/lingo/lingo-lex.l" { count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; } YY_BREAK case 41: YY_RULE_SETUP -#line 136 "engines/director/lingo/lingo-lex.l" +#line 139 "engines/director/lingo/lingo-lex.l" { count(); return tPREVIOUS; } YY_BREAK case 42: YY_RULE_SETUP -#line 137 "engines/director/lingo/lingo-lex.l" +#line 140 "engines/director/lingo/lingo-lex.l" { count(); return tPROPERTY; } // D4 YY_BREAK case 43: YY_RULE_SETUP -#line 138 "engines/director/lingo/lingo-lex.l" +#line 141 "engines/director/lingo/lingo-lex.l" { count(); return tPUT; } YY_BREAK case 44: YY_RULE_SETUP -#line 139 "engines/director/lingo/lingo-lex.l" +#line 142 "engines/director/lingo/lingo-lex.l" { count(); return checkImmediate(tREPEAT); } YY_BREAK case 45: YY_RULE_SETUP -#line 140 "engines/director/lingo/lingo-lex.l" +#line 143 "engines/director/lingo/lingo-lex.l" { count(); return tSET; } YY_BREAK case 46: YY_RULE_SETUP -#line 141 "engines/director/lingo/lingo-lex.l" +#line 144 "engines/director/lingo/lingo-lex.l" { count(); return tSTARTS; } YY_BREAK case 47: YY_RULE_SETUP -#line 142 "engines/director/lingo/lingo-lex.l" +#line 145 "engines/director/lingo/lingo-lex.l" { count(); return tTELL; } YY_BREAK case 48: YY_RULE_SETUP -#line 143 "engines/director/lingo/lingo-lex.l" +#line 146 "engines/director/lingo/lingo-lex.l" { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the last: Read '%s'", yytext); - yylval.e[0] = g_lingo->_theEntities["last"]->entity; yylval.e[1] = 0; // No field @@ -1315,9 +1315,6 @@ YY_RULE_SETUP { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the sqrt: Read '%s'", yytext); - yylval.e[0] = g_lingo->_theEntities["sqrt"]->entity; yylval.e[1] = 0; // No field @@ -1326,13 +1323,10 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 165 "engines/director/lingo/lingo-lex.l" +#line 162 "engines/director/lingo/lingo-lex.l" { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the of: Read '%s'", yytext); - const char *ptr = &yytext[4]; // Skip 'the ' while (*ptr == ' ' || *ptr == '\t') ptr++; @@ -1373,13 +1367,10 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 208 "engines/director/lingo/lingo-lex.l" +#line 202 "engines/director/lingo/lingo-lex.l" { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the date: Read '%s'", yytext); - const char *ptr = &yytext[4]; // Skip 'the ' while (*ptr == ' ' || *ptr == '\t') ptr++; @@ -1411,13 +1402,10 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 242 "engines/director/lingo/lingo-lex.l" +#line 233 "engines/director/lingo/lingo-lex.l" { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the: Read '%s'", yytext); - const char *ptr = &yytext[4]; // Skip 'the ' while (*ptr == ' ' || *ptr == '\t') ptr++; @@ -1437,74 +1425,71 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 264 "engines/director/lingo/lingo-lex.l" +#line 252 "engines/director/lingo/lingo-lex.l" { count(); return tTHEN; } YY_BREAK case 54: YY_RULE_SETUP -#line 265 "engines/director/lingo/lingo-lex.l" +#line 253 "engines/director/lingo/lingo-lex.l" { count(); return tTO; } YY_BREAK case 55: YY_RULE_SETUP -#line 266 "engines/director/lingo/lingo-lex.l" +#line 254 "engines/director/lingo/lingo-lex.l" { count(); return tSPRITE; } YY_BREAK case 56: YY_RULE_SETUP -#line 267 "engines/director/lingo/lingo-lex.l" +#line 255 "engines/director/lingo/lingo-lex.l" { count(); return tWITH; } YY_BREAK case 57: YY_RULE_SETUP -#line 268 "engines/director/lingo/lingo-lex.l" +#line 256 "engines/director/lingo/lingo-lex.l" { count(); return tWITHIN; } YY_BREAK case 58: YY_RULE_SETUP -#line 269 "engines/director/lingo/lingo-lex.l" +#line 257 "engines/director/lingo/lingo-lex.l" { count(); return tWHEN; } YY_BREAK case 59: YY_RULE_SETUP -#line 270 "engines/director/lingo/lingo-lex.l" +#line 258 "engines/director/lingo/lingo-lex.l" { count(); return tWHILE; } YY_BREAK case 60: YY_RULE_SETUP -#line 271 "engines/director/lingo/lingo-lex.l" +#line 259 "engines/director/lingo/lingo-lex.l" { count(); return tWORD; } YY_BREAK case 61: YY_RULE_SETUP -#line 273 "engines/director/lingo/lingo-lex.l" +#line 261 "engines/director/lingo/lingo-lex.l" { count(); return tNEQ; } YY_BREAK case 62: YY_RULE_SETUP -#line 274 "engines/director/lingo/lingo-lex.l" +#line 262 "engines/director/lingo/lingo-lex.l" { count(); return tGE; } YY_BREAK case 63: YY_RULE_SETUP -#line 275 "engines/director/lingo/lingo-lex.l" +#line 263 "engines/director/lingo/lingo-lex.l" { count(); return tLE; } YY_BREAK case 64: YY_RULE_SETUP -#line 276 "engines/director/lingo/lingo-lex.l" +#line 264 "engines/director/lingo/lingo-lex.l" { count(); return tCONCAT; } YY_BREAK case 65: YY_RULE_SETUP -#line 278 "engines/director/lingo/lingo-lex.l" +#line 266 "engines/director/lingo/lingo-lex.l" { count(); yylval.s = new Common::String(yytext); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: identifier: Read '%s'", yytext); - if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me")) return ID; @@ -1543,41 +1528,41 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 320 "engines/director/lingo/lingo-lex.l" +#line 305 "engines/director/lingo/lingo-lex.l" { count(); yylval.f = atof(yytext); return FLOAT; } YY_BREAK case 67: YY_RULE_SETUP -#line 321 "engines/director/lingo/lingo-lex.l" +#line 306 "engines/director/lingo/lingo-lex.l" { count(); yylval.i = strtol(yytext, NULL, 10); return INT; } YY_BREAK case 68: YY_RULE_SETUP -#line 322 "engines/director/lingo/lingo-lex.l" +#line 307 "engines/director/lingo/lingo-lex.l" { count(); return *yytext; } YY_BREAK case 69: /* rule 69 can match eol */ YY_RULE_SETUP -#line 323 "engines/director/lingo/lingo-lex.l" +#line 308 "engines/director/lingo/lingo-lex.l" { return '\n'; } YY_BREAK case 70: YY_RULE_SETUP -#line 324 "engines/director/lingo/lingo-lex.l" +#line 309 "engines/director/lingo/lingo-lex.l" { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; } YY_BREAK case 71: YY_RULE_SETUP -#line 325 "engines/director/lingo/lingo-lex.l" - +#line 310 "engines/director/lingo/lingo-lex.l" +{ count(); } YY_BREAK case 72: YY_RULE_SETUP -#line 327 "engines/director/lingo/lingo-lex.l" +#line 312 "engines/director/lingo/lingo-lex.l" ECHO; YY_BREAK -#line 1581 "engines/director/lingo/lingo-lex.cpp" +#line 1566 "engines/director/lingo/lingo-lex.cpp" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2540,7 +2525,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 327 "engines/director/lingo/lingo-lex.l" +#line 312 "engines/director/lingo/lingo-lex.l" diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l index 93b57a079a..b69e3d0328 100644 --- a/engines/director/lingo/lingo-lex.l +++ b/engines/director/lingo/lingo-lex.l @@ -37,6 +37,9 @@ using namespace Director; int yyparse(); static void count() { + if (debugChannelSet(-1, kDebugLingoCompile)) + debug("LEXER: Read '%s' at %d:%d", yytext, g_lingo->_linenumber, g_lingo->_colnumber); + g_lingo->_colnumber += strlen(yytext); } @@ -143,9 +146,6 @@ whitespace [\t ] (?i:the[ \t]+last[\t ]+of[\t ]+) { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the last: Read '%s'", yytext); - yylval.e[0] = g_lingo->_theEntities["last"]->entity; yylval.e[1] = 0; // No field @@ -154,9 +154,6 @@ whitespace [\t ] (?i:the[ \t]+sqrt[\t ]+of[\t ]+) { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the sqrt: Read '%s'", yytext); - yylval.e[0] = g_lingo->_theEntities["sqrt"]->entity; yylval.e[1] = 0; // No field @@ -165,9 +162,6 @@ whitespace [\t ] (?i:the[ \t]+[[:alpha:]]+[\t ]+of[\t ]+[[:alpha:]]+) { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the of: Read '%s'", yytext); - const char *ptr = &yytext[4]; // Skip 'the ' while (*ptr == ' ' || *ptr == '\t') ptr++; @@ -208,9 +202,6 @@ whitespace [\t ] (?i:the[ \t]+[[:alpha:]]+[ \t+](date|time)) { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the date: Read '%s'", yytext); - const char *ptr = &yytext[4]; // Skip 'the ' while (*ptr == ' ' || *ptr == '\t') ptr++; @@ -242,9 +233,6 @@ whitespace [\t ] (?i:the[ \t]+[[:alpha:]]+) { count(); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: the: Read '%s'", yytext); - const char *ptr = &yytext[4]; // Skip 'the ' while (*ptr == ' ' || *ptr == '\t') ptr++; @@ -279,9 +267,6 @@ whitespace [\t ] count(); yylval.s = new Common::String(yytext); - if (debugChannelSet(-1, kDebugLingoCompile)) - debug("LEXER: identifier: Read '%s'", yytext); - if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me")) return ID; @@ -322,7 +307,7 @@ whitespace [\t ] {operator} { count(); return *yytext; } {newline} { return '\n'; } {conststring} { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; } -. +. { count(); } %% |