from Function import * def translateParameter(s): # name: type -> type name parts = s.split(": ") indent = len(s) - len(s.lstrip()) name = parts[0].lstrip() t = translateType(parts[1]) indentation = "".join(" " * indent) return f"{indentation}{t} {name}" def translateType(s): # dict[X, Y] -> std::map if s.startswith("dict["): kv = s[len("dict["):-len("]")] parts = kv.split(", ") return f"std::map<{parts[0]}, {parts[1]}>" # Unknown. Return as is. return s class CPP: def __init__(self, fn): self.fn = fn def translate(self): returnType = translateType(self.fn.returnType) # Parameters. params = [] for i in range(0, len(self.fn.parameters)): p = translateParameter(self.fn.parameters[i]) params.append(p) strparams = "\n".join(params) # Statements. sts = self.fn.statements strstatements = "\n".join(sts) return f"""{returnType} {self.fn.name}( {strparams} ) {{ {strstatements} }} """