Research portable Memory game | Исследовать портируемую игру Память
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

45 строки
1.1KB

  1. from Function import *
  2. def translateParameter(s):
  3. # name: type -> type name
  4. parts = s.split(": ")
  5. indent = len(s) - len(s.lstrip())
  6. name = parts[0].lstrip()
  7. t = translateType(parts[1])
  8. indentation = "".join(" " * indent)
  9. return f"{indentation}{t} {name}"
  10. def translateType(s):
  11. # dict[X, Y] -> std::map<X, Y>
  12. if s.startswith("dict["):
  13. kv = s[len("dict["):-len("]")]
  14. parts = kv.split(", ")
  15. return f"std::map<{parts[0]}, {parts[1]}>"
  16. # Unknown. Return as is.
  17. return s
  18. class CPP:
  19. def __init__(self, fn):
  20. self.fn = fn
  21. def translate(self):
  22. returnType = translateType(self.fn.returnType)
  23. # Parameters.
  24. params = []
  25. for i in range(0, len(self.fn.parameters)):
  26. p = translateParameter(self.fn.parameters[i])
  27. params.append(p)
  28. strparams = "\n".join(params)
  29. # Statements.
  30. sts = self.fn.statements
  31. strstatements = "\n".join(sts)
  32. return f"""{returnType} {self.fn.name}(
  33. {strparams}
  34. ) {{
  35. {strstatements}
  36. }}
  37. """