From fa974a9d06a216ca55bd81985fe75b17bdc3630a Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Mon, 6 Mar 2000 18:50:48 +0000 Subject: [PATCH] change node Classdef to Class add doc string to transformer module add two helper functions: parse(buf) -> AST parseFile(path) -> AST --- Lib/compiler/ast.py | 8 ++--- Lib/compiler/transformer.py | 41 +++++++++++++------------- Tools/compiler/compiler/ast.py | 8 ++--- Tools/compiler/compiler/transformer.py | 41 +++++++++++++------------- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py index dfed562be61..5686d8b4a0e 100644 --- a/Lib/compiler/ast.py +++ b/Lib/compiler/ast.py @@ -114,18 +114,18 @@ class Lambda(Node): 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 18ec815da8f..0159c31307c 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 @@ error = 'walker.error' 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 @@ class Transformer: # 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 @@ _assign_types = [ 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 dfed562be61..5686d8b4a0e 100644 --- a/Tools/compiler/compiler/ast.py +++ b/Tools/compiler/compiler/ast.py @@ -114,18 +114,18 @@ class Lambda(Node): 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 18ec815da8f..0159c31307c 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 @@ error = 'walker.error' 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 @@ class Transformer: # 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 @@ _assign_types = [ symbol.factor, ] -# Local Variables: -# mode: python -# indent-tabs-mode: nil -# py-indent-offset: 2 -# py-smart-indentation: nil -# End: