这是我的C++程序,用于生成CFG表示的
最后,执行该命令可将图表显示为流程图:
我遇到的问题是输出文件中出现了百分号字符,而函数和操作符标识符却缺失:
png
文件:#include <iostream>
#include <array>
#include <string>
#include <cstring>
int partitionFunc(std::string &str, int startInd, int endInd)
{
int primIndex = startInd;
int pivotVal = str[endInd];
for(int i = startInd; i < endInd; i++) {
if(str[i] <= pivotVal) {
char tempIn = str[i];
str[i] = str[primIndex];
str[primIndex] = tempIn;
primIndex++;
}
}
char tempOut = str[primIndex];
str[primIndex] = str[endInd];
str[endInd] = tempOut;
return primIndex;
}
void runQsort(std::string &str, int startInd, int endIndex)
{
if(startInd < endIndex) {
int primIndex = partitionFunc(str, startInd, endIndex);
runQsort(str, startInd, primIndex - 1);
runQsort(str, primIndex, endIndex);
}
}
int main(int argc, char * argv[])
{
std::array<std::string, 6> verbs = { "alternative", "destination", "airlines", "turbulence", "contribution", "ultimate" };
std::string selected;
int option = 14;
int endIndex;
switch (option)
{
case 1:
selected = verbs[0];
break;
case 2:
selected = verbs[1];
break;
case 3:
selected = verbs[2];
break;
case 4:
selected = verbs[3];
break;
case 5:
selected = verbs[4];
break;
default:
selected = verbs[5];
break;
}
runQsort(selected, 0, selected.length() - 1);
int x = 0;
while(x < selected.length()) {
std::cout << selected[x];
x++;
}
std::cout << std::endl;
return 0;
}
为了能够可视化,我使用 clang++
和 llvm
来解析源代码并将其处理成 dot
格式:
clang -emit-llvm main.cpp -c -o main.bc
opt --dot-cfg-only main.bc
最后,执行该命令可将图表显示为流程图:
dot -Tpng .main.dot -o main.png
我遇到的问题是输出文件中出现了百分号字符,而函数和操作符标识符却缺失:
cpp
文件中的标识符。要做到这一点,需要添加什么指令(或者推荐哪些资源可以帮助我更熟悉这个主题)?如果在适当地编辑源代码之后,我更愿意继续使用clang++/llvm
解析。