|
|
@@ -0,0 +1,72 @@ |
|
|
|
#!/usr/bin/env python3 |
|
|
|
import os |
|
|
|
import sys |
|
|
|
|
|
|
|
DIR = os.path.dirname(os.path.realpath(sys.argv[0])) |
|
|
|
|
|
|
|
# Demand file as input |
|
|
|
if len(sys.argv) < 2: |
|
|
|
print("Usage: /path/to/translate CPP_FILE") |
|
|
|
sys.exit(1) |
|
|
|
|
|
|
|
FILE_IN = sys.argv[1] |
|
|
|
|
|
|
|
# Read file. |
|
|
|
lines_in = [] |
|
|
|
with open(FILE_IN) as file: |
|
|
|
for line in file: |
|
|
|
lines_in.append(line.rstrip()) |
|
|
|
|
|
|
|
# Translate. |
|
|
|
lines_out = [] |
|
|
|
|
|
|
|
isDeclaration = False |
|
|
|
isDeclarationLine = False |
|
|
|
isBody = False |
|
|
|
functionName = None |
|
|
|
returnType = None |
|
|
|
argumentNames = [] |
|
|
|
argumentTypes = [] |
|
|
|
|
|
|
|
for ln in lines_in: |
|
|
|
ln = ln.lstrip() |
|
|
|
# Ignore includes. |
|
|
|
if "#include" in ln: |
|
|
|
continue |
|
|
|
|
|
|
|
parts = ln.split(" ") |
|
|
|
count = len(parts) |
|
|
|
lastPart = parts[count - 1] |
|
|
|
if not isBody and lastPart.endswith("("): |
|
|
|
isDeclaration = True |
|
|
|
isDeclarationLine = True |
|
|
|
isBody = False |
|
|
|
|
|
|
|
# End of function arguments. |
|
|
|
if not isDeclarationLine and not isBody and ln.endswith(") {"): |
|
|
|
isDeclaration = False |
|
|
|
isBody = True |
|
|
|
|
|
|
|
# Function argument. |
|
|
|
if ( |
|
|
|
isDeclaration and |
|
|
|
not isDeclarationLine and |
|
|
|
not isBody and |
|
|
|
not ln.endswith(") {") |
|
|
|
): |
|
|
|
print(f"TODO argument: '{ln}'") |
|
|
|
|
|
|
|
# Function return type and function name. |
|
|
|
if isDeclaration and lastPart.endswith("("): |
|
|
|
functionName = lastPart[:-1] |
|
|
|
returnType = ln[:-len(lastPart) - 1] # -1 for space before function name |
|
|
|
print(f"Function name: '{functionName}'") |
|
|
|
print(f"Return type: '{returnType}'") |
|
|
|
isDeclarationLine = False |
|
|
|
|
|
|
|
lines_out.append(ln) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Output result. |
|
|
|
print(lines_out) |