|
- 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<X, Y>
- 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}
- }}
- """
|