Last active
February 27, 2018 14:34
-
-
Save luchenqun/93f57e3bbc4319b980e9cf931e4313ba to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var readline = require('readline'); | |
| var fs = require('fs'); | |
| var os = require('os'); | |
| var fReadName = './test.cpp'; | |
| var fWriteName = './test.deal.cpp'; | |
| var fRead = fs.createReadStream(fReadName); | |
| var fWrite = fs.createWriteStream(fWriteName); | |
| var objReadline = readline.createInterface({ | |
| input: fRead, | |
| }); | |
| var func = [] | |
| var retType = (func) => { | |
| var ftype = "unknowRetType"; | |
| for(let val of func){ | |
| if (val.includes("output =")) { | |
| ftype = val.trim().split("output")[0].trim(); | |
| break; | |
| } | |
| } | |
| return ftype; | |
| } | |
| var funcName = (func) => { | |
| let fname = "unknowFuncName"; | |
| for(let val of func){ | |
| if (val.includes("void")) { | |
| let arr = val.trim().split(" "); | |
| let name = arr[1]; | |
| let start = name.indexOf("_"); | |
| let end = name.indexOf("("); | |
| fname = name.substring(start + 1, end); | |
| if (fname.charAt(fname.length -1) >= '0' && fname.charAt(fname.length -1) <= '9') { | |
| fname = fname.substring(0, fname.length -1); | |
| } | |
| // console.log(name, fname, start + 1, end); | |
| break; | |
| } | |
| } | |
| return fname; | |
| } | |
| var inType = (func) => { | |
| let ret = { | |
| a: "unknowA", | |
| b: "unknowB", | |
| name: "", | |
| }; | |
| for(let val of func){ | |
| if (val.includes("a =")) { | |
| ret.a = val.trim().split("=")[0].trim(); | |
| } | |
| if (val.includes("b =")) { | |
| ret.b = val.trim().split("=")[0].trim(); | |
| break; | |
| } | |
| } | |
| let temp = ret.a.split(" "); | |
| ret.name += "_"; | |
| ret.name += (temp.length === 3) ? ("u" + temp[1]) : (temp[0]); | |
| temp = ret.b.split(" "); | |
| ret.name += "_"; | |
| ret.name += (temp.length === 3) ? ("u" + temp[1]) : (temp[0]); | |
| return ret; | |
| } | |
| var flag = true; | |
| objReadline.on('line', (line) => { | |
| if (line.startsWith('//')) { | |
| func = []; | |
| } | |
| func.push(line); | |
| if(line === "}" && flag){ | |
| for(let val of func){ | |
| let name = "lcq"; | |
| // 函数声明 | |
| if (val.includes("void ")) { | |
| val = retType(func) + " " + funcName(func) + inType(func).name + "(" + inType(func).a + ", " + inType(func).b + ")"; | |
| } | |
| if (val.includes("CIOV i2;")) { | |
| val = " CIOV i1, i2;"; | |
| } | |
| if (val.includes("}")) { | |
| fWrite.write(" return output;" + os.EOL); | |
| } | |
| // 过滤不打印的 | |
| if (val.includes("cout") || val.includes("a =") || val.includes("b =") || val.includes("CIOV i1;") || val === "") { | |
| continue; | |
| } | |
| fWrite.write(val + os.EOL); // 下一行 | |
| } | |
| fWrite.write(os.EOL); // 下一行 | |
| flag = true; | |
| } | |
| }); | |
| objReadline.on('close', () => { | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment