Source code for pycropml.transpiler.antlr_py.java.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="print", args=[n]))) return x else: return {"type":"ExprStatNode", "expr":{'type':"custom_call", "function":"print", "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] def translateCopy(node): return Node(type="call", function = "new ArrayList<>", args=[Node("local", name=node.args.name)])
[docs] class Java_CymlRules(GeneralRule): def __init__(self): GeneralRule.__init__(self) binary_op = {"and": "&&", "or": "||", "not": "!", "<": "<", ">": ">", "==": "==", "+": "+", "-": "-", "*": "*", "/": "/", ">=": ">=", "<=": "<=", "!=": "!=" } unary_op = { 'not': '!', '+': '+', '-': '-', '~': '~' } types = { "int": "int", "float": "float", "double": "float", "Double": "float", "Integer": "int", "bool": "boolean", "array": "array", "List": "list", "tuple": "tuple", "String": "str", "HashMap": "dict", "LocalDateTime": "datetime" } types2 = { "int": "Integer", "float": "Double", "str": "String", "bool":"Boolean", "datetime":"LocalDateTime", "Date":"LocalDateTime" } functions = { 'math': { 'ln': 'log10', 'log': 'log', 'tan': 'tan', 'sin': 'sin', 'cos': 'cos', 'asin': 'asin', 'acos': 'acos', 'atan': 'atan', 'sqrt': 'sqrt', 'ceil': '(int) ceil', 'round': 'round', 'exp': 'exp', 'pow': 'pow', 'floor': 'floor' }, 'io': { 'print': translatePrint, 'read': 'readLine', 'read_file': 'File.ReadAllText', 'write_file': 'File.WriteAllText' }, 'system': { 'min': 'min', 'max': 'max', 'abs': 'abs', 'pow': translatePow, 'copy':translateCopy }, 'datetime':{ 'datetime':translateDateTime #trans_format_parse } } constant = { 'math':{ 'pi': 'pi' } } methods = { 'int': { 'float': '(double)' }, 'float': { 'int': '(int)', 'float':'(double)' }, 'str': { 'int': 'Integer.parseInt', 'find': '.IndexOf', 'float': 'Double.' }, 'list': { 'len': 'len', 'append': 'append', 'sum': 'sum', 'pop': 'pop', 'insert_at': "insert_at", 'contains?': 'contains?', 'not contains?': "not contains?", 'index': 'index' }, 'dict': { 'len': 'len', 'keys': translateDictkeys, # in assignment 'values':translateDictValues, # in assignment 'get':'.get' }, 'array':{ 'len': "len", 'append': 'append' } }
[docs] def argsToStr(args): t=[] for arg in args: t.append(arg.value) return '"%s"'%('/'.join(t))