  
  additional_catches:
  		non_empty_additional_catches { $$ = $1; }
-@@ -262,6 +280,14 @@
+@@ -262,6 +280,18 @@
  		unticked_class_declaration_statement	{ zend_do_ticks(TSRMLS_C); }
  ;
  
-+class_declaration_statements:
-+		class_declaration_statement class_declaration_statements
++package_inner_statement_list:
++		package_inner_statement package_inner_statement_list
 +	|   /* empty */
++;
++
++package_inner_statement:
++		class_declaration_statement
 +;
 +
 +package_declaration_statement:

 	|	T_CLONE expr { zend_do_clone(&$$, &$2 TSRMLS_CC); }
 	|	variable T_PLUS_EQUAL expr 	{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); }
 	|	variable T_MINUS_EQUAL expr	{ zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
@@ -627,10 +709,12 @@
 
 fully_qualified_class_name:
 		T_STRING { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); }

+			parameter_list ')' throws method_body { zend_do_abstract_method(&$6, &$2, &$12 TSRMLS_CC); zend_do_end_function_declaration(&$3 TSRMLS_CC); }
+	|	method_modifiers T_OPERATOR { $2.u.opline_num = CG(zend_lineno); } is_reference operator_token { zend_do_begin_function_declaration(&$2, &$5, 1, $4.op_type, &$1 TSRMLS_CC); } '(' 
+			parameter_list ')' throws method_body { zend_do_abstract_method(&$5, &$1, &$11 TSRMLS_CC); zend_do_end_function_declaration(&$2 TSRMLS_CC); }
 ;
 
+throws:
+		/* empty */
+	|	T_THROWS throws_list
+;
+
+throws_list:
+		throws_class_name 					{ zend_do_throws(&$1 TSRMLS_CC); }
+	|	throws_list ',' throws_class_name	{ zend_do_throws(&$3 TSRMLS_CC); }
