octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Classdef parser patch


From: David Grundberg
Subject: Re: Classdef parser patch
Date: Sat, 01 Aug 2009 08:44:14 +0200
User-agent: Thunderbird 2.0.0.22 (Windows/20090605)

John W. Eaton skrev:
On 28-Apr-2009, Ryan Rusaw wrote:

| Attached is a first stab at adding the basis for classdef files to the
| lexer & the parser. With it the parser should be able to correctly
| parse classdef files, although it currently doesn't do anything more
| with them, as a number of items are still necessary to complete a
| serviceable implementation:
| | 1. +package directory support.
| 2. classdef support added to pt-* hierarchy.
| 3. octave_value subclass for classdef objects.
| 4. integrate with metaclass code, either the code Michael Goffioul
| provided previously on the mailing list or something similar.
| 5. add support for class events.
| 6. add support for the automatic resolution of class property get & set 
methods.
| | Note: I used the Matlab documentation available at
| 
http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab_oop/ug_intropage.html
| as the basis for the changes, so it should be as close to complete as
| the documentation allowed. If anyone finds something I've missed or
| overlooked, please let me know.

I checked in this changeset with some additional changes.

| +maybe_property_get_set : // empty
| + { | + if (reading_classdef_file || lexer_flags.parsing_classdef) | + { | + lexer_flags.maybe_classdef_get_set_method = true; | + } | + }
| +             ;
| +
|  function_beg : push_fcn_symtab FCN stash_comment
| -               { $$ = $3; }
| -             ;
| -
| -function     : function_beg function1
| + { $$ = $3; | + if (reading_classdef_file || lexer_flags.parsing_classdef) | + {
| +                         lexer_flags.parsing_class_method = true;
| + } | + }
| +             ;
| +             
| +function : function_beg function1
|                 {
|                   $$ = finish_function (0, $2, $1);
|                   recover_from_parsing_function ();
|                 }
| -             | function_beg return_list '=' function1
| -               {
| -                 $$ = finish_function ($2, $4, $1);
| +             | function_beg return_list maybe_property_get_set '=' function1
| +               {
| +                 $$ = finish_function ($2, $5, $1);
|                   recover_from_parsing_function ();
|                 }
|               ;

This doesn't look quite right to me.  It appears that
lexer_flags.parsing_class_method will be set to true after
function_beg is recognized in a classdef file, but then you have
maybe_property_get_set doing that again in the

  function_beg return_list maybe_property_get_set '=' function1

pattern.  Since that seems redundant, I eliminated the
maybe_property_get_set non-terminal.  But it seems that you might have
intended to avoid having lexer_flags.parsing_class_method set to true
when the return_list is parsed.  I don't see how to do that without
adding another shift/reduce conflict to the parser, but maybe you or
someone else will have a clue about how it could be done, or maybe
there is a better way to handle the get/set methods.

David, I'm copying you on this mail because you recently modified the
parser.  Not surprisingly, your changes caused some conflicts when
applying Ryan's patch.  I fixed them up as best I could, but it would
be helpful if both of you could look at the current versions of
parse.y and lex.l and see if I screwed anything up with my merge.

I've looked at the diff and it seems alright, as far as I can tell.

Regards,
David

Ryan, also created a ChangeLog entry for you.  It would be helpful if
you could include a ChangeLog entry with future changesets.

Thanks,

jwe



reply via email to

[Prev in Thread] Current Thread [Next in Thread]