Lines Matching +full:symbol +full:- +full:tree
1 """Parse tree transformation module.
3 Transforms Python source code into an abstract syntax tree (AST)
7 parse(buf) -> AST
8 parseFile(path) -> AST
22 # Copyright (C) 1997-1998 Greg Stein. All Rights Reserved.
24 # This module is provided under a BSD-ish license. See
25 # http://www.opensource.org/licenses/bsd-license.html
30 import symbol
98 tree = transform(ast_tree)
99 tree = parsesuite(text)
100 tree = parseexpr(text)
101 tree = parsefile(fileob | filename)
106 for value, name in symbol.sym_name.items():
120 def transform(self, tree): argument
121 """Transform an AST into a modified parse tree."""
122 if not (isinstance(tree, tuple) or isinstance(tree, list)):
123 tree = parser.st2tuple(tree, line_info=1)
124 return self.compile_node(tree)
127 """Return a modified parse tree for the given suite text."""
131 """Return a modified parse tree for the given expression text."""
135 """Return a modified parse tree for the contents of the given file."""
140 # --------------------------------------------------------------
146 ### emit a line-number node?
149 if n == symbol.encoding_decl:
154 if n == symbol.single_input:
156 if n == symbol.file_input:
158 if n == symbol.eval_input:
160 if n == symbol.lambdef:
162 if n == symbol.funcdef:
164 if n == symbol.classdef:
180 doc = self.get_docstring(nodelist, symbol.file_input)
192 # from the built-in function input()
214 assert nodelist[-1][0] == token.NEWLINE
216 assert nodelist[1][0] == symbol.dotted_name
231 assert dec_nodelist[0] == symbol.decorator
236 assert nodelist[0][0] == symbol.decorators
237 if nodelist[1][0] == symbol.funcdef:
240 elif nodelist[1][0] == symbol.classdef:
248 # -6 -5 -4 -3 -2 -1
253 assert nodelist[0][0] == symbol.decorators
259 lineno = nodelist[-4][2]
260 name = nodelist[-4][1]
261 args = nodelist[-3][2]
263 if args[0] == symbol.varargslist:
268 doc = self.get_docstring(nodelist[-1])
271 code = self.com_node(nodelist[-1])
282 if nodelist[2][0] == symbol.varargslist:
289 code = self.com_node(nodelist[-1])
298 doc = self.get_docstring(nodelist[-1])
307 code = self.com_node(nodelist[-1])
357 # --------------------------------------------------------------
364 en = nodelist[-1]
370 for i in range(0, len(nodelist) - 2, 2):
395 if nodelist[-1][0] == token.COMMA:
461 level = idx - 1
462 if nodelist[idx][0] == symbol.dotted_name:
509 for i in range(0, len(nodelist) - 3, 4):
515 elseNode = self.com_node(nodelist[-1])
516 ## elseNode.lineno = nodelist[-1][1][2]
565 if node[0] == symbol.stmt:
569 # --------------------------------------------------------------
586 assert nodelist[0][0] == symbol.test
587 if len(nodelist) == 2 and nodelist[1][0] == symbol.comp_for:
594 if len(nodelist) == 1 and nodelist[0][0] == symbol.lambdef:
608 if len(nodelist) == 1 and nodelist[0][0] == symbol.lambdef:
619 result = self.com_node(nodelist[-1])
632 nl = nodelist[i-1]
674 if nodelist[i-1][0] == token.LEFTSHIFT:
676 elif nodelist[i-1][0] == token.RIGHTSHIFT:
679 raise ValueError, "unexpected token: %s" % nodelist[i-1][0]
686 if nodelist[i-1][0] == token.PLUS:
688 elif nodelist[i-1][0] == token.MINUS:
691 raise ValueError, "unexpected token: %s" % nodelist[i-1][0]
698 t = nodelist[i-1][0]
715 node = self.lookup_node(nodelist[-1])(nodelist[-1][1:])
769 if self.encoding not in ['utf-8', 'iso-8859-1']:
770 lit = unicode(lit, 'utf-8').encode(self.encoding)
784 # --------------------------------------------------------------
856 raise SyntaxError, "non-default argument follows default argument"
884 return name[:-1]
887 assert node[0] == symbol.dotted_as_name
897 assert node[0] == symbol.dotted_as_names
905 assert node[0] == symbol.import_as_name
915 assert node[0] == symbol.import_as_names
934 # first clause is a finally clause: only try-finally
945 if node[0] == symbol.except_clause:
971 body = self.com_node(nodelist[-1])
972 for i in range(len(nodelist) - 3, 0, -2):
988 assert node[0] == symbol.augassign
1006 if t in (symbol.exprlist, symbol.testlist, symbol.testlist_safe, symbol.testlist_comp):
1014 elif t == symbol.power:
1015 if node[1][0] != symbol.atom:
1019 for i in range(2, len(node)-1):
1024 return self.com_assign_trailer(primary, node[-1],
1027 elif t == symbol.atom:
1055 if node[i + 1][0] == symbol.list_for:
1075 return AssAttr(primary, node[1], assigning, lineno=node[-1])
1108 if nodelist[i][0] == symbol.list_for:
1170 assert node[0] == symbol.list_iter
1174 assert node[0] == symbol.comp_iter
1214 assert nodelist[0] == symbol.dictorsetmaker
1222 elif nodelist[1][0] == symbol.comp_for:
1226 elif len(nodelist) > 3 and nodelist[3][0] == symbol.comp_for:
1284 and len(node) == 3 and node[2][0] == symbol.comp_for:
1296 if len(nodelist) == 3 and nodelist[2][0] == symbol.comp_for:
1301 raise SyntaxError, "non-keyword arg after keyword arg"
1325 sub[-1][0] != symbol.sliceop:
1364 if i < len(node) and node[i][0] == symbol.test:
1398 if n == symbol.suite:
1402 if sub[0] == symbol.stmt:
1405 if n == symbol.file_input:
1407 if sub[0] == symbol.stmt:
1410 if n == symbol.atom:
1417 if n == symbol.stmt or n == symbol.simple_stmt \
1418 or n == symbol.small_stmt:
1426 symbol.expr_stmt,
1427 symbol.testlist,
1428 symbol.testlist_safe,
1429 symbol.test,
1430 symbol.or_test,
1431 symbol.and_test,
1432 symbol.not_test,
1433 symbol.comparison,
1434 symbol.expr,
1435 symbol.xor_expr,
1436 symbol.and_expr,
1437 symbol.shift_expr,
1438 symbol.arith_expr,
1439 symbol.term,
1440 symbol.factor,
1441 symbol.power,
1457 symbol.funcdef,
1458 symbol.classdef,
1459 symbol.stmt,
1460 symbol.small_stmt,
1461 symbol.flow_stmt,
1462 symbol.simple_stmt,
1463 symbol.compound_stmt,
1464 symbol.expr_stmt,
1465 symbol.print_stmt,
1466 symbol.del_stmt,
1467 symbol.pass_stmt,
1468 symbol.break_stmt,
1469 symbol.continue_stmt,
1470 symbol.return_stmt,
1471 symbol.raise_stmt,
1472 symbol.import_stmt,
1473 symbol.global_stmt,
1474 symbol.exec_stmt,
1475 symbol.assert_stmt,
1476 symbol.if_stmt,
1477 symbol.while_stmt,
1478 symbol.for_stmt,
1479 symbol.try_stmt,
1480 symbol.with_stmt,
1481 symbol.suite,
1482 symbol.testlist,
1483 symbol.testlist_safe,
1484 symbol.test,
1485 symbol.and_test,
1486 symbol.not_test,
1487 symbol.comparison,
1488 symbol.exprlist,
1489 symbol.expr,
1490 symbol.xor_expr,
1491 symbol.and_expr,
1492 symbol.shift_expr,
1493 symbol.arith_expr,
1494 symbol.term,
1495 symbol.factor,
1496 symbol.power,
1497 symbol.atom,
1500 if hasattr(symbol, 'yield_stmt'):
1501 _legal_node_types.append(symbol.yield_stmt)
1502 if hasattr(symbol, 'yield_expr'):
1503 _legal_node_types.append(symbol.yield_expr)
1506 symbol.test,
1507 symbol.or_test,
1508 symbol.and_test,
1509 symbol.not_test,
1510 symbol.comparison,
1511 symbol.expr,
1512 symbol.xor_expr,
1513 symbol.and_expr,
1514 symbol.shift_expr,
1515 symbol.arith_expr,
1516 symbol.term,
1517 symbol.factor,
1521 for k, v in symbol.sym_name.items():
1526 def debug_tree(tree): argument
1528 for elt in tree: