more accurate scanning of bad input;
authorwenzelm
Tue, 05 Jan 2010 16:29:03 +0100
changeset 34267 92810c85262e
parent 34266 bfe8d6998734
child 34268 b149b7083236
more accurate scanning of bad input;
src/Pure/General/scan.scala
--- a/src/Pure/General/scan.scala	Tue Jan 05 15:45:32 2010 +0100
+++ b/src/Pure/General/scan.scala	Tue Jan 05 16:29:03 2010 +0100
@@ -283,17 +283,20 @@
       val string = quoted("\"") ^^ (x => Token(Token_Kind.STRING, x))
       val alt_string = quoted("`") ^^ (x => Token(Token_Kind.ALT_STRING, x))
 
-      val bad_input = many1(sym => !(symbols.is_blank(sym))) ^^
-        (x => Token(Token_Kind.BAD_INPUT, x))
+      val junk = many1(sym => !(symbols.is_blank(sym)))
+      val bad_delimiter =
+        ("\"" | "`" | "{*" | "(*") ~ junk ^^ { case x ~ y => Token(Token_Kind.BAD_INPUT, x + y) }
+      val bad = junk ^^ (x => Token(Token_Kind.BAD_INPUT, x))
 
 
       /* tokens */
 
       (space | (string | (alt_string | (verbatim ^^ (x => Token(Token_Kind.VERBATIM, x)) |
         comment ^^ (x => Token(Token_Kind.COMMENT, x)))))) |
+      bad_delimiter |
       ((ident | (var_ | (type_ident | (type_var | (nat_ | sym_ident))))) |||
         keyword ^^ (x => Token(if (is_command(x)) Token_Kind.COMMAND else Token_Kind.KEYWORD, x))) |
-      bad_input
+      bad
     }
   }