diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-06-06 21:15:59 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-06-06 21:15:59 +0300 |
commit | 2f24687e069abfc82383171d4e05d06487f69a06 (patch) | |
tree | df8954b218b8ccc44dbc52295f86f0ea191883d9 /scripts/addfile.py | |
parent | 51096a574a96d741fe875d5bd954f9fea382aacb (diff) | |
download | paranucker-2f24687e069abfc82383171d4e05d06487f69a06.tar.gz paranucker-2f24687e069abfc82383171d4e05d06487f69a06.tar.bz2 paranucker-2f24687e069abfc82383171d4e05d06487f69a06.tar.xz paranucker-2f24687e069abfc82383171d4e05d06487f69a06.zip |
Add script for autogenerate node and parsers based on dir and name.
Diffstat (limited to 'scripts/addfile.py')
-rwxr-xr-x | scripts/addfile.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/scripts/addfile.py b/scripts/addfile.py new file mode 100755 index 0000000..ab1b937 --- /dev/null +++ b/scripts/addfile.py @@ -0,0 +1,80 @@ +#! /usr/bin/env python2 +# -*- coding: utf8 -*- +# +# Copyright (C) 2015 Andrei Karas + +import sys + + +def readFile(path): + with open(path, "r") as f: + return f.read() +def writeFile(fileName, data): + with open(fileName, "w") as w: + w.write(data) +def firstBigLetter(text): + return text[0].upper() + text[1:] + + +if len(sys.argv) < 2 or len(sys.argv) > 3: + print "Usage:" + print " addfile.py [dir] nodename" + exit(1) + +nodeTemplate = readFile("tpl/node.tpl") +parserTemplate = readFile("tpl/parser.tpl") +if len(sys.argv) == 2: + dirName = "" + nodeName = sys.argv[1].lower() +else: + dirName = sys.argv[1].lower() + nodeName = sys.argv[2].lower() +suffixSize = 0 +parserAdditionalCode1 = "" +parserAdditionalCode2 = "" +parserBaseInclude = "" + +if nodeName[-4:] == "decl": + suffixSize = 4 + parserAdditionalCode1 = " fillLocation(node);\n fillDeclLabel(node);\n" + parserAdditionalCode2 = "\n fillDeclAutoGenerated(node);\n fillDeclAttributes(node);\n" + parserBaseInclude = "#include \"parsers/base/decl.h\"\n" +elif nodeName[-4:] == "type": + suffixSize = 4 + parserAdditionalCode2 = "\n fillTypeName(node);\n fillTypeAttributes(node);\n" + parserBaseInclude = "#include \"parsers/base/type.h\"\n" +elif nodeName[-3:] == "cst": + suffixSize = 3 +elif nodeName[-4:] == "expr": + suffixSize = 4 + parserAdditionalCode2 = "\n fillExprOperands(node);\n" + parserBaseInclude = "#include \"parsers/base/expr.h\"\n" +elif nodeName[-4:] == "list": + suffixSize = 4 +else: + print "unknown nodename" + exit(1) + +word1 = nodeName[0 : len(nodeName) - suffixSize] +word2 = nodeName[- suffixSize:] +typeName = firstBigLetter(word1) + firstBigLetter(word2) +fileName = word1 + "_" + word2 +nodeInclude = "" +if dirName != "": + guardHeader = (dirName + "_" + nodeName).upper() + baseName = dirName + baseTypeName = firstBigLetter(dirName) + nodeInclude = dirName + "/" + fileName +else: + guardHeader = nodeName.upper() + baseName = "node" + baseTypeName = "Node" + nodeInclude = fileName + +writeFile("../src/nodes/{0}/{1}.h".format(dirName, fileName), + nodeTemplate.format(guardHeader, baseName, typeName, baseTypeName)) +writeFile("../src/parsers/{0}/{1}.cpp".format(dirName, fileName), + parserTemplate.format(typeName, nodeInclude, parserBaseInclude, parserAdditionalCode1, parserAdditionalCode2)) + +#print nodeTemplate.format(guardHeader, baseName, typeName, baseTypeName) +#print parserTemplate.format(typeName, nodeInclude, parserBaseInclude, parserAdditionalCode1, parserAdditionalCode2) |