Make ELLIPSIS a separate token. This makes it a syntax error to write ". .    ." for Ellipsis.
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 79b702c..f07ec97 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -113,7 +113,7 @@
                                token.LBRACE: self.atom_lbrace,
                                token.NUMBER: self.atom_number,
                                token.STRING: self.atom_string,
-                               token.DOT: self.atom_ellipsis,
+                               token.ELLIPSIS: self.atom_ellipsis,
                                token.NAME: self.atom_name,
                                }
         self.encoding = None
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index 1a14756..bd80db6 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -121,6 +121,7 @@
     def testEllipsis(self):
         x = ...
         self.assert_(x is Ellipsis)
+        self.assertRaises(SyntaxError, eval, ".. .")
 
 class GrammarTests(unittest.TestCase):
 
diff --git a/Lib/token.py b/Lib/token.py
index 147536c..eb48e76 100755
--- a/Lib/token.py
+++ b/Lib/token.py
@@ -61,9 +61,10 @@
 DOUBLESLASHEQUAL = 49
 AT = 50
 RARROW = 51
-OP = 52
-ERRORTOKEN = 53
-N_TOKENS = 54
+ELLIPSIS = 52
+OP = 53
+ERRORTOKEN = 54
+N_TOKENS = 55
 NT_OFFSET = 256
 #--end constants--
 
diff --git a/Lib/tokenize.py b/Lib/tokenize.py
index e502da9..cda82ca 100644
--- a/Lib/tokenize.py
+++ b/Lib/tokenize.py
@@ -83,7 +83,7 @@
                  r"~")
 
 Bracket = '[][(){}]'
-Special = group(r'\r?\n', r'[:;.,@]')
+Special = group(r'\r?\n', r'\.\.\.', r'[:;.,@]')
 Funny = group(Operator, Bracket, Special)
 
 PlainToken = group(Number, Funny, String, Name)
@@ -334,8 +334,8 @@
                 spos, epos, pos = (lnum, start), (lnum, end), end
                 token, initial = line[start:end], line[start]
 
-                if initial in numchars or \
-                   (initial == '.' and token != '.'):      # ordinary number
+                if (initial in numchars or                  # ordinary number
+                    (initial == '.' and token != '.' and token != '...')):
                     yield (NUMBER, token, spos, epos, line)
                 elif initial in '\r\n':
                     yield (NL if parenlev > 0 else NEWLINE,