It sounds like you have something working. Do you need any further help? Regards, Nigel Thorne
--- "Man, I'm going to have so many chickens when this lot hatch!" On Sat, Jun 22, 2013 at 2:14 PM, Li Dong <[email protected]> wrote: > Dear Nigel and all, > > I have written a recursive method to convert the parsed hash produced by > Parslet into RubyTree. In RubyTree, I use the offset interval of matches > as the > node name (or key), and store the line range in node content (a hash). > Here is > an example: > > Input: > > type, public, extends(list_elem_t<foo_t>) :: foo_t > integer i > contains > procedure :: init => foo_init > end type foo_t > > Output (by changing 'print_tree' method in RubyTree): > > * type_declaration (): > |---+ type_attribut es (): > | |---+ type_attribute (): > | +---> attribute (): public > | +---+ type_attribute (): > |---> attribute (): extends > +---+ attribute_parameter (): > +---+ template_instance (): > |---> id (template_name): list_elem_t > +---+ template_arguments (): > +---+ expression (): > +---+ left_expression (): > +---+ id_with_scripts (left_item): > &nbs p; +---> id (): foo_t > |---> id (type_name): foo_t > |---+ declarations (): > | +---+ data_declaration (): > |---+ intrinsic_type (type): > | +---> type_name (): integer > +---+ data_list (): > +---+ data (): > +---+ id_with_scripts (): > +---> id (): i > |---+ tbp_declarations (): > | +---+ tbp_declaration (): > |---> id (tbp_name): init > +---> id (actual_tbp_name): foo_init > +---> id (end_name): foo_t > > The texts in parens are the rol es of the matches, and the texts after > colon are > the contents. > > The method can be found in > > https://gist.github.com/dongli/5791976#file-fortran_parser-rb-L635-L680 > > This is my first try, maybe needs polish. > > I have used the simple and stupid 'Mark' atom that I added to get > the bounding > locations of the important matches, but it is not accepted (no offence~), > so > the gist can not be run in your environment by far. I will move that atom > into > my FortranParser later. > > Cheers, > > Li > > 在 2013-6-21,下午10:34,Nigel Thorne <[email protected]> 写道: > > Give an example of something you have generated from parslet, and what you > want it to become. > > A failing unit test would be a good way to explain the problem you are > having. > > Cheers > Nigel > > > --- > "No man is an island... except Philip" > > > On Fri, Jun 21, 2013 at 12:04 PM, Li Dong <[email protected]> wrote: > >> Dear all, >> >> I would like to know how to turn the parsed hash tree into RubyTree[1]. By >> doing this, I can custom the behavior of each node. For example, check if >> there >> is any specific node in a subtree. Is this a practical way for doing >> post-processing on the parsed tree? >> >> How to do this through 'Transform'? Need I write a transforming rule for >> each >> parsing rule, which will be very cumbersome? I imagine this should be >> through >> a recursive method. >> >> Comment and advice is appreciated! >> >> Best, >> >> Li >> >> [1] http://rubytree.rubyforge.org >> >> >> >> > >
