php5 syntax
This commit is contained in:
parent
1d4e52ebc5
commit
1ffa0fce5f
1377
php5/php5.go
1377
php5/php5.go
File diff suppressed because it is too large
Load Diff
136
php5/php5.y
136
php5/php5.y
@ -208,7 +208,8 @@ import (
|
||||
%type <node> else_single new_else_single while_statement for_statement unset_variable foreach_statement declare_statement
|
||||
%type <node> finally_statement additional_catch unticked_function_declaration_statement unticked_class_declaration_statement
|
||||
%type <node> optional_class_type parameter class_entry_type extends_from class_statement class_constant_declaration
|
||||
%type <node> trait_use_statement function_call_parameter
|
||||
%type <node> trait_use_statement function_call_parameter trait_adaptation_statement trait_precedence trait_alias
|
||||
%type <node> trait_method_reference_fully_qualified trait_method_reference trait_modifiers member_modifier
|
||||
|
||||
%type <list> top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations
|
||||
%type <list> inner_statement_list global_var_list static_var_list encaps_list isset_variables non_empty_array_pair_list
|
||||
@ -216,13 +217,14 @@ import (
|
||||
%type <list> for_expr case_list echo_expr_list unset_variables declare_list catch_statement additional_catches
|
||||
%type <list> non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list implements_list
|
||||
%type <list> class_statement_list variable_modifiers method_modifiers class_variable_declaration interface_extends_list
|
||||
%type <list> interface_list non_empty_function_call_parameter_list
|
||||
%type <list> interface_list non_empty_function_call_parameter_list trait_list trait_adaptation_list non_empty_trait_adaptation_list
|
||||
%type <list> trait_reference_list
|
||||
|
||||
|
||||
%type <simpleIndirectReference> simple_indirect_reference
|
||||
%type <foreachVariable> foreach_variable foreach_optional_arg
|
||||
%type <objectPropertyList> object_property object_dim_list dynamic_class_name_variable_properties dynamic_class_name_variable_property
|
||||
%type <nodesWithEndToken> ctor_arguments function_call_parameter_list switch_case_list method_body
|
||||
%type <nodesWithEndToken> ctor_arguments function_call_parameter_list switch_case_list method_body trait_adaptations
|
||||
%type <boolWithToken> is_reference is_variadic
|
||||
|
||||
%%
|
||||
@ -1446,60 +1448,120 @@ class_statement:
|
||||
|
||||
trait_use_statement:
|
||||
T_USE trait_list trait_adaptations
|
||||
{ }
|
||||
{
|
||||
$$ = stmt.NewTraitUse($2, $3.nodes)
|
||||
positions.AddPosition($$, positionBuilder.NewTokensPosition($1, $3.endToken))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
;
|
||||
|
||||
trait_list:
|
||||
fully_qualified_class_name { }
|
||||
| trait_list ',' fully_qualified_class_name { }
|
||||
fully_qualified_class_name
|
||||
{ $$ = []node.Node{$1} }
|
||||
| trait_list ',' fully_qualified_class_name
|
||||
{ $$ = append($1, $3) }
|
||||
;
|
||||
|
||||
trait_adaptations:
|
||||
';'
|
||||
{ $$ = &nodesWithEndToken{nil, $1} }
|
||||
| '{' trait_adaptation_list '}'
|
||||
{ $$ = &nodesWithEndToken{$2, $3} }
|
||||
;
|
||||
|
||||
trait_adaptation_list:
|
||||
/* empty */
|
||||
{ $$ = nil }
|
||||
| non_empty_trait_adaptation_list
|
||||
{ $$ = $1 }
|
||||
;
|
||||
|
||||
non_empty_trait_adaptation_list:
|
||||
trait_adaptation_statement
|
||||
{ $$ = []node.Node{$1} }
|
||||
| non_empty_trait_adaptation_list trait_adaptation_statement
|
||||
{ $$ = append($1, $2) }
|
||||
;
|
||||
|
||||
trait_adaptation_statement:
|
||||
trait_precedence ';'
|
||||
{ $$ = $1 }
|
||||
| trait_alias ';'
|
||||
{ $$ = $1 }
|
||||
;
|
||||
|
||||
trait_precedence:
|
||||
trait_method_reference_fully_qualified T_INSTEADOF trait_reference_list { }
|
||||
trait_method_reference_fully_qualified T_INSTEADOF trait_reference_list
|
||||
{
|
||||
name := name.NewName($3)
|
||||
positions.AddPosition(name, positionBuilder.NewNodeListPosition($3))
|
||||
$$ = stmt.NewTraitUsePrecedence($1, name)
|
||||
positions.AddPosition($$, positionBuilder.NewNodeNodeListPosition($1, $3))
|
||||
|
||||
comments.AddComments(name, ListGetFirstNodeComments($3))
|
||||
comments.AddComments($$, comments[$1])
|
||||
}
|
||||
;
|
||||
|
||||
trait_reference_list:
|
||||
fully_qualified_class_name { }
|
||||
| trait_reference_list ',' fully_qualified_class_name { }
|
||||
fully_qualified_class_name
|
||||
{ $$ = []node.Node{$1} }
|
||||
| trait_reference_list ',' fully_qualified_class_name
|
||||
{ $$ = append($1, $3) }
|
||||
;
|
||||
|
||||
trait_method_reference:
|
||||
T_STRING { }
|
||||
| trait_method_reference_fully_qualified { }
|
||||
T_STRING
|
||||
{
|
||||
name := node.NewIdentifier($1.Value)
|
||||
positions.AddPosition(name, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments(name, $1.Comments())
|
||||
|
||||
$$ = stmt.NewTraitMethodRef(nil, name)
|
||||
positions.AddPosition($$, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
| trait_method_reference_fully_qualified
|
||||
{ $$ = $1 }
|
||||
;
|
||||
|
||||
trait_method_reference_fully_qualified:
|
||||
fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { }
|
||||
fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING
|
||||
{
|
||||
target := node.NewIdentifier($3.Value)
|
||||
positions.AddPosition(target, positionBuilder.NewTokenPosition($3))
|
||||
comments.AddComments(target, $3.Comments())
|
||||
|
||||
$$ = stmt.NewTraitMethodRef($1, target)
|
||||
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition($1, $3))
|
||||
comments.AddComments($$, comments[$1])
|
||||
}
|
||||
;
|
||||
|
||||
trait_alias:
|
||||
trait_method_reference T_AS trait_modifiers T_STRING { }
|
||||
| trait_method_reference T_AS member_modifier { }
|
||||
trait_method_reference T_AS trait_modifiers T_STRING
|
||||
{
|
||||
alias := node.NewIdentifier($4.Value)
|
||||
positions.AddPosition(alias, positionBuilder.NewTokenPosition($4))
|
||||
$$ = stmt.NewTraitUseAlias($1, $3, alias)
|
||||
positions.AddPosition($$, positionBuilder.NewNodeTokenPosition($1, $4))
|
||||
|
||||
comments.AddComments(alias, $4.Comments())
|
||||
comments.AddComments($$, comments[$1])
|
||||
}
|
||||
| trait_method_reference T_AS member_modifier
|
||||
{
|
||||
$$ = stmt.NewTraitUseAlias($1, $3, nil)
|
||||
positions.AddPosition($$, positionBuilder.NewNodesPosition($1, $3))
|
||||
comments.AddComments($$, comments[$1])
|
||||
}
|
||||
;
|
||||
|
||||
trait_modifiers:
|
||||
/* empty */ { } /* No change of methods visibility */
|
||||
| member_modifier { } /* REM: Keep in mind, there are not only visibility modifiers */
|
||||
/* empty */
|
||||
{ $$ = nil }
|
||||
| member_modifier
|
||||
{ $$ = $1 }
|
||||
;
|
||||
|
||||
method_body:
|
||||
@ -1523,12 +1585,42 @@ non_empty_member_modifiers:
|
||||
;
|
||||
|
||||
member_modifier:
|
||||
T_PUBLIC { }
|
||||
| T_PROTECTED { }
|
||||
| T_PRIVATE { }
|
||||
| T_STATIC { }
|
||||
| T_ABSTRACT { }
|
||||
| T_FINAL { }
|
||||
T_PUBLIC
|
||||
{
|
||||
$$ = node.NewIdentifier($1.Value)
|
||||
positions.AddPosition($$, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
| T_PROTECTED
|
||||
{
|
||||
$$ = node.NewIdentifier($1.Value)
|
||||
positions.AddPosition($$, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
| T_PRIVATE
|
||||
{
|
||||
$$ = node.NewIdentifier($1.Value)
|
||||
positions.AddPosition($$, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
| T_STATIC
|
||||
{
|
||||
$$ = node.NewIdentifier($1.Value)
|
||||
positions.AddPosition($$, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
| T_ABSTRACT
|
||||
{
|
||||
$$ = node.NewIdentifier($1.Value)
|
||||
positions.AddPosition($$, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
| T_FINAL
|
||||
{
|
||||
$$ = node.NewIdentifier($1.Value)
|
||||
positions.AddPosition($$, positionBuilder.NewTokenPosition($1))
|
||||
comments.AddComments($$, $1.Comments())
|
||||
}
|
||||
;
|
||||
|
||||
class_variable_declaration:
|
||||
|
Loading…
Reference in New Issue
Block a user