diff options
Diffstat (limited to 'sources')
-rw-r--r-- | sources/examples/parsers.scala | 28 | ||||
-rw-r--r-- | sources/scala/Predef.scala | 7 | ||||
-rw-r--r-- | sources/scala/tools/scalac/typechecker/Analyzer.scala | 2 |
3 files changed, 34 insertions, 3 deletions
diff --git a/sources/examples/parsers.scala b/sources/examples/parsers.scala index bef1e960cb..2ef0d778b9 100644 --- a/sources/examples/parsers.scala +++ b/sources/examples/parsers.scala @@ -58,6 +58,16 @@ abstract class ListParsers extends Parsers { def expr : Parser = ident ||| number ||| list; } +abstract class ExprParsers extends Parsers { + def chr(p: char => boolean): Parser; + def chr(c: char): Parser = chr(d: char => d == c); + + def digit : Parser = chr(Character.isDigit); + def number : Parser = digit &&& rep(digit); + def summand : Parser = number ||| chr('(') &&& expr &&& chr(')'); + def expr : Parser = summand &&& rep(chr('+') &&& summand) +} + class ParseString(s: String) extends Parsers { type intype = int; val input = 0; @@ -68,12 +78,26 @@ class ParseString(s: String) extends Parsers { } } -object Test { +object TestList { def main(args: Array[String]): unit = if (args.length == 1) { val ps = new ListParsers with ParseString(args(0)); - ps.exprs(input) match { + ps.expr(ps.input) match { + case Some(n) => + System.out.println("parsed: " + args(0).substring(0, n)); + case None => + System.out.println("nothing parsed"); + } + } else System.out.println("usage: java examples.Test <expr-string>"); +} + +object TestExpr { + + def main(args: Array[String]): unit = + if (args.length == 1) { + val ps = new ExprParsers with ParseString(args(0)); + ps.expr(ps.input) match { case Some(n) => System.out.println("parsed: " + args(0).substring(0, n)); case None => diff --git a/sources/scala/Predef.scala b/sources/scala/Predef.scala index 315c9a2fe6..81b2ce59f3 100644 --- a/sources/scala/Predef.scala +++ b/sources/scala/Predef.scala @@ -26,6 +26,10 @@ object Predef { type boolean = scala.Boolean; type unit = scala.Unit; + type String = java.lang.String; + type NullPointerException = java.lang.NullPointerException; + type Throwable = java.lang.Throwable; + /** Create an array with given elements. * * @param xs the elements to put in the array @@ -63,4 +67,7 @@ object Predef { val Text = scala.xml.Text; + type Function[-a,+b] = Function1[a,b]; + } +* diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala index 76355d1a6e..e4c18047c1 100644 --- a/sources/scala/tools/scalac/typechecker/Analyzer.scala +++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala @@ -362,7 +362,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer( val grandparents = parents(i).parents(); if (grandparents.length > 0 && !parents(0).isSubType(grandparents(0))) error(constrs(i).pos, "illegal inheritance;\n " + parents(0) + - " does not conform to " + parents(i) + "'s supertype"); + " does not conform to " + parents(i) + "'s supertype " + grandparents(0)); } if ((bsym.flags & FINAL) != 0) { error(constrs(i).pos, "illegal inheritance from final class"); |