diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py
index dfed562..5686d8b 100644
--- a/Lib/compiler/ast.py
+++ b/Lib/compiler/ast.py
@@ -114,18 +114,18 @@
   def __repr__(self):
     return "Lambda(%s,%s,%s,%s)" % self._children[1:]
 
-class Classdef(Node):
-  nodes['classdef'] = 'Classdef'
+class Class(Node):
+  nodes['class'] = 'Class'
 
   def __init__(self, name, bases, doc, code):
     self.name = name
     self.bases = bases
     self.doc = doc
     self.code = code
-    self._children = ('classdef', name, bases, doc, code)
+    self._children = ('class', name, bases, doc, code)
 
   def __repr__(self):
-    return "Classdef(%s,%s,%s,%s)" % self._children[1:]
+    return "Class(%s,%s,%s,%s)" % self._children[1:]
 
 class Pass(EmptyNode):
   nodes['pass'] = 'Pass'
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 18ec815..0159c31 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -1,16 +1,20 @@
+"""Parse tree transformation module.
+
+Transforms Python source code into an abstract syntax tree (AST)
+defined in the ast module.
+
+The simplest ways to invoke this module are via parse and parseFile.
+parse(buf) -> AST
+parseFile(path) -> AST
+"""
+
 # Copyright 1997-1998 Greg Stein and Bill Tutt
 #
-# transformer.py -- transforms Python parse trees
-#
-# Takes an input parse tree and transforms it into a higher-level parse
-# tree that is a bit more amenable to code generation. Essentially, it
-# simply introduces some additional semantics.
-#
 # Written by Greg Stein (gstein@lyra.org)
 #        and Bill Tutt (rassilon@lima.mudlib.org)
 # February 1997.
 #
-# Support for Node subclasses written by
+# Support for Node subclasses written and other revisions by
 #  Jeremy Hylton (jeremy@cnri.reston.va.us)
 #
 # The output tree has the following nodes:
@@ -83,12 +87,6 @@
 # invert:     node
 #
 
-"""Parse tree transformation module.
-
-Exposes the Transformer class with a number of methods for returning a
-"cleansed AST" instead of the parse tree that the parser exposes.
-"""
-
 import ast
 import parser
 import symbol
@@ -102,6 +100,15 @@
 from consts import CO_VARARGS, CO_VARKEYWORDS
 from consts import OP_ASSIGN, OP_DELETE, OP_APPLY
 
+def parseFile(path):
+    f = open(path)
+    src = f.read()
+    f.close()
+    return parse(src)
+
+def parse(buf):
+    return Transformer().parsesuite(buf)
+
 def asList(nodes):
   l = []
   for item in nodes:
@@ -262,7 +269,7 @@
     # code for class
     code = self.com_node(nodelist[-1])
 
-    n = Node('classdef', name, bases, doc, code)
+    n = Node('class', name, bases, doc, code)
     n.lineno = nodelist[1][2]
     return n
 
@@ -1191,10 +1198,4 @@
   symbol.factor,
   ]
 
-# Local Variables: 
-# mode: python     
-# indent-tabs-mode: nil 
-# py-indent-offset: 2 
-# py-smart-indentation: nil 
-# End: 
 
diff --git a/Tools/compiler/compiler/ast.py b/Tools/compiler/compiler/ast.py
index dfed562..5686d8b 100644
--- a/Tools/compiler/compiler/ast.py
+++ b/Tools/compiler/compiler/ast.py
@@ -114,18 +114,18 @@
   def __repr__(self):
     return "Lambda(%s,%s,%s,%s)" % self._children[1:]
 
-class Classdef(Node):
-  nodes['classdef'] = 'Classdef'
+class Class(Node):
+  nodes['class'] = 'Class'
 
   def __init__(self, name, bases, doc, code):
     self.name = name
     self.bases = bases
     self.doc = doc
     self.code = code
-    self._children = ('classdef', name, bases, doc, code)
+    self._children = ('class', name, bases, doc, code)
 
   def __repr__(self):
-    return "Classdef(%s,%s,%s,%s)" % self._children[1:]
+    return "Class(%s,%s,%s,%s)" % self._children[1:]
 
 class Pass(EmptyNode):
   nodes['pass'] = 'Pass'
diff --git a/Tools/compiler/compiler/transformer.py b/Tools/compiler/compiler/transformer.py
index 18ec815..0159c31 100644
--- a/Tools/compiler/compiler/transformer.py
+++ b/Tools/compiler/compiler/transformer.py
@@ -1,16 +1,20 @@
+"""Parse tree transformation module.
+
+Transforms Python source code into an abstract syntax tree (AST)
+defined in the ast module.
+
+The simplest ways to invoke this module are via parse and parseFile.
+parse(buf) -> AST
+parseFile(path) -> AST
+"""
+
 # Copyright 1997-1998 Greg Stein and Bill Tutt
 #
-# transformer.py -- transforms Python parse trees
-#
-# Takes an input parse tree and transforms it into a higher-level parse
-# tree that is a bit more amenable to code generation. Essentially, it
-# simply introduces some additional semantics.
-#
 # Written by Greg Stein (gstein@lyra.org)
 #        and Bill Tutt (rassilon@lima.mudlib.org)
 # February 1997.
 #
-# Support for Node subclasses written by
+# Support for Node subclasses written and other revisions by
 #  Jeremy Hylton (jeremy@cnri.reston.va.us)
 #
 # The output tree has the following nodes:
@@ -83,12 +87,6 @@
 # invert:     node
 #
 
-"""Parse tree transformation module.
-
-Exposes the Transformer class with a number of methods for returning a
-"cleansed AST" instead of the parse tree that the parser exposes.
-"""
-
 import ast
 import parser
 import symbol
@@ -102,6 +100,15 @@
 from consts import CO_VARARGS, CO_VARKEYWORDS
 from consts import OP_ASSIGN, OP_DELETE, OP_APPLY
 
+def parseFile(path):
+    f = open(path)
+    src = f.read()
+    f.close()
+    return parse(src)
+
+def parse(buf):
+    return Transformer().parsesuite(buf)
+
 def asList(nodes):
   l = []
   for item in nodes:
@@ -262,7 +269,7 @@
     # code for class
     code = self.com_node(nodelist[-1])
 
-    n = Node('classdef', name, bases, doc, code)
+    n = Node('class', name, bases, doc, code)
     n.lineno = nodelist[1][2]
     return n
 
@@ -1191,10 +1198,4 @@
   symbol.factor,
   ]
 
-# Local Variables: 
-# mode: python     
-# indent-tabs-mode: nil 
-# py-indent-offset: 2 
-# py-smart-indentation: nil 
-# End: 
 
