Home   Archive   Permalink



Recursive Parse

Please consider:
    
i: ["[1]" "[2]"]
rule: [thru "[" keep to "]" | rule]
    
parse i [collect [into rule]]
== [#"1"]
    
but would like to get [#"1" #"2"]
    
What is wrong?


posted by:   lib0     5-Dec-2018/9:46:35-8:00



I presume this is using Red's PARSE (from COLLECT usage). It seems one of your problems here is that you are not fully matching the string--you are going TO "]" but not going through it.
    
However, I can't quite see why you are using a recursive rule in the first place. It seems to me you could get to your result as follows:
    
     rule: [thru "[" keep to "]" skip] ; will match each string
     parse i [collect [some into rule]]


posted by:   Chris     6-Dec-2018/13:30:24-8:00



Another way to write it that would be recursive (I don't see this as beneficial vs. using SOME) would be:
    
     rule: [into [thru "[" keep to "]" skip] opt rule]
     parse i [collect rule]

posted by:   Chris     6-Dec-2018/14:13:18-8:00



Thanks Chris.
    
This was a minimal example, I'll try to see if recursive is necessary or not for the bigger picture.

posted by:   lib0     11-Dec-2018/6:44:13-8:00