I'm having some trouble setting up the re2c to allow the isset/unset. Here are the definitions, I've added the two T_ISSET statements:
------------------------------------------------------------ accessors: accessor_function accessor_function accessor_function accessor_function | accessor_function accessor_function accessor_function | accessor_function accessor_function | accessor_function | /* Empty */ ; accessor_modifiers: /* empty */ { Z_LVAL($$.u.constant) = CG(access_type); } | non_empty_accessor_modifiers { $$ = $1; } ; non_empty_accessor_modifiers: accessor_modifier { $$ = $1; } | non_empty_accessor_modifiers accessor_modifier { Z_LVAL($$.u.constant) = zend_do_verify_access_types(&$1, &$2); } accessor_modifier: T_PUBLIC { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; } | T_PROTECTED { Z_LVAL($$.u.constant) = ZEND_ACC_PROTECTED; } | T_PRIVATE { Z_LVAL($$.u.constant) = ZEND_ACC_PRIVATE; } | T_STATIC { Z_LVAL($$.u.constant) = ZEND_ACC_STATIC; } | T_FINAL { Z_LVAL($$.u.constant) = ZEND_ACC_FINAL; } ; accessor_function: T_ISSET { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; zend_do_begin_accessor_declaration(&$1, CG(accessor_node), &$$, 0 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_accessor_declaration(&$1, CG(accessor_node), &$$, &$3 TSRMLS_CC); } | T_ISSET { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; zend_do_begin_accessor_declaration(&$1, CG(accessor_node), &$$, 0 TSRMLS_CC); zend_do_end_accessor_declaration(&$1, CG(accessor_node), &$$, NULL TSRMLS_CC); } ';' | accessor_modifiers is_reference T_STRING { zend_do_begin_accessor_declaration(&$3, CG(accessor_node), &$1, $2.op_type TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_accessor_declaration(&$3, CG(accessor_node), &$1, &$5 TSRMLS_CC); } | accessor_modifiers is_reference T_STRING { zend_do_begin_accessor_declaration(&$3, CG(accessor_node), &$1, $2.op_type TSRMLS_CC); zend_do_end_accessor_declaration(&$3, CG(accessor_node), &$1, NULL TSRMLS_CC); } ';' ;------------------------------------------------------------ Here is the PHP it's trying to parse: public $Hours { get { echo "Getting Hours\r\n"; return $this->Seconds / 3600; } set { // The variable $value holds the incoming value to be "set" echo "Setting Hours to {$value}\r\n"; $this->Seconds = $value * 3600; } isset { return $this->Seconds != NULL; } unset { $this->Seconds = NULL; } } $1 of the first T_ISSET is matching against "\n\t\tisset {..." (... being the rest of the set body through to the end of the script. What's going on here?