Skip to content

Trouble flattening lists #16

@dbarowy

Description

@dbarowy

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions