/// a wrong way to match lines... /// produces an infinite number of lines ometa M { eol = '\n' | end, line = (~eol char)*:a eol -> a.join(''), document = line* } test = "line1\nbbbb\nccc\nline4"; alert(M.matchAll(test, "document")); /// a right way ometa M { eol = '\n', line = (~eol char)*:a eol -> a.join('') | char+:a end -> a.join(''), document = line* } test = "line1\nbbbb\nccc\nline4"; alert(M.matchAll(test, "document"));