lexer & grammar fixes

This commit is contained in:
xensik
2022-02-20 12:10:21 +01:00
parent e491993f93
commit 6980506e88
54 changed files with 10312 additions and 10375 deletions

View File

@ -83,7 +83,7 @@ xsk::gsc::s4::parser::symbol_type S4lex(xsk::gsc::s4::lexer& lexer);
%token TRUE "true"
%token FALSE "false"
%token UNDEFINED "undefined"
%token SIZE ".size"
%token SIZE "size"
%token GAME "game"
%token SELF "self"
%token ANIM "anim"
@ -135,7 +135,6 @@ xsk::gsc::s4::parser::symbol_type S4lex(xsk::gsc::s4::lexer& lexer);
%token MUL "*"
%token DIV "/"
%token MOD "%"
%token <std::string> FIELD "field"
%token <std::string> PATH "path"
%token <std::string> IDENTIFIER "identifier"
%token <std::string> STRING "string literal"
@ -215,6 +214,7 @@ xsk::gsc::s4::parser::symbol_type S4lex(xsk::gsc::s4::lexer& lexer);
%type <ast::expr_level::ptr> expr_level
%type <ast::expr_animation::ptr> expr_animation
%type <ast::expr_animtree::ptr> expr_animtree
%type <ast::expr_identifier::ptr> expr_identifier_nosize
%type <ast::expr_identifier::ptr> expr_identifier
%type <ast::expr_path::ptr> expr_path
%type <ast::expr_istring::ptr> expr_istring
@ -225,6 +225,7 @@ xsk::gsc::s4::parser::symbol_type S4lex(xsk::gsc::s4::lexer& lexer);
%type <ast::expr_false::ptr> expr_false
%type <ast::expr_true::ptr> expr_true
%nonassoc SIZEOF
%nonassoc ADD_ARRAY
%nonassoc RBRACKET
%nonassoc THEN
@ -736,14 +737,12 @@ expr_array
;
expr_field
: expr_object DOT expr_identifier
: expr_object DOT expr_identifier_nosize
{ $$ = std::make_unique<ast::expr_field>(@$, std::move($1), std::move($3)); }
| expr_object FIELD
{ $$ = std::make_unique<ast::expr_field>(@$, std::move($1), std::make_unique<ast::expr_identifier>(@$, $2)); }
;
expr_size
: expr_object SIZE
: expr_object DOT SIZE %prec SIZEOF
{ $$ = std::make_unique<ast::expr_size>(@$, std::move($1)); }
;
@ -809,16 +808,23 @@ expr_animtree
{ $$ = std::make_unique<ast::expr_animtree>(@$); };
;
expr_identifier
expr_identifier_nosize
: IDENTIFIER
{ $$ = std::make_unique<ast::expr_identifier>(@$, $1); };
;
expr_identifier
: IDENTIFIER
{ $$ = std::make_unique<ast::expr_identifier>(@$, $1); };
| SIZE
{ $$ = std::make_unique<ast::expr_identifier>(@$, "size"); };
;
expr_path
: PATH
: IDENTIFIER
{ $$ = std::make_unique<ast::expr_path>(@$, $1); };
| PATH
{ $$ = std::make_unique<ast::expr_path>(@$, $1); };
| expr_identifier
{ $$ = std::make_unique<ast::expr_path>(@$, $1->value); };
;
expr_istring