summaryrefslogtreecommitdiff
path: root/docs/examples/parsing/ListParsers.scala
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/parsing/ListParsers.scala')
-rw-r--r--docs/examples/parsing/ListParsers.scala30
1 files changed, 30 insertions, 0 deletions
diff --git a/docs/examples/parsing/ListParsers.scala b/docs/examples/parsing/ListParsers.scala
new file mode 100644
index 0000000000..f503a0139f
--- /dev/null
+++ b/docs/examples/parsing/ListParsers.scala
@@ -0,0 +1,30 @@
+package examples.parsing
+
+import scala.util.parsing.combinator1.syntactical.StandardTokenParsers
+
+object ListParsers extends StandardTokenParsers {
+ lexical.delimiters ++= List("(", ")", ",")
+
+ def expr: Parser[Any] = "(" ~ exprs ~ ")" | ident | numericLit
+ def exprs: Parser[Any] = expr ~ rep ("," ~ expr)
+
+ def main(args: Array[String]) {
+ val tokens = new lexical.Scanner(args(0))
+ println(args(0))
+ println(phrase(expr)(tokens))
+ }
+}
+
+object ListParsers1 extends StandardTokenParsers {
+ lexical.delimiters ++= List("(", ")", ",")
+
+ def expr: Parser[Any] = "(" ~> exprs <~ ")" | ident | numericLit
+
+ def exprs: Parser[List[Any]] = expr ~ rep ("," ~> expr) ^^ { case x ~ y => x :: y }
+
+ def main(args: Array[String]) {
+ val tokens = new lexical.Scanner(args(0))
+ println(args(0))
+ println(phrase(expr)(tokens))
+ }
+}