annotate Lib/AST.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 7f83e24d1d86
children 3224878bd8b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """Object-oriented interface to the parser module.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
3 This module exports four classes which together provide an interface
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 to the parser module. Together, the three classes represent two ways
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 to create parsed representations of Python source and the two starting
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 data types (source text and tuple representations). Each class
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 provides interfaces which are identical other than the constructors.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 The constructors are described in detail in the documentation for each
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 class and the remaining, shared portion of the interface is documented
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
10 below. Briefly, the classes provided are:
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 AST
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 Defines the primary interface to the AST objects and supports creation
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 from the tuple representation of the parse tree.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
15
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 ExpressionAST
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 Supports creation of expression constructs from source text.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 SuiteAST
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 Supports creation of statement suites from source text.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
21
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 FileSuiteAST
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 Convenience subclass of the `SuiteAST' class; loads source text of the
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 suite from an external file.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
26 Common Methods
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
27 --------------
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
28
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 Aside from the constructors, several methods are provided to allow
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 access to the various interpretations of the parse tree and to check
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 conditions of the construct represented by the parse tree.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 ast()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 Returns the corresponding `parser.ASTType' object.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 code()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 Returns the compiled code object.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 filename()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 Returns the name of the associated source file, if known.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 isExpression()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 Returns true value if parse tree represents an expression, or a false
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 value otherwise.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 isSuite()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 Returns true value if parse tree represents a suite of statements, or
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 a false value otherwise.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
49
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 text()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 Returns the source text, or None if not available.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
52
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 tuple()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 Returns the tuple representing the parse tree.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
56
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 __version__ = '$Revision$'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 __copyright__ = """Copyright (c) 1995, 1996 by Fred L. Drake, Jr.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 This software may be used and distributed freely for any purpose provided
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 that this notice is included unchanged on any and all copies. The author
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 does not warrant or guarantee this software in any way.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 class AST:
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 """Base class for Abstract Syntax Tree objects.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
67
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 Creates an Abstract Syntax Tree based on the tuple representation
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 of the parse tree. The parse tree can represent either an
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 expression or a suite; which will be recognized automatically.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 This base class provides all of the query methods for subclass
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 objects defined in this module.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 """
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
74 import parser # import internally to avoid
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
75 _p = parser # namespace pollution at the
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 # top level
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 _text = None
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 _code = None
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 _ast = None
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 _type = 'unknown'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 _tupl = None
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 def __init__(self, tuple):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 """Create an `AST' instance from a tuple-tree representation.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
85
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 tuple
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 The tuple tree to convert.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
88
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 The tuple-tree may represent either an expression or a suite; the
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
90 type will be determined automatically. Line number information may
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
91 optionally be present for any subset of the terminal tokens.
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 if type(tuple) is not type(()):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 raise TypeError, 'Base AST class requires tuple parameter.'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
95
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 self._tupl = tuple
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 self._ast = self._p.tuple2ast(tuple)
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 self._type = (self._p.isexpr(self._ast) and 'expression') or 'suite'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
99
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
100 def list(self, line_info = 0):
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
101 """Returns a fresh list representing the parse tree.
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
102
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
103 line_info
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
104 If true, includes line number information for terminal tokens in
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
105 the output data structure,
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
106 """
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
107 return self._p.ast2list(self._ast, line_info)
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
108
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
109 def tuple(self, line_info = 0):
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 """Returns the tuple representing the parse tree.
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
111
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
112 line_info
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
113 If true, includes line number information for terminal tokens in
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
114 the output data structure,
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 if self._tupl is None:
4084
7f83e24d1d86 New batch from Fred
Guido van Rossum <guido@python.org>
parents: 3754
diff changeset
117 self._tupl = self._p.ast2tuple(self._ast, line_info)
3754
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 return self._tupl
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
119
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 def code(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 """Returns the compiled code object.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
122
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 The code object returned by this method may be passed to the
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 exec statement if `AST.isSuite()' is true or to the eval()
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 function if `AST.isExpression()' is true. All the usual rules
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 regarding execution of code objects apply.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 if not self._code:
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 self._code = self._p.compileast(self._ast)
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 return self._code
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
131
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 def ast(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 """Returns the corresponding `parser.ASTType' object.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 return self._ast
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
136
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 def filename(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 """Returns the name of the source file if known, or None.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 return None
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
141
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 def text(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 """Returns the source text, or None if not available.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
144
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 If the instance is of class `AST', None is returned since no
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 source text is available. If of class `ExpressionAST' or
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 `SuiteAST', the source text passed to the constructor is
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 returned.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 return self._text
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
151
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 def isSuite(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 """Determine if `AST' instance represents a suite of statements.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 return self._type == 'suite'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
156
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 def isExpression(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 """Determine if `AST' instance represents an expression.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 return self._type == 'expression'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
161
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
162
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
163
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 class SuiteAST(AST):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 """Statement suite parse tree representation.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
166
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 This subclass of the `AST' base class represents statement suites
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 parsed from the source text of a Python suite. If the source text
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 does not represent a parsable suite of statements, the appropriate
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 exception is raised by the parser.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 _type = 'suite'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
173
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 def __init__(self, text):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 """Initialize a `SuiteAST' from source text.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
176
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 text
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 Source text to parse.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 if type(text) is not type(''):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 raise TypeError, 'SuiteAST requires source text parameter.'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 self._text = text
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 self._ast = self._p.suite(text)
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
184
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 def isSuite(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 return 1
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
187
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 def isExpression(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 return 0
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
190
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
191
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 class FileSuiteAST(SuiteAST):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 """Representation of a python source file syntax tree.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
194
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 This provides a convenience wrapper around the `SuiteAST' class to
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 load the source text from an external file.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 def __init__(self, fileName):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 """Initialize a `SuiteAST' from a source file.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
200
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 fileName
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 Name of the external source file.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 self._fileName = fileName
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 SuiteAST.__init__(self, open(fileName).read())
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
206
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 def filename(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 return self._fileName
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
209
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
210
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
211
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 class ExpressionAST(AST):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 """Expression parse tree representation.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
214
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 This subclass of the `AST' base class represents expression
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 constructs parsed from the source text of a Python expression. If
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 the source text does not represent a parsable expression, the
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 appropriate exception is raised by the Python parser.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 _type = 'expression'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
221
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 def __init__(self, text):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 """Initialize an expression AST from source text.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
224
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 text
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 Source text to parse.
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 """
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 if type(text) is not type(''):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 raise TypeError, 'ExpressionAST requires source text parameter.'
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 self._text = text
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 self._ast = self._p.expr(text)
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
232
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 def isSuite(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 return 0
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
235
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 def isExpression(self):
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 return 1
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
238
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
239
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 #
d23fea248a1e Changes for new parser module (Fred Drake)
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 # end of file