From 0eae9599357eb76fb38d2a95d1d4d6f089b814b3 Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Thu, 7 Feb 2008 12:39:51 +0000 Subject: updated examples and json parser to use combina... updated examples and json parser to use combinator1-style parsing, have not yet renamed combinator -> combinatorold, and combinator1 -> combinator --> doing that using SVN rename, so history is preserved (thus, the build for this revision will break, but the next one should be okay. sorry) --- docs/examples/parsing/ArithmeticParser.scala | 12 ++++++------ docs/examples/parsing/ListParser.scala | 4 ++-- docs/examples/parsing/lambda/Main.scala | 2 +- docs/examples/parsing/lambda/TestParser.scala | 22 +++++++++++----------- 4 files changed, 20 insertions(+), 20 deletions(-) (limited to 'docs') diff --git a/docs/examples/parsing/ArithmeticParser.scala b/docs/examples/parsing/ArithmeticParser.scala index 2aac4b6f6c..57ead13fef 100644 --- a/docs/examples/parsing/ArithmeticParser.scala +++ b/docs/examples/parsing/ArithmeticParser.scala @@ -21,9 +21,9 @@ object arithmeticParser extends StdTokenParsers { type Tokens = StdLexical ; val lexical = new StdLexical lexical.delimiters ++= List("(", ")", "+", "-", "*", "/") - lazy val expr = term*("+" ^^ {(x: int, y: int) => x + y} | "-" ^^ {(x: int, y: int) => x - y}) - lazy val term = factor*("*" ^^ {(x: int, y: int) => x * y} | "/" ^^ {(x: int, y: int) => x / y}) - lazy val factor: Parser[int] = "(" ~ expr ~ ")" | numericLit ^^ (_.toInt) + lazy val expr = term*("+" ^^^ {(x: int, y: int) => x + y} | "-" ^^^ {(x: int, y: int) => x - y}) + lazy val term = factor*("*" ^^^ {(x: int, y: int) => x * y} | "/" ^^^ {(x: int, y: int) => x / y}) + lazy val factor: Parser[int] = "(" ~> expr <~ ")" | numericLit ^^ (_.toInt) def main(args: Array[String]) { println( @@ -41,9 +41,9 @@ object arithmeticParserDesugared extends StdTokenParsers { type Tokens = StdLexical ; val lexical = new StdLexical lexical.delimiters ++= List("(", ")", "+", "-", "*", "/") - lazy val expr = chainl1(term, (keyword("+").^^{(x: int, y: int) => x + y}).|(keyword("-").^^{(x: int, y: int) => x - y})) - lazy val term = chainl1(factor, (keyword("*").^^{(x: int, y: int) => x * y}).|(keyword("/").^^{(x: int, y: int) => x / y})) - lazy val factor: Parser[int] = keyword("(").~(expr.~(keyword(")"))).|(numericLit.^^(x => x.toInt)) + lazy val expr = chainl1(term, (keyword("+").^^^{(x: int, y: int) => x + y}).|(keyword("-").^^^{(x: int, y: int) => x - y})) + lazy val term = chainl1(factor, (keyword("*").^^^{(x: int, y: int) => x * y}).|(keyword("/").^^^{(x: int, y: int) => x / y})) + lazy val factor: Parser[int] = keyword("(").~>(expr.<~(keyword(")"))).|(numericLit.^^(x => x.toInt)) def main(args: Array[String]) { println( diff --git a/docs/examples/parsing/ListParser.scala b/docs/examples/parsing/ListParser.scala index 65354482f3..12805e5e50 100644 --- a/docs/examples/parsing/ListParser.scala +++ b/docs/examples/parsing/ListParser.scala @@ -16,8 +16,8 @@ object listParser { type Elem = Char lazy val ident = rep1(elem("letter", isLetter), elem("letter or digit", isLetterOrDigit)) ^^ {cs => Id(mkString(cs))} - lazy val number = chainl1(elem("digit", isDigit) ^^ (_ - '0'), success ^^ {(accum: Int, d: Int) => accum * 10 + d}) ^^ Num - lazy val list = '(' ~ repsep(expr, ',') ~ ')' ^^ Lst + lazy val number = chainl1(elem("digit", isDigit) ^^ (_ - '0'), success{(accum: Int, d: Int) => accum * 10 + d}) ^^ Num + lazy val list = '(' ~> repsep(expr, ',') <~ ')' ^^ Lst lazy val expr: Parser[Tree] = list | ident | number } diff --git a/docs/examples/parsing/lambda/Main.scala b/docs/examples/parsing/lambda/Main.scala index c0453e75a8..81a175de77 100755 --- a/docs/examples/parsing/lambda/Main.scala +++ b/docs/examples/parsing/lambda/Main.scala @@ -12,7 +12,7 @@ import java.io.InputStreamReader * * Usage: scala examples.parsing.lambda.Main * - * (example files: see test/*.kwi) + * (example files: see test/ *.kwi) * * @author Miles Sabin (adapted slightly by Adriaan Moors) */ diff --git a/docs/examples/parsing/lambda/TestParser.scala b/docs/examples/parsing/lambda/TestParser.scala index 92d370c29b..22257c1731 100755 --- a/docs/examples/parsing/lambda/TestParser.scala +++ b/docs/examples/parsing/lambda/TestParser.scala @@ -34,33 +34,33 @@ trait TestParser extends StdTokenParsers with ImplicitConversions with TestSynt chainl1(expr4, expr3, op3 ^^ {o => (a: Term, b: Term) => App(App(o, a), b)}) def expr4 : Parser[Term] = - ( "\\" ~ lambdas - | "let" ~ name ~ "=" ~ expr1 ~ "in" ~ expr1 ^^ flatten3(Let) - | "if" ~ expr1 ~ "then" ~ expr1 ~ "else" ~ expr1 ^^ flatten3(If) + ( "\\" ~> lambdas + | ("let" ~> name) ~ ("=" ~> expr1) ~ ("in" ~> expr1) ^^ flatten3(Let) + | ("if" ~> expr1) ~ ("then" ~> expr1) ~ ("else" ~> expr1) ^^ flatten3(If) | chainl1(aexpr, success(App(_: Term, _: Term))) ) def lambdas : Parser[Term] = - name ~ ("->" ~ expr1 | lambdas) ^^ flatten2(Lam) + name ~ ("->" ~> expr1 | lambdas) ^^ flatten2(Lam) def aexpr : Parser[Term] = ( numericLit ^^ (_.toInt) ^^ Lit | name ^^ Ref - | "unit" ^^ Unit - | "(" ~ expr1 ~ ")" + | "unit" ^^^ Unit() + | "(" ~> expr1 <~ ")" ) def op1 : Parser[Term] = - "==" ^^ Ref(Name("==")) + "==" ^^^ Ref(Name("==")) def op2 : Parser[Term] = - ( "+" ^^ Ref(Name("+")) - | "-" ^^ Ref(Name("-")) + ( "+" ^^^ Ref(Name("+")) + | "-" ^^^ Ref(Name("-")) ) def op3 : Parser[Term] = - ( "*" ^^ Ref(Name("*")) - | "/" ^^ Ref(Name("/")) + ( "*" ^^^ Ref(Name("*")) + | "/" ^^^ Ref(Name("/")) ) def parse(r: Reader[char]) : ParseResult[Term] = -- cgit v1.2.3