Viewing file: op_util.py (3.12 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# -*- coding: utf-8 -*- """ Part of the astor library for Python AST manipulation.
License: 3-clause BSD
Copyright (c) 2015 Patrick Maupin
This module provides data and functions for mapping AST nodes to symbols and precedences.
"""
import ast
op_data = """ GeneratorExp 1
Assign 1 AnnAssign 1 AugAssign 0 Expr 0 Yield 1 YieldFrom 0 If 1 For 0 AsyncFor 0 While 0 Return 1
Slice 1 Subscript 0 Index 1 ExtSlice 1 comprehension_target 1 Tuple 0 FormattedValue 0
Comma 1 NamedExpr 1 Assert 0 Raise 0 call_one_arg 1
Lambda 1 IfExp 0
comprehension 1 Or or 1 And and 1 Not not 1
Eq == 1 Gt > 0 GtE >= 0 In in 0 Is is 0 NotEq != 0 Lt < 0 LtE <= 0 NotIn not in 0 IsNot is not 0
BitOr | 1 BitXor ^ 1 BitAnd & 1 LShift << 1 RShift >> 0 Add + 1 Sub - 0 Mult * 1 Div / 0 Mod % 0 FloorDiv // 0 MatMult @ 0 PowRHS 1 Invert ~ 1 UAdd + 0 USub - 0 Pow ** 1 Await 1 Num 1 Constant 1 """
op_data = [x.split() for x in op_data.splitlines()] op_data = [[x[0], ' '.join(x[1:-1]), int(x[-1])] for x in op_data if x] for index in range(1, len(op_data)): op_data[index][2] *= 2 op_data[index][2] += op_data[index - 1][2]
precedence_data = dict((getattr(ast, x, None), z) for x, y, z in op_data) symbol_data = dict((getattr(ast, x, None), y) for x, y, z in op_data)
def get_op_symbol(obj, fmt='%s', symbol_data=symbol_data, type=type): """Given an AST node object, returns a string containing the symbol. """ return fmt % symbol_data[type(obj)]
def get_op_precedence(obj, precedence_data=precedence_data, type=type): """Given an AST node object, returns the precedence. """ return precedence_data[type(obj)]
class Precedence(object): vars().update((x, z) for x, y, z in op_data) highest = max(z for x, y, z in op_data) + 2
|