// These are a couple of experiments I'm doing to think about John Leuner's OMeta extension, // inspired by ideas in https://lists.csail.mit.edu/pipermail/peg/2006-November/000067.html // -Alex ometa XML <: Parser { tag = firstAndRest("letter", "letterOrDigit"):xs -> { xs.join('') }, element = "<" tag:t ">" element*:es "" ?{ t == s } -> { es.splice(0, 0, t); es } | (~'<' char)+:cs -> { cs.join('') } } XML.matchAll("hello
world
", "element") ometa Python <: Parser { space = ~'\n' super("space"), indent = space*:ss -> { ss.length }, line = (~'\n' char)*:cs '\n' -> { cs.join('') }, block :min = &indent:i ?{ i >= min } stmt(i)*, stmt :req = indent:i ?{ i == req } line | block(req + 1), start = block(0) } Python.matchAll(""" hello foo bar baz good-bye """, "start")