blob: e97c2da6a6d42f47d7228047aa903368db95391c [file] [log] [blame]
# -------------------------------------------------------------------------------
# op2mark.py
#
# converting an operator to its mark
#
# Copyright (C) 2013, Shinya Takamaeda-Yamazaki
# License: Apache 2.0
# -------------------------------------------------------------------------------
operator_mark = {
'Uminus': '-', 'Ulnot': '!', 'Unot': '~', 'Uand': '&', 'Unand': '~&',
'Uor': '|', 'Unor': '~|', 'Uxor': '^', 'Uxnor': '~^',
'Power': '**', 'Times': '*', 'Divide': '/', 'Mod': '%',
'Plus': '+', 'Minus': '-',
'Sll': '<<', 'Srl': '>>', 'Sla': '<<<', 'Sra': '>>>',
'LessThan': '<', 'GreaterThan': '>', 'LessEq': '<=', 'GreaterEq': '>=',
'Eq': '==', 'NotEq': '!=', 'Eql': '===', 'NotEql': '!==',
'And': '&', 'Xor': '^', 'Xnor': '~^',
'Or': '|', 'Land': '&&', 'Lor': '||'
}
def op2mark(op):
if op not in operator_mark:
return None
return operator_mark[op]
operator_order = {
'Uminus': 0, 'Ulnot': 0, 'Unot': 0, 'Uand': 0, 'Unand': 0,
'Uor': 0, 'Unor': 0, 'Uxor': 0, 'Uxnor': 0,
'Power': 1,
'Times': 2, 'Divide': 2, 'Mod': 2,
'Plus': 3, 'Minus': 3,
'Sll': 4, 'Srl': 4, 'Sla': 4, 'Sra': 4,
'LessThan': 5, 'GreaterThan': 5, 'LessEq': 5, 'GreaterEq': 5,
'Eq': 6, 'NotEq': 6, 'Eql': 6, 'NotEql': 6,
'And': 7,
'Xor': 8, 'Xnor': 8,
'Or': 9,
'Land': 10,
'Lor': 11
}
def op2order(op):
if op not in operator_order:
return None
return operator_order[op]