Source code for pycropml.transpiler.rules.javaRules



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=".size()", args=[], pseudo_type=node.pseudo_type)
[docs]def translateSum(node): if node.pseudo_type=="float": return Node("method_call", receiver=node.receiver, message=".stream().mapToDouble(Double::doubleValue).sum()", args=[], pseudo_type=node.pseudo_type) elif node.pseudo_type=="int": return Node("method_call", receiver=node.receiver, message=".stream().mapToInt(Integer::intValue).sum()", args=[], pseudo_type=node.pseudo_type)
[docs]def translateDateTime(node): x=""" try{ %s = format.parse("%s"); } catch (ParseException var4) { var4.printStackTrace(); } """ return x
[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=".size()", 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 translateDictkeys(node): return Node("method_call", receiver=node.receiver, message=".keySet()", args=[], pseudo_type=node.pseudo_type)
[docs]def translateDictValues(node): return Node("method_call", receiver=node.receiver, message=".values()", args=[], pseudo_type=node.pseudo_type)
[docs]def translatePrint(node): if node.args[0].type=="tuple": x=[] for n in node.args[0].elements: if "value" in dir(n) and n.value in [b'\r', b'\t', b'\n']: continue x.append(Node(type="ExprStatNode", expr=Node(type="custom_call", function="System.out.println", args=[n]))) return x else: return Node(type="ExprStatNode", expr=Node(type="custom_call", function="System.out.println", args=node.args))
[docs]def translatePow(node): if node.pseudo_type=="int": return Node(type="custom_call", function="(int) Math.pow", args=node.args) return Node(type="custom_call", function="Math.pow", args=node.args)
[docs]class JavaRules(GeneralRule): def __init__(self): GeneralRule.__init__(self) binary_op = {"and": "&&", "or": "||", "not": "!", "<": "<", ">": ">", "==": "==", "+": "+", "-": "-", "*": "*", "/": "/", ">=": ">=", "<=": "<=", "!=": "!=" } unary_op = { 'not': '!', '+': '+', '-': '-', '~': '~' } types = { "int": "int", "float": "double", "bool": "boolean", "array": "%s[] %s= new %s", "list": "List", "tuple": "Pair", "str": "String", "dict": "HashMap", "datetime": "Date" } types2 = { "int": "Integer", "float": "Double", "str": "String", "bool":"Boolean", "datetime":"Date", "Date":"Date" } 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': '(int) Math.ceil', 'round': 'Math.round', 'exp': 'Math.exp', 'pow': 'Math.pow' }, 'io': { 'print': translatePrint, 'read': 'readLine', 'read_file': 'File.ReadAllText', 'write_file': 'File.WriteAllText' }, 'system': { 'min': 'Math.min', 'max': 'Math.max', 'abs': 'Math.abs', 'pow': translatePow }, 'datetime':{ 'datetime':translateDateTime #trans_format_parse } } constant = { 'math':{ 'pi': 'Math.PI' } } methods = { 'int': { 'float': '(double)' }, 'float': { 'int': '(int)', 'float':'(double)' }, 'str': { 'int': 'Integer.parseInt', 'find': '.IndexOf', 'float': 'Double.' }, 'list': { 'len': translateLenList, 'append': '.add', 'sum': translateSum, 'pop': '.remove', 'insert_at': ".insert", 'contains?': '.contains', 'not contains?': translateNotContains, 'index': '.indexOf' }, 'dict': { 'len': translateLenDict, 'keys': translateDictkeys, # in assignment 'values':translateDictValues, # in assignment 'get':'.get' }, 'array':{ 'len': translateLenArray, 'append': '.add' } } get_properties = ''' { return %s; }''' set_properties = ''' { this.%s= _%s; } ''' constructor = ''' public %s() { }''' copy_constr = ''' public %s(%s toCopy, boolean copyAll) // copy constructor { if (copyAll) {''' copy_constrList = ''' for (%s c : toCopy.%s) { _%s.add(c); } this.%s = _%s;''' copy_constrArray = ''' for (int i = 0; i < %s; i++) { _%s[i] = toCopy._%s[i]; }''' get_properties_compo = ''' { return _%s.get%s(); }''' set_properties_compo = ''' { %s } ''' copy_constr_compo = ''' public %s(%s toCopy) // copy constructor {'''
[docs]def argsToStr(args): t=[] for arg in args: t.append(arg.value) return '"%s"'%('/'.join(t))