import init.lean.parser.parser open Lean open Lean.Parser namespace Foo @[builtinTestParser] def pairParser := parser! "(" >> numLit >> "," >> ident >> ")" @[builtinTestParser] def pairsParser := parser! "{" >> sepBy1 testParser "," >> "}" @[builtinTestParser] def functionParser := parser! "fun" >> ident >> "," >> testParser @[builtinTestParser] def identParser : Parser := ident @[builtinTestParser] def numParser : Parser := numLit @[builtinTestParser] def strParser : Parser := strLit end Foo def testParser (input : String) : IO Unit := do env ← mkEmptyEnvironment, testPTables ← builtinTestParsingTable.get, stx ← IO.ofExcept $ runParser env testPTables input, IO.println stx def main (xs : List String) : IO Unit := do testParser "(10, hello)", testParser "{ hello, 400, \"hello\", (10, hello), /- comment -/ (20, world), { fun x, (10, hello) }, { (30, foo) } }", -- Following example has syntax error testParser "{ hello, 400, \"hello\", (10, hello), /- comment -/ (20, world), { fun x, [ (10, hello) }, { (30, foo) } }"