Trouble flattening lists #16

Open
dbarowy opened this Issue Feb 5, 2011 · 1 comment

Comments

Projects
None yet
2 participants
@dbarowy

dbarowy commented Feb 5, 2011

Hi Michael,

Any idea how to do list flattening in a straightforward way with nested rules? If I use the construct below with the input "foo1 foo2 foo3" and then call the value method on my tree, I get "Stack level too deep". Seems that Things will call the morethings method on itself instead of on the matched substring. This appears to be a bug, but maybe I've missed something here...

I can make it work if I add a second rule so that the two rules alternate, but it sure does make the grammar file ugly!

Many thanks,
Dan

grammar SampleGrammar
rule ROOT
(things:Things WS* EOF)
{
def value
list = []
list += things.value
return list
end
}
end

rule Things
    (thing:THING WS* (morethings:Things)?)
    {
        def value
            list = []
            list << thing.value
            list += morethings.value unless morethings.nil?
            return list
        end
    }
end

rule THING
    [a-zA-Z0-9]+
end

rule EOF
    !.
end

rule WS
    [\s\t\r\n\f] 
end

end

@rogerbraun

This comment has been minimized.

Show comment Hide comment
@rogerbraun

rogerbraun Feb 20, 2011

It works if you do it like this:

list += morethings.matches.first.value unless morethings.matches.first.nil?

It works if you do it like this:

list += morethings.matches.first.value unless morethings.matches.first.nil?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment