I've ended up with this concoction:

class PLYParser(object):
    def _create_opt_rule(self, rulename):
        """ Given a rule name, creates an optional ply.yacc rule
            for it. The name of the optional rule is
            <rulename>_opt
        """
        optname = rulename + '_opt'

        def optrule(self, p):
            p[0] = p[1]

        optrule.__doc__ = '%s : empty\n| %s' % (optname, rulename)
        optrule.__name__ = 'p_%s' % optname
        setattr(self.__class__, optrule.__name__, optrule)


if __name__ == '__main__':
    pp = PLYParser()
    pp._create_opt_rule('java')

    ar = [4, 6]
    pp.p_java_opt(ar)

    print ar
    print pp.p_java_opt.__doc__

    print dir(pp)


---------------------

._create_opt_rule creates a ply.yacc valid rule, with a correct
docstring.

Tried it in my parsing code (using PLY 2.5) - it works, and saves
quite a bit of boilerplate code. So I'm putting it here in the hope
that it will be useful.

Dave - adding rule? and rule* to PLY would still be much cooler :-)

Eli

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"ply-hack" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/ply-hack?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to