diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index f35e573..a44405e 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -173,7 +173,7 @@ fun App() { traceTree = traceTreeStr.toString() funcTraceTree = - getInvokeTraceTreeString(sf,relations) + getInvokeTraceTreeString(sf) ttGraph = generateGraph(relations) ivGraph = sf.functions.getInvokeGraph() diff --git a/src/main/kotlin/core/SourceFile.kt b/src/main/kotlin/core/SourceFile.kt index 2f48b36..8ae0a6b 100644 --- a/src/main/kotlin/core/SourceFile.kt +++ b/src/main/kotlin/core/SourceFile.kt @@ -1,5 +1,3 @@ -@file:Suppress("unused") - package core import java.io.File @@ -30,7 +28,7 @@ class SourceFile { } // 处理 DEFINE, 支持如下 - // #define SOMETHING ANOTHERTHING 这样的 + // #define SOMETHING ANOTHER 这样的 // #define ADD(a, b) a + b val noFuncInDefine = StringBuilder() // 获取 define 的内容 @@ -154,7 +152,11 @@ class SourceFile { this.content = formatSource(content) } - fun parseFunction(): List { // 找所有的函数定义 + /** + * 找所有的函数定义 + * @return 所有定义的函数 + */ + fun parseFunction(): List { val result = mutableListOf() function_define_regex.findAll(content).forEach { if (it.groups.size >= 2 && it.groups[1] != null) { @@ -165,7 +167,12 @@ class SourceFile { return result } - fun getDef(): Map> { // 获取所有的定义 + /** + * 找所有的变量定义 + * @return Map of<函数名称 to List<定义的变量>> + * @see utils.getDefineList + */ + fun getDef(): Map> { val result = mutableMapOf>() functions.forEach { result[it.name] = it.cParser.defineList @@ -173,6 +180,11 @@ class SourceFile { return result } + /** + * 任务1:获取使用的值的情况 + * @return Map of<函数 to List<使用值的情况>> + * @see utils.getUseList 获取要求的格式 + */ fun getUse(): Map> { val globalResult = mutableMapOf>() functions.forEach { @@ -210,7 +222,7 @@ class SourceFile { useCache.append("${sentence.left}-def") } - DEFINE_VALUE_PARAM, CHANGE_VALUE_PARAM -> { + DEFINE_VALUE_PARAM, CHANGE_VALUE_PARAM -> { // 作为参数出现的 useCache.append(";${sentence.right}-use") } @@ -226,17 +238,17 @@ class SourceFile { } } -fun main() { +fun main() { // 测试用, NoGUI val sourceFile = SourceFile(File("src/main/CTests/test.c")) - val funcs = sourceFile.parseFunction() + val functions = sourceFile.parseFunction() val relations = mutableMapOf>() - funcs.forEach { + functions.forEach { relations.putAll(parseRelation(it.name, it.getTraceTree().getStringRepr())) } - for (function in funcs) { - println(funcs.getInvokeTree(function.name).getFuncRepr(function.name)) + for (function in functions) { + println(functions.getInvokeTree(function.name).getFuncRepr(function.name)) } println(generateGraph(relations)) - println(funcs.getInvokeGraph()) + println(functions.getInvokeGraph()) } \ No newline at end of file diff --git a/src/main/kotlin/utils/stringMagic.kt b/src/main/kotlin/utils/stringMagic.kt index 2978094..a4034af 100644 --- a/src/main/kotlin/utils/stringMagic.kt +++ b/src/main/kotlin/utils/stringMagic.kt @@ -31,7 +31,7 @@ fun getTraceTreeString(traceTreeStr: String, funcName: String): String { return sb.toString() } -fun getInvokeTraceTreeString(sourceFile: SourceFile, relations: Map>): String { +fun getInvokeTraceTreeString(sourceFile: SourceFile): String { val tree = StringBuilder() for (function in sourceFile.functions) { val chain = sourceFile.functions.getInvokeTree(function.name).getFuncRepr(function.name)