d77fce
diff --git a/pygments/lexers/ml.py b/pygments/lexers/ml.py
d77fce
index f80d5bf..4fd2c58 100644
d77fce
--- a/pygments/lexers/ml.py
d77fce
+++ b/pygments/lexers/ml.py
d77fce
@@ -142,7 +142,7 @@ class SMLLexer(RegexLexer):
d77fce
             (r'#\s+(%s)' % symbolicid_re, Name.Label),
d77fce
             # Some reserved words trigger a special, local lexer state change
d77fce
             (r'\b(datatype|abstype)\b(?!\')', Keyword.Reserved, 'dname'),
d77fce
-            (r'(?=\b(exception)\b(?!\'))', Text, ('ename')),
d77fce
+            (r'\b(exception)\b(?!\')', Keyword.Reserved, 'ename'),
d77fce
             (r'\b(functor|include|open|signature|structure)\b(?!\')',
d77fce
              Keyword.Reserved, 'sname'),
d77fce
             (r'\b(type|eqtype)\b(?!\')', Keyword.Reserved, 'tname'),
d77fce
@@ -315,15 +315,14 @@ class SMLLexer(RegexLexer):
d77fce
         'ename': [
d77fce
             include('whitespace'),
d77fce
 
d77fce
-            (r'(exception|and)\b(\s+)(%s)' % alphanumid_re,
d77fce
+            (r'(and\b)(\s+)(%s)' % alphanumid_re,
d77fce
              bygroups(Keyword.Reserved, Text, Name.Class)),
d77fce
-            (r'(exception|and)\b(\s*)(%s)' % symbolicid_re,
d77fce
+            (r'(and\b)(\s*)(%s)' % symbolicid_re,
d77fce
              bygroups(Keyword.Reserved, Text, Name.Class)),
d77fce
             (r'\b(of)\b(?!\')', Keyword.Reserved),
d77fce
+            (r'(%s)|(%s)' % (alphanumid_re, symbolicid_re), Name.Class),
d77fce
 
d77fce
-            include('breakout'),
d77fce
-            include('core'),
d77fce
-            (r'\S+', Error),
d77fce
+            default('#pop'),
d77fce
         ],
d77fce
 
d77fce
         'datcon': [