diff --git a/parser.go b/parser.go index f922764..c35e3e7 100644 --- a/parser.go +++ b/parser.go @@ -366,11 +366,12 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser.y:796 +//line parser.y:813 const src = ` member_modifier %type property_list %type property +%type class_const_list +%type class_const_decl +%type method_modifiers %% @@ -288,9 +291,9 @@ top_statement_list: top_statement: statement { $$ = $1 } | function_declaration_statement { $$ = $1 } + | class_declaration_statement { $$ = $1; } | T_INCLUDE identifier ';' { $$ = $2; /*TODO: identifier stub, refactor it*/ } | T_NAMESPACE namespace_name ';' { $$ = Node("Namespace").append($2); } - | class_declaration_statement { $$ = $1; } ; inner_statement_list: @@ -586,6 +589,7 @@ class_statement_list: class_statement: variable_modifiers property_list ';' { $$ = $2.append($1) } + | method_modifiers T_CONST class_const_list ';' { $$ = $3.append($1); } ; variable_modifiers: @@ -593,6 +597,19 @@ variable_modifiers: | T_VAR { $$ = Node("VarMemberModifier") } ; +class_const_list: + class_const_list ',' class_const_decl { $$ = $1.append($3) } + | class_const_decl { $$ = Node("ConstList").append($1) } +; + +class_const_decl: + identifier '=' expr { $$ = Node("Const").append($3) } +; + +method_modifiers: + /* empty */ { $$ = Node("PublicMemberModifier"); } + | non_empty_member_modifiers { $$ = $1; } + non_empty_member_modifiers: member_modifier { $$ = $1; } | non_empty_member_modifiers member_modifier { $$ = $1.append($2) } @@ -799,6 +816,7 @@ const src = `