Mercurial > cpython-lru_cache-weakref
annotate Lib/AST.py @ 4566:6403c94de50d legacy-trunk
Added safeguard against failure in __del__.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 27 Nov 1996 19:39:58 +0000 |
| parents | 7f83e24d1d86 |
| children | 3224878bd8b3 |
| 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 | 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 | 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 | 26 Common Methods |
| 27 -------------- | |
| 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 | 74 import parser # import internally to avoid |
| 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 | 90 type will be determined automatically. Line number information may |
| 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 | 100 def list(self, line_info = 0): |
| 101 """Returns a fresh list representing the parse tree. | |
| 102 | |
| 103 line_info | |
| 104 If true, includes line number information for terminal tokens in | |
| 105 the output data structure, | |
| 106 """ | |
| 107 return self._p.ast2list(self._ast, line_info) | |
| 108 | |
| 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 | 111 |
| 112 line_info | |
| 113 If true, includes line number information for terminal tokens in | |
| 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 | 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 |
