src/Pure/ML/ml_lex.scala
changeset 55500 cdbbaa3074a8
parent 55499 2581fbee5b95
child 55501 fdde1d62e1fb
--- a/src/Pure/ML/ml_lex.scala	Sat Feb 15 14:52:51 2014 +0100
+++ b/src/Pure/ML/ml_lex.scala	Sat Feb 15 16:27:58 2014 +0100
@@ -32,6 +32,9 @@
   }
 
   sealed case class Token(val kind: Kind.Value, val source: String)
+  {
+    def is_operator: Boolean = kind == Kind.KEYWORD && !Symbol.is_ascii_identifier(source)
+  }
 
 
 
@@ -52,10 +55,11 @@
   {
     /* string material */
 
+    private val blanks = many(character(Symbol.is_ascii_blank))
     private val blanks1 = many1(character(Symbol.is_ascii_blank))
 
     private val gap = "\\" ~ blanks1 ~ "\\" ^^ { case x ~ y ~ z => x + y + z }
-    private val gap_start = "\\" ~ blanks1 ~ """\z""".r ^^ { case x ~ y ~ _ => x + y }
+    private val gap_start = "\\" ~ blanks ~ """\z""".r ^^ { case x ~ y ~ _ => x + y }
 
     private val escape =
       one(character("\"\\abtnvfr".contains(_))) |
@@ -96,7 +100,7 @@
           "\"" ~ ml_string_body ~ ("\"" | gap_start) ^^
             { case x ~ y ~ z => result(x + y + z, if (z == "\"") Scan.Finished else ML_String) }
         case ML_String =>
-          blanks1 ~ opt_term("\\" ~ ml_string_body ~ ("\"" | gap_start)) ^^
+          blanks ~ opt_term("\\" ~ ml_string_body ~ ("\"" | gap_start)) ^^
             { case x ~ Some(y ~ z ~ w) =>
                 result(x + y + z + w, if (w == "\"") Scan.Finished else ML_String)
               case x ~ None => result(x, ML_String) }