Mercurial > cpython-lru_cache-weakref
annotate Demo/parser/example.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 | c18d52e06238 |
| children | b52864c5e9c9 |
| rev | line source |
|---|---|
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 """Simple code to extract class & function docstrings from a module. |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
3 This code is used as an example in the library reference manual in the |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
4 section on using the parser module. Refer to the manual for a thorough |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
5 discussion of the operation of this code. |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 """ |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 import symbol |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 import token |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 import types |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 def get_docs(fileName): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 """Retrieve information from the parse tree of a source file. |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 fileName |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 Name of the file to read Python source code from. |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 """ |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 source = open(fileName).read() |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 import os |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 basename = os.path.basename(os.path.splitext(fileName)[0]) |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 import parser |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 ast = parser.suite(source) |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 tup = parser.ast2tuple(ast) |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 return ModuleInfo(tup, basename) |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
28 class SuiteInfoBase: |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 _docstring = '' |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 _name = '' |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
32 def __init__(self, tree = None): |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
33 self._class_info = {} |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
34 self._function_info = {} |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
35 if tree: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
36 self._extract_info(tree) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
37 |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
38 def _extract_info(self, tree): |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
39 # extract docstring |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
40 if len(tree) == 2: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
41 found, vars = match(DOCSTRING_STMT_PATTERN[1], tree[1]) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
42 else: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
43 found, vars = match(DOCSTRING_STMT_PATTERN, tree[3]) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
44 if found: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
45 self._docstring = eval(vars['docstring']) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
46 # discover inner definitions |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
47 for node in tree[1:]: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
48 found, vars = match(COMPOUND_STMT_PATTERN, node) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
49 if found: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
50 cstmt = vars['compound'] |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
51 if cstmt[0] == symbol.funcdef: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
52 name = cstmt[2][1] |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
53 self._function_info[name] = FunctionInfo(cstmt) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
54 elif cstmt[0] == symbol.classdef: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
55 name = cstmt[2][1] |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
56 self._class_info[name] = ClassInfo(cstmt) |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 def get_docstring(self): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 return self._docstring |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 def get_name(self): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 return self._name |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 def get_class_names(self): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 return self._class_info.keys() |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 def get_class_info(self, name): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 return self._class_info[name] |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
70 def __getitem__(self, name): |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
71 try: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
72 return self._class_info[name] |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
73 except KeyError: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
74 return self._function_info[name] |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
77 class SuiteFuncInfo: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
78 # Mixin class providing access to function names and info. |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 def get_function_names(self): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 return self._function_info.keys() |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 def get_function_info(self, name): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 return self._function_info[name] |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
87 class FunctionInfo(SuiteInfoBase, SuiteFuncInfo): |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
88 def __init__(self, tree = None): |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
89 self._name = tree[2][1] |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
90 SuiteInfoBase.__init__(self, tree and tree[-1] or None) |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 class ClassInfo(SuiteInfoBase): |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
94 def __init__(self, tree = None): |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
95 self._name = tree[2][1] |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
96 SuiteInfoBase.__init__(self, tree and tree[-1] or None) |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 def get_method_names(self): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 return self._function_info.keys() |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 def get_method_info(self, name): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 return self._function_info[name] |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
105 class ModuleInfo(SuiteInfoBase, SuiteFuncInfo): |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
106 def __init__(self, tree = None, name = "<string>"): |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 self._name = name |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
108 SuiteInfoBase.__init__(self, tree) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
109 if tree: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
110 found, vars = match(DOCSTRING_STMT_PATTERN, tree[1]) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
111 if found: |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
112 self._docstring = vars["docstring"] |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 from types import ListType, TupleType |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
117 def match(pattern, data, vars=None): |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
118 """Match `data' to `pattern', with variable extraction. |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
119 |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
120 pattern |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
121 Pattern to match against, possibly containing variables. |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
122 |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
123 data |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
124 Data to be checked and against which variables are extracted. |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
125 |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
126 vars |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
127 Dictionary of variables which have already been found. If not |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
128 provided, an empty dictionary is created. |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
129 |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
130 The `pattern' value may contain variables of the form ['varname'] which |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
131 are allowed to match anything. The value that is matched is returned as |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
132 part of a dictionary which maps 'varname' to the matched value. 'varname' |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
133 is not required to be a string object, but using strings makes patterns |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
134 and the code which uses them more readable. |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
135 |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
136 This function returns two values: a boolean indicating whether a match |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
137 was found and a dictionary mapping variable names to their associated |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
138 values. |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
139 """ |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
140 if vars is None: |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
141 vars = {} |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
142 if type(pattern) is ListType: # 'variables' are ['varname'] |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
143 vars[pattern[0]] = data |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 return 1, vars |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 if type(pattern) is not TupleType: |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 return (pattern == data), vars |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 if len(data) != len(pattern): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 return 0, vars |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 for pattern, data in map(None, pattern, data): |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 same, vars = match(pattern, data, vars) |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 if not same: |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
152 break |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 return same, vars |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
155 |
|
4132
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
156 # This pattern identifies compound statements, allowing them to be readily |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
157 # differentiated from simple statements. |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
158 # |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
159 COMPOUND_STMT_PATTERN = ( |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
160 symbol.stmt, |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
161 (symbol.compound_stmt, ['compound']) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
162 ) |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
163 |
|
c18d52e06238
Final set of changes by Fred before 1.4beta3
Guido van Rossum <guido@python.org>
parents:
4088
diff
changeset
|
164 |
|
4088
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 # This pattern will match a 'stmt' node which *might* represent a docstring; |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 # docstrings require that the statement which provides the docstring be the |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 # first statement in the class or function, which this pattern does not check. |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 # |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 DOCSTRING_STMT_PATTERN = ( |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
170 symbol.stmt, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 (symbol.simple_stmt, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 (symbol.small_stmt, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 (symbol.expr_stmt, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 (symbol.testlist, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 (symbol.test, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
176 (symbol.and_test, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
177 (symbol.not_test, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
178 (symbol.comparison, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 (symbol.expr, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 (symbol.xor_expr, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 (symbol.and_expr, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
182 (symbol.shift_expr, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 (symbol.arith_expr, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
184 (symbol.term, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
185 (symbol.factor, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 (symbol.power, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
187 (symbol.atom, |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 (token.STRING, ['docstring']) |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 )))))))))))))))), |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 (token.NEWLINE, '') |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 )) |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
192 |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
193 # |
|
f81d78547f28
Demos for Fred's parser module
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 # end of file |
