Source code for pycropml.transpiler.rules.csharpRules



from pycropml.transpiler.rules.generalRule import GeneralRule
from pycropml.transpiler.pseudo_tree import Node

[docs]def translateLenList(node): return Node("method_call", receiver=node.receiver, message=".Count", args=[], pseudo_type=node.pseudo_type)
[docs]def translateSum(node): return Node("method_call", receiver=node.receiver, message=".Sum()", args=[], pseudo_type=node.pseudo_type)
[docs]def translateNotContains(node): return Node("unary_op", operator="not", value=Node("standard_method_call", receiver=node.receiver, message="contains?", args=node.args, pseudo_type=node.pseudo_type))
[docs]def translateLenDict(node): return Node("method_call", receiver=node.receiver, message=".Count", args=[], pseudo_type=node.pseudo_type)
[docs]def translateLenArray(node): return Node("method_call", receiver=node.receiver, message=".Length", args=[], pseudo_type=node.pseudo_type)
[docs]def translatekeyDict(node): return Node("method_call", receiver=node.receiver, message=".Keys", args=[], pseudo_type=node.pseudo_type)
[docs]def translateget(node): if "value" in dir(node.args[0]): return Node('index',sequence = Node('local',name= node.receiver.name, pseudo_type = node.receiver.pseudo_type), index= Node(node.args[0].type, value = node.args[0].value, pseudo_type= node.args[0].pseudo_type), pseudo_type = "Void") elif "name" in dir(node.args[0]): return Node('index',sequence = Node('local',name= node.receiver.name, pseudo_type = node.receiver.pseudo_type), index= Node(node.args[0].type, name = node.args[0].name, pseudo_type= node.args[0].pseudo_type), pseudo_type = "Void")
[docs]class CsharpRules(GeneralRule): def __init__(self): GeneralRule.__init__(self) binary_op = {"and": "&&", "or": "||", "not": "!", "<": "<", ">": ">", "==": "==", "+": "+", "-": "-", "*": "*", "/": "/", ">=": ">=", "<=": "<=", "!=": "!=" } unary_op = { 'not': '!', '+': '+', '-': '-', '~': '~' } types = { "int": "int", "float": "double", "bool": "bool", "array": "%s[] %s= new %s", "list": "List", "tuple": "Tuple", "str": "string", "dict": "Dictionary", "datetime":"DateTime", "DateTime":"DateTime" } functions = { 'math': { 'ln': 'Math.Log', 'log': 'Math.Log', 'tan': 'Math.Tan', 'sin': 'Math.Sin', 'cos': 'Math.Cos', 'asin': 'Math.Asin', 'acos': 'Math.Acos', 'atan': 'Math.Atan', 'sqrt': 'Math.Sqrt', 'ceil': 'Math.Ceiling', 'round': 'Math.Round', 'exp': 'Math.Exp', 'pow': 'Math.Pow' }, 'io': { 'print': "Display", 'read': 'Console.ReadLine', 'read_file': 'File.ReadAllText', 'write_file': 'File.WriteAllText' }, 'system': { 'min': 'Math.Min', 'max': 'Math.Max', 'abs': 'Math.Abs', 'pow': 'Math.Pow'}, 'datetime':{ 'datetime': ' new DateTime' } } methods = { 'int': { 'float': '(double)' }, 'float': { 'int': '(int)' }, 'str': { 'int': '(int)', 'find': '.IndexOf' }, 'list': { 'len': translateLenList, 'append': '.Add', 'sum': translateSum, 'pop': '.RemoveAt', 'insert_at': ".Insert", 'contains?': '.Contains', 'not contains?': translateNotContains, 'index': '.IndexOf' }, 'dict': { 'len': translateLenDict, 'keys': translatekeyDict, "get": translateget }, 'array':{ 'len': translateLenArray, 'append': '.Add' } } public_properties = ''' { get { return this._%s; } set { this._%s= value; } }''' public_properties_wrap = '''{ get { return %s.%s;}} ''' constructor = ''' public %s() { } ''' copy_constr = ''' public %s(%s toCopy, bool copyAll) // copy constructor { if (copyAll) { ''' copy_constrList = ''' for (int i = 0; i < toCopy.%s.Count; i++) { %s.Add(toCopy.%s[i]); } ''' copy_constrArray = ''' for (int i = 0; i < %s; i++) { _%s[i] = toCopy._%s[i]; } ''' public_properties_compo = ''' { get { return _%s.%s; } set { %s } } ''' copy_constr_compo = ''' public %s(%s toCopy): this() // copy constructor { '''