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?

Reply via email to