Toy XML parser
ometa XMLParser {
expr = (~'<' char)*:c -> c.join('')
| '<' (~'>' char)+:c '>' expr*:b seq('') (~'>' char)+:c '>' -> [c.join('') , b]
}
model = "zz"
alert(XMLParser.matchAll(model, 'expr'))
//converting XML trees to ASTs
ometa XMLParser {
inelement:x = seq(x) (~seq(x) char)*:c seq(x) -> [x , c.join('')],
stuff = inelement(''):c -> c,
expr = stuff:s
}
model = "bb"
alert(XMLParser.matchAll(model, 'expr'))
//parsing 2-level xml elements
ometa XMLParser {
otherstuff = seq('') (~seq('') char)*:c seq('') -> ['b' , c.join('')],
stuff = seq('') (~seq('') otherstuff)*:c seq('') -> ['a' , c.join('')],
expr = stuff:s -> s
}
model = "alalal/./>alalal/./>"
alert(XMLParser.matchAll(model, 'expr'))
//parsing a single xml element
ometa XMLParser {
between :x :y = seq(x) (~seq(y) char)*:c seq(y) -> c.join(''),
stuff = between('',''),
expr = stuff:s -> s
}
model = "alalal/./>"
alert(XMLParser.matchAll(model, 'expr'))