From 829326f8f77de9bdafebe3cfd31d195568ef8427 Mon Sep 17 00:00:00 2001 From: z7zmey Date: Tue, 5 Dec 2017 23:36:28 +0200 Subject: [PATCH] name nodes --- example.php | 5 +- node/name/fully_qualified.go | 18 + node/name/name.go | 27 + node/name/name_part.go | 27 + node/name/relative.go | 19 + parser/parser.go | 1287 +++++++++-------- parser/parser.y | 31 +- .../scalar}/node_scalar_string_test.go | 0 8 files changed, 753 insertions(+), 661 deletions(-) create mode 100644 node/name/fully_qualified.go create mode 100644 node/name/name.go create mode 100644 node/name/name_part.go create mode 100644 node/name/relative.go rename test/{ => node/scalar}/node_scalar_string_test.go (100%) diff --git a/example.php b/example.php index e9e898f..52b2ce0 100644 --- a/example.php +++ b/example.php @@ -1,3 +1,2 @@ - reserved_non_modifiers %type semi_reserved -%type top_statement namespace_name name statement function_declaration_statement +%type top_statement name statement function_declaration_statement %type class_declaration_statement trait_declaration_statement %type interface_declaration_statement interface_extends_list %type group_use_declaration inline_use_declarations inline_use_declaration @@ -206,7 +207,7 @@ func Parse(src io.Reader, fName string) node.Node { %type method_modifiers non_empty_member_modifiers member_modifier %type class_modifiers use_type -%type encaps_list backticks_expr +%type encaps_list backticks_expr namespace_name %% @@ -242,14 +243,14 @@ top_statement_list: ; namespace_name: - T_STRING { $$ = node.NewSimpleNode("NamespaceParts").Append(node.TokenNode("NsPart", $1)); } - | namespace_name T_NS_SEPARATOR T_STRING { $$ = $1.Append(node.TokenNode("NsPart", $3)); } + T_STRING { $$ = []node.Node{name.NewNamePart($1)} } + | namespace_name T_NS_SEPARATOR T_STRING { $$ = append($1, name.NewNamePart($3)) } ; name: - namespace_name { $$ = node.NewSimpleNode("Name").Append($1); } - | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$ = node.NewSimpleNode("Name").Append($3).Attribute("Relative", "true"); } - | T_NS_SEPARATOR namespace_name { $$ = node.NewSimpleNode("Name").Append($2).Attribute("FullyQualified", "true"); } + namespace_name { $$ = name.NewName($1) } + | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$ = name.NewRelative($3) } + | T_NS_SEPARATOR namespace_name { $$ = name.NewFullyQualified($2) } ; top_statement: @@ -259,9 +260,9 @@ top_statement: | trait_declaration_statement { $$ = $1; } | interface_declaration_statement { $$ = $1; } | T_HALT_COMPILER '(' ')' ';' { $$ = node.NewSimpleNode("THaltCompiler") } - | T_NAMESPACE namespace_name ';' { $$ = node.NewSimpleNode("Namespace").Append($2); } + | T_NAMESPACE namespace_name ';' { $$ = node.NewSimpleNode("Namespace").Append(name.NewName($2)); } | T_NAMESPACE namespace_name '{' top_statement_list '}' - { $$ = node.NewSimpleNode("Namespace").Append($2).Append($4) } + { $$ = node.NewSimpleNode("Namespace").Append(name.NewName($2)).Append($4) } | T_NAMESPACE '{' top_statement_list '}' { $$ = node.NewSimpleNode("Namespace").Append($3) } | T_USE mixed_group_use_declaration ';' { $$ = $2; } | T_USE use_type group_use_declaration ';' { $$ = $3.Append($2) } @@ -277,16 +278,16 @@ use_type: group_use_declaration: namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}' - { $$ = node.NewSimpleNode("GroupUse").Append($1).Append($4) } + { $$ = node.NewSimpleNode("GroupUse").Append(name.NewName($1)).Append($4) } | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}' - { $$ = node.NewSimpleNode("GroupUse").Append($2).Append($5) } + { $$ = node.NewSimpleNode("GroupUse").Append(name.NewName($2)).Append($5) } ; mixed_group_use_declaration: namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' - { $$ = node.NewSimpleNode("MixedGroupUse").Append($1).Append($4); } + { $$ = node.NewSimpleNode("MixedGroupUse").Append(name.NewName($1)).Append($4); } | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' - { $$ = node.NewSimpleNode("MixedGroupUse").Append($2).Append($5); } + { $$ = node.NewSimpleNode("MixedGroupUse").Append(name.NewName($2)).Append($5); } ; possible_comma: @@ -317,8 +318,8 @@ inline_use_declaration: ; unprefixed_use_declaration: - namespace_name { $$ = node.NewSimpleNode("UseElem").Append($1); } - | namespace_name T_AS T_STRING { $$ = node.NewSimpleNode("UseElem").Append($1).Append(node.NewSimpleNode("as").Attribute("value", $3.String())); } + namespace_name { $$ = node.NewSimpleNode("UseElem").Append(name.NewName($1)); } + | namespace_name T_AS T_STRING { $$ = node.NewSimpleNode("UseElem").Append(name.NewName($1)).Append(node.NewSimpleNode("as").Attribute("value", $3.String())); } ; use_declaration: diff --git a/test/node_scalar_string_test.go b/test/node/scalar/node_scalar_string_test.go similarity index 100% rename from test/node_scalar_string_test.go rename to test/node/scalar/node_scalar_string_test.go