ometa joy { number = digit+:n -> parseInt(n.join('')), symbol = '+' | '-', list = '[' nextWord*:n space* ']' -> n, nextWord = space* (number | symbol | list), toplevel = nextWord*:l space* end -> l } tree = joy.matchAll("2 3[4 5]+", "toplevel") alert(tree)