ometa VirgilCompiler <: Parser { Ident = String:s -> ["var", s], TypeDecl = "test" -> "test", programDecl = "program" spaces Ident , module = (programDecl)(TypeDecl) } input = "program cs239 test" VirgilCompiler.matchAll(input, "module") ometa LCParser <: Parser { expr = "λ" letter:x "." expr:e -> ['lambda', x, e] | "(" expr:f expr:a ")" -> ['app', f, a] | letter:x -> ['var', x], parse = expr:ans spaces end -> ans } LCParser.matchAll("(λx.x λy.y)", "parse")