php8.1: grammar improvements (#16)
Renamed 'possible_comma' with 'optional_comma' as in PHP-Parser Replace all 'identifier' with 'identifier_ex' and all 'T_STRING' with 'identifier' as in PHP-Parser
This commit is contained in:
parent
b256331d90
commit
13ed0df282
File diff suppressed because it is too large
Load Diff
@ -233,7 +233,7 @@ import (
|
|||||||
%type <token> semi_reserved
|
%type <token> semi_reserved
|
||||||
%type <token> identifier identifier_ex
|
%type <token> identifier identifier_ex
|
||||||
%type <token> plain_variable optional_plain_variable
|
%type <token> plain_variable optional_plain_variable
|
||||||
%type <token> possible_comma
|
%type <token> optional_comma
|
||||||
%type <token> case_separator
|
%type <token> case_separator
|
||||||
%type <token> use_type
|
%type <token> use_type
|
||||||
|
|
||||||
@ -338,15 +338,14 @@ semi_reserved:
|
|||||||
|
|
||||||
identifier:
|
identifier:
|
||||||
T_STRING { $$ = $1 }
|
T_STRING { $$ = $1 }
|
||||||
| semi_reserved { $$ = $1 }
|
|
||||||
;
|
;
|
||||||
|
|
||||||
identifier_ex:
|
identifier_ex:
|
||||||
T_STRING { $$ = $1 }
|
identifier { $$ = $1 }
|
||||||
| semi_reserved { $$ = $1 }
|
| semi_reserved { $$ = $1 }
|
||||||
;
|
;
|
||||||
|
|
||||||
possible_comma:
|
optional_comma:
|
||||||
/* empty */ { $$ = nil }
|
/* empty */ { $$ = nil }
|
||||||
| ',' { $$ = $1 }
|
| ',' { $$ = $1 }
|
||||||
;
|
;
|
||||||
@ -403,7 +402,7 @@ attribute_group:
|
|||||||
;
|
;
|
||||||
|
|
||||||
attribute:
|
attribute:
|
||||||
T_ATTRIBUTE attribute_group possible_comma ']'
|
T_ATTRIBUTE attribute_group optional_comma ']'
|
||||||
{ $$ = yylex.(*Parser).builder.NewAttributeGroup($1, $2, $3, $4) }
|
{ $$ = yylex.(*Parser).builder.NewAttributeGroup($1, $2, $3, $4) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -474,7 +473,7 @@ group_use_declaration:
|
|||||||
;
|
;
|
||||||
|
|
||||||
inline_use_declarations:
|
inline_use_declarations:
|
||||||
non_empty_inline_use_declarations possible_comma
|
non_empty_inline_use_declarations optional_comma
|
||||||
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -486,7 +485,7 @@ non_empty_inline_use_declarations:
|
|||||||
;
|
;
|
||||||
|
|
||||||
unprefixed_use_declarations:
|
unprefixed_use_declarations:
|
||||||
non_empty_unprefixed_use_declarations possible_comma
|
non_empty_unprefixed_use_declarations optional_comma
|
||||||
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -498,52 +497,52 @@ non_empty_unprefixed_use_declarations:
|
|||||||
;
|
;
|
||||||
|
|
||||||
use_declarations:
|
use_declarations:
|
||||||
use_declarations ',' use_declaration { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, $3) }
|
use_declarations ',' use_declaration { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, $3) }
|
||||||
| use_declaration { $$ = yylex.(*Parser).builder.NewSeparatedList($1) }
|
| use_declaration { $$ = yylex.(*Parser).builder.NewSeparatedList($1) }
|
||||||
;
|
;
|
||||||
|
|
||||||
inline_use_declaration:
|
inline_use_declaration:
|
||||||
unprefixed_use_declaration { $$ = $1 }
|
unprefixed_use_declaration { $$ = $1 }
|
||||||
| use_type unprefixed_use_declaration {
|
| use_type unprefixed_use_declaration {
|
||||||
decl := $2.(*ast.StmtUse)
|
decl := $2.(*ast.StmtUse)
|
||||||
decl.Type = yylex.(*Parser).builder.NewIdentifier($1)
|
decl.Type = yylex.(*Parser).builder.NewIdentifier($1)
|
||||||
decl.Position = yylex.(*Parser).builder.Pos.NewTokenNodePosition($1, $2)
|
decl.Position = yylex.(*Parser).builder.Pos.NewTokenNodePosition($1, $2)
|
||||||
$$ = $2
|
$$ = $2
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
unprefixed_use_declaration:
|
unprefixed_use_declaration:
|
||||||
namespace_name { $$ = yylex.(*Parser).builder.NewUse(nil, $1, nil, nil) }
|
namespace_name { $$ = yylex.(*Parser).builder.NewUse(nil, $1, nil, nil) }
|
||||||
| namespace_name T_AS T_STRING { $$ = yylex.(*Parser).builder.NewUse(nil, $1, $2, $3)}
|
| namespace_name T_AS identifier { $$ = yylex.(*Parser).builder.NewUse(nil, $1, $2, $3)}
|
||||||
;
|
;
|
||||||
|
|
||||||
use_declaration:
|
use_declaration:
|
||||||
legacy_namespace_name { $$ = yylex.(*Parser).builder.NewUse(nil, $1, nil, nil) }
|
legacy_namespace_name { $$ = yylex.(*Parser).builder.NewUse(nil, $1, nil, nil) }
|
||||||
| legacy_namespace_name T_AS T_STRING { $$ = yylex.(*Parser).builder.NewUse(nil, $1, $2, $3)}
|
| legacy_namespace_name T_AS identifier { $$ = yylex.(*Parser).builder.NewUse(nil, $1, $2, $3)}
|
||||||
;
|
;
|
||||||
|
|
||||||
const_list:
|
const_list:
|
||||||
const_list ',' const_decl { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, $3) }
|
const_list ',' const_decl { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, $3) }
|
||||||
| const_decl { $$ = yylex.(*Parser).builder.NewSeparatedList($1)}
|
| const_decl { $$ = yylex.(*Parser).builder.NewSeparatedList($1)}
|
||||||
;
|
;
|
||||||
|
|
||||||
inner_statement_list:
|
inner_statement_list:
|
||||||
inner_statement_list inner_statement {
|
inner_statement_list inner_statement {
|
||||||
if $2 != nil {
|
if $2 != nil {
|
||||||
$$ = append($1, $2)
|
$$ = append($1, $2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| /* empty */ { $$ = []ast.Vertex{} }
|
| /* empty */ { $$ = []ast.Vertex{} }
|
||||||
;
|
;
|
||||||
|
|
||||||
inner_statement:
|
inner_statement:
|
||||||
error { $$ = nil }
|
error { $$ = nil }
|
||||||
| statement { $$ = $1 }
|
| statement { $$ = $1 }
|
||||||
| function_declaration_statement { $$ = $1 }
|
| function_declaration_statement { $$ = $1 }
|
||||||
| class_declaration_statement { $$ = $1 }
|
| class_declaration_statement { $$ = $1 }
|
||||||
| trait_declaration_statement { $$ = $1 }
|
| trait_declaration_statement { $$ = $1 }
|
||||||
| interface_declaration_statement { $$ = $1 }
|
| interface_declaration_statement { $$ = $1 }
|
||||||
| enum_declaration_statement { $$ = $1 }
|
| enum_declaration_statement { $$ = $1 }
|
||||||
| T_HALT_COMPILER '(' ')' ';'
|
| T_HALT_COMPILER '(' ')' ';'
|
||||||
{
|
{
|
||||||
$$ = &ast.StmtHaltCompiler{
|
$$ = &ast.StmtHaltCompiler{
|
||||||
@ -686,7 +685,7 @@ statement:
|
|||||||
{
|
{
|
||||||
$$ = yylex.(*Parser).builder.NewExpressionStmt($1, $2)
|
$$ = yylex.(*Parser).builder.NewExpressionStmt($1, $2)
|
||||||
}
|
}
|
||||||
| T_UNSET '(' unset_variables possible_comma ')' ';'
|
| T_UNSET '(' unset_variables optional_comma ')' ';'
|
||||||
{
|
{
|
||||||
$3.(*ast.StmtUnset).UnsetTkn = $1
|
$3.(*ast.StmtUnset).UnsetTkn = $1
|
||||||
$3.(*ast.StmtUnset).OpenParenthesisTkn = $2
|
$3.(*ast.StmtUnset).OpenParenthesisTkn = $2
|
||||||
@ -761,7 +760,7 @@ statement:
|
|||||||
{
|
{
|
||||||
$$ = yylex.(*Parser).builder.NewTry($1, $2, $3, $4, $5, $6)
|
$$ = yylex.(*Parser).builder.NewTry($1, $2, $3, $4, $5, $6)
|
||||||
}
|
}
|
||||||
| T_GOTO T_STRING ';'
|
| T_GOTO identifier ';'
|
||||||
{
|
{
|
||||||
$$ = &ast.StmtGoto{
|
$$ = &ast.StmtGoto{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewTokensPosition($1, $3),
|
Position: yylex.(*Parser).builder.Pos.NewTokensPosition($1, $3),
|
||||||
@ -774,7 +773,7 @@ statement:
|
|||||||
SemiColonTkn: $3,
|
SemiColonTkn: $3,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| T_STRING ':'
|
| identifier ':'
|
||||||
{
|
{
|
||||||
$$ = &ast.StmtLabel{
|
$$ = &ast.StmtLabel{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewTokensPosition($1, $2),
|
Position: yylex.(*Parser).builder.Pos.NewTokensPosition($1, $2),
|
||||||
@ -840,10 +839,10 @@ unset_variable:
|
|||||||
;
|
;
|
||||||
|
|
||||||
function_declaration_statement:
|
function_declaration_statement:
|
||||||
T_FUNCTION returns_ref T_STRING '(' parameter_list ')' optional_return_type '{' inner_statement_list '}'
|
T_FUNCTION returns_ref identifier '(' parameter_list ')' optional_return_type '{' inner_statement_list '}'
|
||||||
{ $$ = yylex.(*Parser).builder.NewFunction(nil, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) }
|
{ $$ = yylex.(*Parser).builder.NewFunction(nil, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10) }
|
||||||
| attributes
|
| attributes
|
||||||
T_FUNCTION returns_ref T_STRING '(' parameter_list ')' optional_return_type '{' inner_statement_list '}'
|
T_FUNCTION returns_ref identifier '(' parameter_list ')' optional_return_type '{' inner_statement_list '}'
|
||||||
{ $$ = yylex.(*Parser).builder.NewFunction($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) }
|
{ $$ = yylex.(*Parser).builder.NewFunction($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -874,25 +873,25 @@ class_modifier:
|
|||||||
|
|
||||||
class_declaration_statement:
|
class_declaration_statement:
|
||||||
optional_attributes optional_class_modifiers
|
optional_attributes optional_class_modifiers
|
||||||
T_CLASS T_STRING extends_from implements_list '{' class_statement_list '}'
|
T_CLASS identifier extends_from implements_list '{' class_statement_list '}'
|
||||||
{ $$ = yylex.(*Parser).builder.NewClass($1, $2, $3, $4, $5, $6, $7, $8, $9) }
|
{ $$ = yylex.(*Parser).builder.NewClass($1, $2, $3, $4, $5, $6, $7, $8, $9) }
|
||||||
;
|
;
|
||||||
|
|
||||||
trait_declaration_statement:
|
trait_declaration_statement:
|
||||||
optional_attributes
|
optional_attributes
|
||||||
T_TRAIT T_STRING '{' class_statement_list '}'
|
T_TRAIT identifier '{' class_statement_list '}'
|
||||||
{ $$ = yylex.(*Parser).builder.NewTrait($1, $2, $3, $4, $5, $6) }
|
{ $$ = yylex.(*Parser).builder.NewTrait($1, $2, $3, $4, $5, $6) }
|
||||||
;
|
;
|
||||||
|
|
||||||
interface_declaration_statement:
|
interface_declaration_statement:
|
||||||
optional_attributes
|
optional_attributes
|
||||||
T_INTERFACE T_STRING interface_extends_list '{' class_statement_list '}'
|
T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
|
||||||
{ $$ = yylex.(*Parser).builder.NewInterface($1, $2, $3, $4, $5, $6, $7) }
|
{ $$ = yylex.(*Parser).builder.NewInterface($1, $2, $3, $4, $5, $6, $7) }
|
||||||
;
|
;
|
||||||
|
|
||||||
enum_declaration_statement:
|
enum_declaration_statement:
|
||||||
optional_attributes
|
optional_attributes
|
||||||
T_ENUM T_STRING enum_scalar_type implements_list '{' class_statement_list '}'
|
T_ENUM identifier enum_scalar_type implements_list '{' class_statement_list '}'
|
||||||
{ $$ = yylex.(*Parser).builder.NewEnum($1, $2, $3, $4, $5, $6, $7, $8) }
|
{ $$ = yylex.(*Parser).builder.NewEnum($1, $2, $3, $4, $5, $6, $7, $8) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1265,7 +1264,7 @@ alt_if_stmt:
|
|||||||
;
|
;
|
||||||
|
|
||||||
parameter_list:
|
parameter_list:
|
||||||
non_empty_parameter_list possible_comma { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
non_empty_parameter_list optional_comma { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
||||||
| /* empty */ { $$ = yylex.(*Parser).builder.NewEmptySeparatedList() }
|
| /* empty */ { $$ = yylex.(*Parser).builder.NewEmptySeparatedList() }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1349,7 +1348,7 @@ argument_list:
|
|||||||
CloseParenthesisTkn: $2,
|
CloseParenthesisTkn: $2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| '(' non_empty_argument_list possible_comma ')'
|
| '(' non_empty_argument_list optional_comma ')'
|
||||||
{
|
{
|
||||||
argumentList := $2.(*ArgumentList)
|
argumentList := $2.(*ArgumentList)
|
||||||
argumentList.Position = yylex.(*Parser).builder.Pos.NewTokensPosition($1, $4)
|
argumentList.Position = yylex.(*Parser).builder.Pos.NewTokensPosition($1, $4)
|
||||||
@ -1464,7 +1463,7 @@ class_statement:
|
|||||||
{ $$ = yylex.(*Parser).builder.NewPropertyList($1, $2, $3, $4, $5) }
|
{ $$ = yylex.(*Parser).builder.NewPropertyList($1, $2, $3, $4, $5) }
|
||||||
| optional_attributes method_modifiers T_CONST class_const_list ';'
|
| optional_attributes method_modifiers T_CONST class_const_list ';'
|
||||||
{ $$ = yylex.(*Parser).builder.NewClassConstList($1, $2, $3, $4, $5) }
|
{ $$ = yylex.(*Parser).builder.NewClassConstList($1, $2, $3, $4, $5) }
|
||||||
| optional_attributes method_modifiers T_FUNCTION returns_ref identifier '(' parameter_list ')' optional_return_type method_body
|
| optional_attributes method_modifiers T_FUNCTION returns_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
|
||||||
{ $$ = yylex.(*Parser).builder.NewClassMethod($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) }
|
{ $$ = yylex.(*Parser).builder.NewClassMethod($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) }
|
||||||
| T_USE name_list trait_adaptations
|
| T_USE name_list trait_adaptations
|
||||||
{
|
{
|
||||||
@ -1486,7 +1485,7 @@ class_statement:
|
|||||||
|
|
||||||
$$ = traitUse
|
$$ = traitUse
|
||||||
}
|
}
|
||||||
| optional_attributes T_CASE T_STRING enum_case_expr ';'
|
| optional_attributes T_CASE identifier enum_case_expr ';'
|
||||||
{ $$ = yylex.(*Parser).builder.NewEnumCase($1, $2, $3, $4, $5) }
|
{ $$ = yylex.(*Parser).builder.NewEnumCase($1, $2, $3, $4, $5) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1558,7 +1557,7 @@ trait_precedence:
|
|||||||
;
|
;
|
||||||
|
|
||||||
trait_alias:
|
trait_alias:
|
||||||
trait_method_reference T_AS T_STRING
|
trait_method_reference T_AS identifier
|
||||||
{
|
{
|
||||||
$$ = &ast.StmtTraitUseAlias{
|
$$ = &ast.StmtTraitUseAlias{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewNodeTokenPosition($1, $3),
|
Position: yylex.(*Parser).builder.Pos.NewNodeTokenPosition($1, $3),
|
||||||
@ -1588,7 +1587,7 @@ trait_alias:
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| trait_method_reference T_AS member_modifier identifier
|
| trait_method_reference T_AS member_modifier identifier_ex
|
||||||
{
|
{
|
||||||
$$ = &ast.StmtTraitUseAlias{
|
$$ = &ast.StmtTraitUseAlias{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewNodeTokenPosition($1, $4),
|
Position: yylex.(*Parser).builder.Pos.NewNodeTokenPosition($1, $4),
|
||||||
@ -1618,7 +1617,7 @@ trait_alias:
|
|||||||
;
|
;
|
||||||
|
|
||||||
trait_method_reference:
|
trait_method_reference:
|
||||||
identifier
|
identifier_ex
|
||||||
{
|
{
|
||||||
$$ = &TraitMethodRef{
|
$$ = &TraitMethodRef{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewTokenPosition($1),
|
Position: yylex.(*Parser).builder.Pos.NewTokenPosition($1),
|
||||||
@ -1636,7 +1635,7 @@ trait_method_reference:
|
|||||||
;
|
;
|
||||||
|
|
||||||
absolute_trait_method_reference:
|
absolute_trait_method_reference:
|
||||||
name T_PAAMAYIM_NEKUDOTAYIM identifier
|
name T_PAAMAYIM_NEKUDOTAYIM identifier_ex
|
||||||
{
|
{
|
||||||
$$ = &TraitMethodRef{
|
$$ = &TraitMethodRef{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewNodeTokenPosition($1, $3),
|
Position: yylex.(*Parser).builder.Pos.NewNodeTokenPosition($1, $3),
|
||||||
@ -1740,7 +1739,7 @@ class_const_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
class_const_decl:
|
class_const_decl:
|
||||||
identifier '=' expr backup_doc_comment
|
identifier_ex '=' expr backup_doc_comment
|
||||||
{
|
{
|
||||||
$$ = &ast.StmtConstant{
|
$$ = &ast.StmtConstant{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewTokenNodePosition($1, $3),
|
Position: yylex.(*Parser).builder.Pos.NewTokenNodePosition($1, $3),
|
||||||
@ -1756,7 +1755,7 @@ class_const_decl:
|
|||||||
;
|
;
|
||||||
|
|
||||||
const_decl:
|
const_decl:
|
||||||
T_STRING '=' expr backup_doc_comment
|
identifier '=' expr backup_doc_comment
|
||||||
{
|
{
|
||||||
$$ = &ast.StmtConstant{
|
$$ = &ast.StmtConstant{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewTokenNodePosition($1, $3),
|
Position: yylex.(*Parser).builder.Pos.NewTokenNodePosition($1, $3),
|
||||||
@ -1839,7 +1838,7 @@ new_expr:
|
|||||||
;
|
;
|
||||||
|
|
||||||
expr_list_allow_comma:
|
expr_list_allow_comma:
|
||||||
non_empty_expr_list possible_comma
|
non_empty_expr_list optional_comma
|
||||||
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1856,7 +1855,7 @@ match:
|
|||||||
match_arm_list:
|
match_arm_list:
|
||||||
/* empty */
|
/* empty */
|
||||||
{ $$ = nil; }
|
{ $$ = nil; }
|
||||||
| non_empty_match_arm_list possible_comma
|
| non_empty_match_arm_list optional_comma
|
||||||
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
{ $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1870,7 +1869,7 @@ non_empty_match_arm_list:
|
|||||||
match_arm:
|
match_arm:
|
||||||
expr_list_allow_comma T_DOUBLE_ARROW expr
|
expr_list_allow_comma T_DOUBLE_ARROW expr
|
||||||
{ $$ = yylex.(*Parser).builder.NewMatchArm(nil, nil, $1, $2, $3) }
|
{ $$ = yylex.(*Parser).builder.NewMatchArm(nil, nil, $1, $2, $3) }
|
||||||
| T_DEFAULT possible_comma T_DOUBLE_ARROW expr
|
| T_DEFAULT optional_comma T_DOUBLE_ARROW expr
|
||||||
{ $$ = yylex.(*Parser).builder.NewMatchArm($1, $2, nil, $3, $4) }
|
{ $$ = yylex.(*Parser).builder.NewMatchArm($1, $2, nil, $3, $4) }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -2646,7 +2645,7 @@ lexical_vars:
|
|||||||
;
|
;
|
||||||
|
|
||||||
lexical_var_list:
|
lexical_var_list:
|
||||||
non_empty_lexical_var_list possible_comma { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
non_empty_lexical_var_list optional_comma { $$ = yylex.(*Parser).builder.AppendToSeparatedList($1, $2, nil) }
|
||||||
;
|
;
|
||||||
|
|
||||||
non_empty_lexical_var_list:
|
non_empty_lexical_var_list:
|
||||||
@ -3074,13 +3073,13 @@ new_variable:
|
|||||||
;
|
;
|
||||||
|
|
||||||
member_name:
|
member_name:
|
||||||
identifier { $$ = yylex.(*Parser).builder.NewIdentifier($1) }
|
identifier_ex { $$ = yylex.(*Parser).builder.NewIdentifier($1) }
|
||||||
| '{' expr '}' { $$ = yylex.(*Parser).builder.NewBracket($1, $2, $3) }
|
| '{' expr '}' { $$ = yylex.(*Parser).builder.NewBracket($1, $2, $3) }
|
||||||
| simple_variable { $$ = $1 }
|
| simple_variable { $$ = $1 }
|
||||||
;
|
;
|
||||||
|
|
||||||
property_name:
|
property_name:
|
||||||
T_STRING { $$ = yylex.(*Parser).builder.NewIdentifier($1) }
|
identifier { $$ = yylex.(*Parser).builder.NewIdentifier($1) }
|
||||||
| '{' expr '}' { $$ = yylex.(*Parser).builder.NewBracket($1, $2, $3) }
|
| '{' expr '}' { $$ = yylex.(*Parser).builder.NewBracket($1, $2, $3) }
|
||||||
| simple_variable { $$ = $1 }
|
| simple_variable { $$ = $1 }
|
||||||
;
|
;
|
||||||
@ -3248,11 +3247,11 @@ encaps_var:
|
|||||||
CloseBracketTkn: $4,
|
CloseBracketTkn: $4,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
| plain_variable T_OBJECT_OPERATOR T_STRING
|
| plain_variable T_OBJECT_OPERATOR identifier
|
||||||
{
|
{
|
||||||
$$ = yylex.(*Parser).builder.NewPropertyFetchFromTokens($1, $2, $3)
|
$$ = yylex.(*Parser).builder.NewPropertyFetchFromTokens($1, $2, $3)
|
||||||
}
|
}
|
||||||
| plain_variable T_NULLSAFE_OBJECT_OPERATOR T_STRING
|
| plain_variable T_NULLSAFE_OBJECT_OPERATOR identifier
|
||||||
{
|
{
|
||||||
$$ = yylex.(*Parser).builder.NewNullsafePropertyFetchFromTokens($1, $2, $3)
|
$$ = yylex.(*Parser).builder.NewNullsafePropertyFetchFromTokens($1, $2, $3)
|
||||||
}
|
}
|
||||||
@ -3306,7 +3305,7 @@ encaps_var:
|
|||||||
;
|
;
|
||||||
|
|
||||||
encaps_var_offset:
|
encaps_var_offset:
|
||||||
T_STRING
|
identifier
|
||||||
{
|
{
|
||||||
$$ = &ast.ScalarString{
|
$$ = &ast.ScalarString{
|
||||||
Position: yylex.(*Parser).builder.Pos.NewTokenPosition($1),
|
Position: yylex.(*Parser).builder.Pos.NewTokenPosition($1),
|
||||||
@ -3369,7 +3368,7 @@ encaps_var_offset:
|
|||||||
;
|
;
|
||||||
|
|
||||||
internal_functions_in_yacc:
|
internal_functions_in_yacc:
|
||||||
T_ISSET '(' isset_variables possible_comma ')'
|
T_ISSET '(' isset_variables optional_comma ')'
|
||||||
{
|
{
|
||||||
if $4 != nil {
|
if $4 != nil {
|
||||||
$3.(*ParserSeparatedList).SeparatorTkns = append($3.(*ParserSeparatedList).SeparatorTkns, $4)
|
$3.(*ParserSeparatedList).SeparatorTkns = append($3.(*ParserSeparatedList).SeparatorTkns, $4)
|
||||||
|
Loading…
Reference in New Issue
Block a user