diff options
Diffstat (limited to 'docs/examples/parsing/ListParsers.scala')
-rw-r--r-- | docs/examples/parsing/ListParsers.scala | 30 |
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)) + } +} |