From 6b7bf8b2af85f179f88745d6b30b28ca4745d807 Mon Sep 17 00:00:00 2001 From: vadim Date: Thu, 30 Nov 2017 19:35:13 +0200 Subject: [PATCH] parse class implements, extends --- parser.go | 3247 +++++++++++++++++++++++++++-------------------------- parser.y | 39 +- 2 files changed, 1674 insertions(+), 1612 deletions(-) diff --git a/parser.go b/parser.go index f06414a..3816d5e 100644 --- a/parser.go +++ b/parser.go @@ -367,11 +367,14 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser.y:1083 +//line parser.y:1109 const src = ` trait_declaration_statement %type interface_declaration_statement %type interface_extends_list +%type extends_from +%type implements_list %% @@ -671,9 +673,23 @@ possible_comma: ; class_declaration_statement: - class_modifiers T_CLASS T_STRING '{' class_statement_list '}' - { $$ = $1.attribute("name", $3).append($5) } - | T_CLASS T_STRING '{' class_statement_list '}' { $$ = Node("Class").attribute("name", $2).append($4) } + class_modifiers T_CLASS T_STRING extends_from implements_list '{' class_statement_list '}' + { + $$ = Node("Class"). + attribute("name", $3). + append($1). + append(Node("Extends").append($4)). + append(Node("Implements").append($5)). + append($7); + } + | T_CLASS T_STRING extends_from implements_list '{' class_statement_list '}' + { + $$ = Node("Class"). + attribute("name", $2). + append(Node("Extends").append($3)). + append(Node("Implements").append($4)). + append($6); + } ; class_modifiers: @@ -700,11 +716,21 @@ interface_declaration_statement: } ; +extends_from: + /* empty */ { $$ = Node(""); } + | T_EXTENDS name { $$ = $2; } +; + interface_extends_list: /* empty */ { $$ = Node("") } | T_EXTENDS name_list { $$ = $2; } ; +implements_list: + /* empty */ { $$ = Node(""); } + | T_IMPLEMENTS name_list { $$ = $2; } +; + class_statement_list: class_statement_list class_statement { $$ = $1.append($2) } | /* empty */ { $$ = Node("Stmt") } @@ -1083,9 +1109,12 @@ static_member: %% const src = `