summaryrefslogtreecommitdiff
path: root/docs/examples/parsing/JSON.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-09-16 18:01:02 +0000
committerMartin Odersky <odersky@gmail.com>2007-09-16 18:01:02 +0000
commit7fe7bace8a7a55d888f4ebdce8d778ceb4384546 (patch)
tree3d1041a517a92f2a05f48ff80be116f316aadef1 /docs/examples/parsing/JSON.scala
parent0b2f65aa6c6b3bb3e7628720893fb8116fdc8f71 (diff)
downloadscala-7fe7bace8a7a55d888f4ebdce8d778ceb4384546.tar.gz
scala-7fe7bace8a7a55d888f4ebdce8d778ceb4384546.tar.bz2
scala-7fe7bace8a7a55d888f4ebdce8d778ceb4384546.zip
combinator1 parser changes + examples added
Diffstat (limited to 'docs/examples/parsing/JSON.scala')
-rwxr-xr-xdocs/examples/parsing/JSON.scala44
1 files changed, 44 insertions, 0 deletions
diff --git a/docs/examples/parsing/JSON.scala b/docs/examples/parsing/JSON.scala
new file mode 100755
index 0000000000..bbba25f744
--- /dev/null
+++ b/docs/examples/parsing/JSON.scala
@@ -0,0 +1,44 @@
+package examples.parsing
+
+import scala.util.parsing.combinator1.syntactical.StandardTokenParsers
+
+object JSON extends StandardTokenParsers {
+ lexical.delimiters += ("{", "}", "[", "]", ":", ",")
+ lexical.reserved += ("null", "true", "false")
+
+ def obj : Parser[Any] = "{" ~ repsep(member, ",") ~ "}"
+ def arr : Parser[Any] = "[" ~ repsep(value, ",") ~ "]"
+ def member: Parser[Any] = ident ~ ":" ~ value
+ def value : Parser[Any] = ident | numericLit | obj | arr |
+ "null" | "true" | "false"
+
+ def main(args: Array[String]) {
+ val tokens = new lexical.Scanner(args(0))
+ println(args(0))
+ println(phrase(value)(tokens))
+ }
+}
+object JSON1 extends StandardTokenParsers {
+ lexical.delimiters += ("{", "}", "[", "]", ":", ",")
+ lexical.reserved += ("null", "true", "false")
+
+ def obj: Parser[Map[String, Any]] =
+ "{" ~> repsep(member, ",") <~ "}" ^^ (Map() ++ _)
+
+ def arr: Parser[List[Any]] =
+ "[" ~> repsep(value, ",") <~ "]"
+
+ def member: Parser[(String, Any)] =
+ ident ~ ":" ~ value ^^ { case name ~ ":" ~ value => (name -> value) }
+
+ def value: Parser[Any] =
+ ident | numericLit ^^ (_.toInt) | obj | arr |
+ "null" ^^^ null | "true" ^^^ true | "false" ^^^ false
+
+ def main(args: Array[String]) {
+ val tokens = new lexical.Scanner(args(0))
+ println(args(0))
+ println(phrase(value)(tokens))
+ }
+}
+