mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-18 16:03:05 +00:00
DIRECTOR: LINGO: Switch to GLR parser. Improvements
This commit is contained in:
parent
57f979c705
commit
89353fb427
File diff suppressed because it is too large
Load Diff
@ -1,14 +1,13 @@
|
||||
/* A Bison parser, made by GNU Bison 2.3. */
|
||||
/* A Bison parser, made by GNU Bison 3.4.2. */
|
||||
|
||||
/* Skeleton interface for Bison's Yacc-like parsers in C
|
||||
/* Skeleton interface for Bison GLR parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -16,9 +15,7 @@
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA. */
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* As a special exception, you may create a larger work that contains
|
||||
part or all of the Bison parser skeleton and distribute that work
|
||||
@ -33,203 +30,120 @@
|
||||
This special exception was added by the Free Software Foundation in
|
||||
version 2.2 of Bison. */
|
||||
|
||||
/* Tokens. */
|
||||
#ifndef YY_YY_ENGINES_DIRECTOR_LINGO_LINGO_GR_HPP_INCLUDED
|
||||
# define YY_YY_ENGINES_DIRECTOR_LINGO_LINGO_GR_HPP_INCLUDED
|
||||
/* Debug traces. */
|
||||
#ifndef YYDEBUG
|
||||
# define YYDEBUG 1
|
||||
#endif
|
||||
#if YYDEBUG
|
||||
extern int yydebug;
|
||||
#endif
|
||||
|
||||
/* Token type. */
|
||||
#ifndef YYTOKENTYPE
|
||||
# define YYTOKENTYPE
|
||||
/* Put the tokens into the symbol table, so that GDB and other debuggers
|
||||
know about them. */
|
||||
enum yytokentype {
|
||||
UNARY = 258,
|
||||
CASTREF = 259,
|
||||
VOID = 260,
|
||||
VAR = 261,
|
||||
POINT = 262,
|
||||
RECT = 263,
|
||||
ARRAY = 264,
|
||||
OBJECT = 265,
|
||||
REFERENCE = 266,
|
||||
INT = 267,
|
||||
ARGC = 268,
|
||||
ARGCNORET = 269,
|
||||
THEENTITY = 270,
|
||||
THEENTITYWITHID = 271,
|
||||
FLOAT = 272,
|
||||
BLTIN = 273,
|
||||
BLTINNOARGS = 274,
|
||||
BLTINNOARGSORONE = 275,
|
||||
BLTINONEARG = 276,
|
||||
BLTINARGLIST = 277,
|
||||
TWOWORDBUILTIN = 278,
|
||||
FBLTIN = 279,
|
||||
FBLTINNOARGS = 280,
|
||||
FBLTINONEARG = 281,
|
||||
FBLTINARGLIST = 282,
|
||||
RBLTIN = 283,
|
||||
RBLTINONEARG = 284,
|
||||
ID = 285,
|
||||
STRING = 286,
|
||||
HANDLER = 287,
|
||||
SYMBOL = 288,
|
||||
ENDCLAUSE = 289,
|
||||
tPLAYACCEL = 290,
|
||||
tDOWN = 291,
|
||||
tELSE = 292,
|
||||
tNLELSIF = 293,
|
||||
tEXIT = 294,
|
||||
tFRAME = 295,
|
||||
tGLOBAL = 296,
|
||||
tGO = 297,
|
||||
tIF = 298,
|
||||
tINTO = 299,
|
||||
tLOOP = 300,
|
||||
tMACRO = 301,
|
||||
tMOVIE = 302,
|
||||
tNEXT = 303,
|
||||
tOF = 304,
|
||||
tPREVIOUS = 305,
|
||||
tPUT = 306,
|
||||
tREPEAT = 307,
|
||||
tSET = 308,
|
||||
tTHEN = 309,
|
||||
tTHENNL = 310,
|
||||
tTO = 311,
|
||||
tWHEN = 312,
|
||||
tWITH = 313,
|
||||
tWHILE = 314,
|
||||
tNLELSE = 315,
|
||||
tFACTORY = 316,
|
||||
tMETHOD = 317,
|
||||
tOPEN = 318,
|
||||
tPLAY = 319,
|
||||
tDONE = 320,
|
||||
tINSTANCE = 321,
|
||||
tGE = 322,
|
||||
tLE = 323,
|
||||
tGT = 324,
|
||||
tLT = 325,
|
||||
tEQ = 326,
|
||||
tNEQ = 327,
|
||||
tAND = 328,
|
||||
tOR = 329,
|
||||
tNOT = 330,
|
||||
tMOD = 331,
|
||||
tAFTER = 332,
|
||||
tBEFORE = 333,
|
||||
tCONCAT = 334,
|
||||
tCONTAINS = 335,
|
||||
tSTARTS = 336,
|
||||
tCHAR = 337,
|
||||
tITEM = 338,
|
||||
tLINE = 339,
|
||||
tWORD = 340,
|
||||
tSPRITE = 341,
|
||||
tINTERSECTS = 342,
|
||||
tWITHIN = 343,
|
||||
tTELL = 344,
|
||||
tPROPERTY = 345,
|
||||
tON = 346,
|
||||
tME = 347
|
||||
};
|
||||
enum yytokentype
|
||||
{
|
||||
UNARY = 258,
|
||||
CASTREF = 259,
|
||||
VOID = 260,
|
||||
VAR = 261,
|
||||
POINT = 262,
|
||||
RECT = 263,
|
||||
ARRAY = 264,
|
||||
OBJECT = 265,
|
||||
REFERENCE = 266,
|
||||
INT = 267,
|
||||
ARGC = 268,
|
||||
ARGCNORET = 269,
|
||||
THEENTITY = 270,
|
||||
THEENTITYWITHID = 271,
|
||||
FLOAT = 272,
|
||||
BLTIN = 273,
|
||||
BLTINNOARGS = 274,
|
||||
BLTINNOARGSORONE = 275,
|
||||
BLTINONEARG = 276,
|
||||
BLTINARGLIST = 277,
|
||||
TWOWORDBUILTIN = 278,
|
||||
FBLTIN = 279,
|
||||
FBLTINNOARGS = 280,
|
||||
FBLTINONEARG = 281,
|
||||
FBLTINARGLIST = 282,
|
||||
RBLTIN = 283,
|
||||
RBLTINONEARG = 284,
|
||||
ID = 285,
|
||||
STRING = 286,
|
||||
HANDLER = 287,
|
||||
SYMBOL = 288,
|
||||
ENDCLAUSE = 289,
|
||||
tPLAYACCEL = 290,
|
||||
tDOWN = 291,
|
||||
tELSE = 292,
|
||||
tNLELSIF = 293,
|
||||
tEXIT = 294,
|
||||
tFRAME = 295,
|
||||
tGLOBAL = 296,
|
||||
tGO = 297,
|
||||
tIF = 298,
|
||||
tINTO = 299,
|
||||
tLOOP = 300,
|
||||
tMACRO = 301,
|
||||
tMOVIE = 302,
|
||||
tNEXT = 303,
|
||||
tOF = 304,
|
||||
tPREVIOUS = 305,
|
||||
tPUT = 306,
|
||||
tREPEAT = 307,
|
||||
tSET = 308,
|
||||
tTHEN = 309,
|
||||
tTHENNL = 310,
|
||||
tTO = 311,
|
||||
tWHEN = 312,
|
||||
tWITH = 313,
|
||||
tWHILE = 314,
|
||||
tNLELSE = 315,
|
||||
tFACTORY = 316,
|
||||
tMETHOD = 317,
|
||||
tOPEN = 318,
|
||||
tPLAY = 319,
|
||||
tDONE = 320,
|
||||
tINSTANCE = 321,
|
||||
tGE = 322,
|
||||
tLE = 323,
|
||||
tGT = 324,
|
||||
tLT = 325,
|
||||
tEQ = 326,
|
||||
tNEQ = 327,
|
||||
tAND = 328,
|
||||
tOR = 329,
|
||||
tNOT = 330,
|
||||
tMOD = 331,
|
||||
tAFTER = 332,
|
||||
tBEFORE = 333,
|
||||
tCONCAT = 334,
|
||||
tCONTAINS = 335,
|
||||
tSTARTS = 336,
|
||||
tCHAR = 337,
|
||||
tITEM = 338,
|
||||
tLINE = 339,
|
||||
tWORD = 340,
|
||||
tSPRITE = 341,
|
||||
tINTERSECTS = 342,
|
||||
tWITHIN = 343,
|
||||
tTELL = 344,
|
||||
tPROPERTY = 345,
|
||||
tON = 346,
|
||||
tME = 347
|
||||
};
|
||||
#endif
|
||||
/* Tokens. */
|
||||
#define UNARY 258
|
||||
#define CASTREF 259
|
||||
#define VOID 260
|
||||
#define VAR 261
|
||||
#define POINT 262
|
||||
#define RECT 263
|
||||
#define ARRAY 264
|
||||
#define OBJECT 265
|
||||
#define REFERENCE 266
|
||||
#define INT 267
|
||||
#define ARGC 268
|
||||
#define ARGCNORET 269
|
||||
#define THEENTITY 270
|
||||
#define THEENTITYWITHID 271
|
||||
#define FLOAT 272
|
||||
#define BLTIN 273
|
||||
#define BLTINNOARGS 274
|
||||
#define BLTINNOARGSORONE 275
|
||||
#define BLTINONEARG 276
|
||||
#define BLTINARGLIST 277
|
||||
#define TWOWORDBUILTIN 278
|
||||
#define FBLTIN 279
|
||||
#define FBLTINNOARGS 280
|
||||
#define FBLTINONEARG 281
|
||||
#define FBLTINARGLIST 282
|
||||
#define RBLTIN 283
|
||||
#define RBLTINONEARG 284
|
||||
#define ID 285
|
||||
#define STRING 286
|
||||
#define HANDLER 287
|
||||
#define SYMBOL 288
|
||||
#define ENDCLAUSE 289
|
||||
#define tPLAYACCEL 290
|
||||
#define tDOWN 291
|
||||
#define tELSE 292
|
||||
#define tNLELSIF 293
|
||||
#define tEXIT 294
|
||||
#define tFRAME 295
|
||||
#define tGLOBAL 296
|
||||
#define tGO 297
|
||||
#define tIF 298
|
||||
#define tINTO 299
|
||||
#define tLOOP 300
|
||||
#define tMACRO 301
|
||||
#define tMOVIE 302
|
||||
#define tNEXT 303
|
||||
#define tOF 304
|
||||
#define tPREVIOUS 305
|
||||
#define tPUT 306
|
||||
#define tREPEAT 307
|
||||
#define tSET 308
|
||||
#define tTHEN 309
|
||||
#define tTHENNL 310
|
||||
#define tTO 311
|
||||
#define tWHEN 312
|
||||
#define tWITH 313
|
||||
#define tWHILE 314
|
||||
#define tNLELSE 315
|
||||
#define tFACTORY 316
|
||||
#define tMETHOD 317
|
||||
#define tOPEN 318
|
||||
#define tPLAY 319
|
||||
#define tDONE 320
|
||||
#define tINSTANCE 321
|
||||
#define tGE 322
|
||||
#define tLE 323
|
||||
#define tGT 324
|
||||
#define tLT 325
|
||||
#define tEQ 326
|
||||
#define tNEQ 327
|
||||
#define tAND 328
|
||||
#define tOR 329
|
||||
#define tNOT 330
|
||||
#define tMOD 331
|
||||
#define tAFTER 332
|
||||
#define tBEFORE 333
|
||||
#define tCONCAT 334
|
||||
#define tCONTAINS 335
|
||||
#define tSTARTS 336
|
||||
#define tCHAR 337
|
||||
#define tITEM 338
|
||||
#define tLINE 339
|
||||
#define tWORD 340
|
||||
#define tSPRITE 341
|
||||
#define tINTERSECTS 342
|
||||
#define tWITHIN 343
|
||||
#define tTELL 344
|
||||
#define tPROPERTY 345
|
||||
#define tON 346
|
||||
#define tME 347
|
||||
|
||||
|
||||
|
||||
|
||||
/* Value type. */
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
typedef union YYSTYPE
|
||||
#line 79 "engines/director/lingo/lingo-gr.y"
|
||||
union YYSTYPE
|
||||
{
|
||||
#line 80 "engines/director/lingo/lingo-gr.y"
|
||||
|
||||
Common::String *s;
|
||||
int i;
|
||||
double f;
|
||||
@ -237,14 +151,18 @@ typedef union YYSTYPE
|
||||
int code;
|
||||
int narg; /* number of arguments */
|
||||
Common::Array<double> *arr;
|
||||
}
|
||||
/* Line 1529 of yacc.c. */
|
||||
#line 243 "engines/director/lingo/lingo-gr.hpp"
|
||||
YYSTYPE;
|
||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
|
||||
#line 156 "engines/director/lingo/lingo-gr.hpp"
|
||||
|
||||
};
|
||||
typedef union YYSTYPE YYSTYPE;
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
#endif
|
||||
|
||||
|
||||
extern YYSTYPE yylval;
|
||||
|
||||
int yyparse (void);
|
||||
|
||||
#endif /* !YY_YY_ENGINES_DIRECTOR_LINGO_LINGO_GR_HPP_INCLUDED */
|
||||
|
@ -45,6 +45,7 @@
|
||||
|
||||
|
||||
%debug
|
||||
%glr-parser
|
||||
|
||||
%{
|
||||
#define FORBIDDEN_SYMBOL_ALLOW_ALL
|
||||
@ -247,17 +248,7 @@ stmt: stmtoneliner
|
||||
}
|
||||
;
|
||||
|
||||
ifstmt: if expr tTHEN begin stmtoneliner end '\n' {
|
||||
inst then = 0, else1 = 0, end = 0;
|
||||
WRITE_UINT32(&then, $4 - $1);
|
||||
WRITE_UINT32(&else1, 0);
|
||||
WRITE_UINT32(&end, $6 - $1);
|
||||
(*g_lingo->_currentScript)[$1 + 1] = then; /* thenpart */
|
||||
(*g_lingo->_currentScript)[$1 + 2] = else1; /* elsepart */
|
||||
(*g_lingo->_currentScript)[$1 + 3] = end; /* end, if cond fails */
|
||||
|
||||
g_lingo->processIf(0, 0); }
|
||||
| if expr tTHEN begin stmtoneliner end elseifstmtlist end endifstmt end {
|
||||
ifstmt: if expr tTHEN begin stmtoneliner end elseifstmtlist end endifstmt end {
|
||||
inst then = 0, else1 = 0, end = 0;
|
||||
WRITE_UINT32(&then, $4 - $1);
|
||||
WRITE_UINT32(&else1, $6 - $1);
|
||||
@ -267,14 +258,14 @@ ifstmt: if expr tTHEN begin stmtoneliner end '\n' {
|
||||
(*g_lingo->_currentScript)[$1 + 3] = end; /* end, if cond fails */
|
||||
|
||||
g_lingo->processIf(0, $10 - $1); }
|
||||
| if expr tTHENNL stmtlist end ENDCLAUSE {
|
||||
inst then = 0, end = 0;
|
||||
| if expr tTHEN begin stmtoneliner end {
|
||||
inst then = 0, else1 = 0, end = 0;
|
||||
WRITE_UINT32(&then, $4 - $1);
|
||||
WRITE_UINT32(&end, $5 - $1);
|
||||
WRITE_UINT32(&else1, 0);
|
||||
WRITE_UINT32(&end, $6 - $1);
|
||||
(*g_lingo->_currentScript)[$1 + 1] = then; /* thenpart */
|
||||
(*g_lingo->_currentScript)[$1 + 3] = end; /* end, if cond fails */
|
||||
|
||||
checkEnd($6, "if", true);
|
||||
(*g_lingo->_currentScript)[$1 + 2] = else1; /* elsepart */
|
||||
(*g_lingo->_currentScript)[$1 + 3] = end; /* end, if cond fails */
|
||||
|
||||
g_lingo->processIf(0, 0); }
|
||||
| if expr tTHENNL stmtlist end elseifstmtlist end endifstmt end {
|
||||
@ -286,6 +277,16 @@ ifstmt: if expr tTHEN begin stmtoneliner end '\n' {
|
||||
(*g_lingo->_currentScript)[$1 + 2] = else1; /* elsepart */
|
||||
(*g_lingo->_currentScript)[$1 + 3] = end; /* end, if cond fails */
|
||||
|
||||
g_lingo->processIf(0, 0); }
|
||||
| if expr tTHENNL stmtlist end ENDCLAUSE {
|
||||
inst then = 0, end = 0;
|
||||
WRITE_UINT32(&then, $4 - $1);
|
||||
WRITE_UINT32(&end, $5 - $1);
|
||||
(*g_lingo->_currentScript)[$1 + 1] = then; /* thenpart */
|
||||
(*g_lingo->_currentScript)[$1 + 3] = end; /* end, if cond fails */
|
||||
|
||||
checkEnd($6, "if", true);
|
||||
|
||||
g_lingo->processIf(0, 0); }
|
||||
;
|
||||
|
||||
@ -307,7 +308,8 @@ elseifstmt: elseif expr tTHEN begin stmtoneliner end {
|
||||
g_lingo->codeLabel($1); }
|
||||
;
|
||||
|
||||
endifstmt: elseif expr tTHEN begin stmtoneliner end tELSE stmtoneliner end {
|
||||
endifstmt: ENDCLAUSE
|
||||
| elseif expr tTHEN begin stmtoneliner end tELSE stmtoneliner end {
|
||||
inst then = 0;
|
||||
WRITE_UINT32(&then, $4 - $1);
|
||||
(*g_lingo->_currentScript)[$1 + 1] = then; /* thenpart */
|
||||
@ -401,7 +403,6 @@ expr: simpleexpr { $$ = $1; }
|
||||
g_lingo->codeFunc($1, 1);
|
||||
delete $1; }
|
||||
| FBLTINARGLIST nonemptyarglist { g_lingo->codeFunc($1, $2); }
|
||||
| FBLTINARGLIST '(' nonemptyarglist ')' { g_lingo->codeFunc($1, $3); }
|
||||
| ID '(' arglist ')' {
|
||||
$$ = g_lingo->codeFunc($1, $3);
|
||||
delete $1; }
|
||||
@ -482,7 +483,6 @@ proc: tPUT expr { g_lingo->code1(g_lingo->c_printtop); }
|
||||
g_lingo->codeFunc($1, 1);
|
||||
delete $1; }
|
||||
| BLTINARGLIST nonemptyarglist { g_lingo->codeFunc($1, $2); }
|
||||
| BLTINARGLIST '(' nonemptyarglist ')' { g_lingo->codeFunc($1, $3); }
|
||||
| tME '(' ID ')' { g_lingo->codeMe($3, 0); }
|
||||
| tME '(' ID ',' arglist ')' { g_lingo->codeMe($3, $5); }
|
||||
| tOPEN expr tWITH expr { g_lingo->code1(g_lingo->c_open); }
|
||||
|
Loading…
x
Reference in New Issue
Block a user