Hi Nigel,

No further help is needed on this topic. Thanks!

Cheers,
Li

在 2013-6-24,下午7:13,Nigel Thorne <[email protected]> 写道:

> 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
>> 
>> 
>> 
>> 
> 
> 

Reply via email to