Source code for pycropml.transpiler.rules.pythonRules

# coding: utf8
from pycropml.transpiler.rules.generalRule import GeneralRule
from pycropml.transpiler.pseudo_tree import Node


[docs] def translateNotContains(node): return Node("simpleCall", op='not in', value=node.args, sequence=node.receiver, pseudo_type='Boolean')
[docs] def translateDictkeys(node): return Node("method_call", receiver=node.receiver, message=".keys()", args=[], pseudo_type=node.pseudo_type)
[docs] def translatePrint(node): return Node(type="ExprStatNode", expr=Node(type="call", function="print", args=node.args))
[docs] def translateModulo(node): return Node(type="binary_op", op="%", left=node.args[0], right=node.args[1])
[docs] def translateCopy(node): return Node(type="call", function = "copy", args=[Node("local", name=node.args.name)])
[docs] def translateIntegr(node): pass
[docs] class PythonRules(GeneralRule): def __init__(self): GeneralRule.__init__(self) binary_op = {"and": "and", "or": "or", "not": "not", "<": "<", ">": ">", "==": "==", "+": "+", "-": "-", "*": "*", "/": "/", ">=": ">=", "<=": "<=", "!=": "!=", "%":"%", "is_not":"is not", "is":"is" } unary_op = { 'not': 'not ', '+': '+', '-': '-', '~': '~' } types = { "int": "int", "float": "float", "bool": "bool", "list": "list", "tuple": "tuple", "str": "str", "dict": "dict", "datetime":"datetime" } functions = { 'math': { 'ln': 'log', 'log': 'log', 'tan': 'tan', 'sin': 'sin', 'cos': 'cos', 'asin': 'asin', 'acos': 'acos', 'atan': 'atan', 'sqrt': 'sqrt', 'ceil': 'ceil', 'round': 'round', 'exp': 'exp', "floor": "floor", "isnan":"isnan" }, 'io': { 'print': translatePrint, 'read': 'read', 'read_file': 'File.ReadAllText', 'write_file': 'File.WriteAllText' }, 'system': { 'min': 'min', 'max': 'max', 'abs': 'abs', 'pow': 'pow', 'modulo': translateModulo, "copy":translateCopy, "integr":translateIntegr, 'round':'round', 'list':'list', 'range':'range' }, 'datetime':{ 'datetime': 'datetime' } } constant = { 'math':{ 'pi': 'pi' } } methods = { 'int': { 'float': 'float', 'int':'int' }, 'float': { 'int': 'int' }, 'str': { 'int': 'int', 'find': '.index' }, 'list': { 'len': 'len', 'append': '.append', 'sum': 'sum', 'pop': '.pop', 'contains?': lambda node: Node("simpleCall", op='in', value=node.args, sequence=node.receiver, pseudo_type='Boolean'), 'not contains?': translateNotContains, 'index': '.index', 'extend': '.extend', 'allocate': lambda node: Node("assignment", target = node.receiver, value=Node("call", function = "array", args=[Node("str", value=b'f'),Node("binary_op", op="*", left = Node("list", elements=[Node("int", value="0")]),right=node.args)])) }, 'datetime':{ 'datetime':'datetime', 'day':'day' }, 'array': { 'len': 'len', 'sum':"sum", 'append': '.append', 'allocate': lambda node: Node("assignment", target = node.receiver, value=Node("call", function = "array", args=[Node("str", value=b'f'),Node("binary_op", op="*", left = Node("list", elements=[Node("int", value="0")]),right=node.args)])) }, 'dict': { 'len': 'len', 'keys': translateDictkeys, 'get' : '.get' } }