diff --git a/parser.go b/parser.go index a483d6c..f06414a 100644 --- a/parser.go +++ b/parser.go @@ -367,14 +367,11 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser.y:1067 +//line parser.y:1083 const src = ` unprefixed_use_declaration %type use_declaration %type trait_declaration_statement +%type interface_declaration_statement +%type interface_extends_list %% @@ -340,9 +342,8 @@ top_statement: | function_declaration_statement { $$ = $1 } | class_declaration_statement { $$ = $1; } | trait_declaration_statement { $$ = $1; } - + | interface_declaration_statement { $$ = $1; } | T_HALT_COMPILER '(' ')' ';' { $$ = Node("THaltCompiler") } - | T_NAMESPACE namespace_name ';' { $$ = Node("Namespace").append($2); } | T_NAMESPACE namespace_name '{' top_statement_list '}' { $$ = Node("Namespace").append($2).append($4) } @@ -689,6 +690,21 @@ trait_declaration_statement: T_TRAIT T_STRING '{' class_statement_list '}' { $$ = Node("Trait").attribute("name", $2).append($4) } ; +interface_declaration_statement: + T_INTERFACE T_STRING interface_extends_list '{' class_statement_list '}' + { + $$ = Node("Interface"). + attribute("name", $2). + append(Node("Extends").append($3)). + append($5); + } +; + +interface_extends_list: + /* empty */ { $$ = Node("") } + | T_EXTENDS name_list { $$ = $2; } +; + class_statement_list: class_statement_list class_statement { $$ = $1.append($2) } | /* empty */ { $$ = Node("Stmt") } @@ -871,7 +887,7 @@ type: ; return_type: - /* empty */ { $$ = Node("void"); } + /* empty */ { $$ = Node("No return type"); } | ':' type_expr { $$ = $2; } ; @@ -1067,12 +1083,9 @@ static_member: %% const src = `