ometa FJSParser <: Parser { fromTo :x :y = seq(x) (~seq(y) char)* seq(y), space = super(#space) | fromTo('//', '\n') | fromTo('/*', '*/'), nameFirst = letter | '$' | '_', nameRest = nameFirst | digit, iName = firstAndRest(`nameFirst, `nameRest):r -> r.join(''), isKeyword :x = ?FJSParser._isKeyword(x), name = iName:n ~isKeyword(n) -> [`name, n], keyword = iName:k isKeyword(k) -> [k, k], hexDigit = char:x {self.hexDigits.indexOf(x.toLowerCase())}:v ?(v >= 0) -> v, hexLit = hexLit:n hexDigit:d -> (n * 16 + d) | hexDigit, number = ``0x'' hexLit:n -> [`number, n] | digit+:ws ('.' digit+ | empty -> []):fs -> [`number, parseFloat(ws.join('') + '.' + fs.join(''))], } JSParser.hexDigits = "0123456789abcdef" All // For prototypeing all objects Closures = {} Lists = [] // Arrays Boolean = true && false String = "" && '' Number = 10 && 0xe11a1