This commit is contained in:
fiplox 2022-01-03 14:26:20 +01:00
parent 0dc4ee873e
commit dee4624ab3
3 changed files with 0 additions and 42208 deletions

View File

@ -1,121 +0,0 @@
#include "vec.h"
#include <errno.h>
#include <regex.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int find_funcs(const char *path)
{
FILE *fp;
regex_t fdre, fcre;
int ret;
char line[1024];
char boum[1024];
regmatch_t rm[2];
const char *re_func_decl = "^(\\w+(\\s+)?){2,}\\([^!@#$+%^]+?\\)\\s+";
const char *re_func_call = "([a-zA-Z_0-9]+)\\(.*\\)";
fp = fopen(path, "r");
if (fp == 0) {
fprintf(stderr, "Failed to open file %s (%d: %s)\n", path, errno, strerror(errno));
return EXIT_FAILURE;
}
ret = regcomp(&fdre, re_func_decl, REG_EXTENDED);
if (ret != 0) {
fprintf(stderr, "Failed to compile regex '%s'\n", re_func_decl);
return EXIT_FAILURE;
}
ret = regcomp(&fcre, re_func_call, REG_EXTENDED);
if (ret != 0) {
fprintf(stderr, "Failed to compile regex '%s'\n", re_func_call);
return EXIT_FAILURE;
}
int i = 0;
bool in = false;
graph_vec g = new_graph(10);
// while ((fgets(line, 1024, fp)) != NULL) {
// if (regexec(&fdre, line, 2, rm, 0) == 0) {
// // printf("Line: <<%.*s>>\n", (int)(rm[0].rm_eo - rm[0].rm_so), line + rm[0].rm_so);
// sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
// insert_node(&g, i, boum);
// i++;
// }
// }
// rewind(fp);
// i = -1;
int index;
int i1, i2 = -1;
while ((fgets(line, 1024, fp)) != NULL) {
if (in && line[0] == '}') {
in = false;
}
if (in) {
if (regexec(&fcre, line, 2, rm, 0) == 0) {
// printf("Line: <<%.*s>>\n", (int)(rm[0].rm_eo - rm[0].rm_so), line + rm[0].rm_so);
sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
if ((index = is_in(g, boum))) {
if (g.node[i2]->nbs == g.node[i2]->cap)
g.node[i2]->succ = reallocarray(g.node[i2]->succ, (g.node[i2]->cap += 5), sizeof(nodept));
// printf("NBS = %d %s\n", g.node[index]->num, g.func[index]);
// g.node[i]->succ = malloc(sizeof(nodept));
g.node[i2]->succ[i1] = g.node[index];
g.node[i2]->nbs++;
i1++;
// insert_succ(g.node[i], g.node[index]);
} else {
insert_node(&g, i, boum);
i++;
// if (g.node[i]->nbs == g.node[i]->cap)
// g.node[i]->succ = reallocarray(g.node[i]->succ, (g.node[i]->cap += 5), sizeof(nodept));
// struct node *n = malloc(sizeof(struct node));
// n->num = i;
// n->nbs = 0;
// // n->cap = 5;
// // n->succ = malloc(5 * sizeof(nodept));
// strcpy(n->func, boum);
// g.node[i]->succ[i1] = n;
// g.node[i]->nbs++;
// i1++;
// insert_succ(&g, i, i1, boum);
// i1++;
}
}
} else if (regexec(&fdre, line, 2, rm, 0) == 0) {
sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
insert_node(&g, i, boum);
i++;
i2++;
in = true;
i1 = 0;
}
}
for (int j = 0; j < i; j++) {
printf("NODE %d: %s\n",j, g.node[j]->func);
for (int n = 0; n < g.node[j]->nbs; n++) {
printf("SUCC %d: %s\n",j, g.node[j]->succ[n]->func);
}
}
// for (int j = 0; j < i; j++) {
// printf("fc %s\n", boum2[j]);
// }
regfree(&fdre);
regfree(&fcre);
fclose(fp);
delete_graph(&g);
return 0;
}
int main(int argc, char *argv[])
{
find_funcs("./memline.c");
// graph_vec g = new_graph(3);
// insert_node(&g, new_node(0), "main");
// insert_node(&g, new_node(1), "main1");
// insert_node(&g, new_node(2), "main2");
// printf("%d %d %d\n", g.node[0]->num,g.node[1]->num,g.node[2]->num);
// printf("%s %s %s\n", g.func[0],g.func[1],g.func[2]);
// delete_graph(&g);
return 0;
}

37765
graph.dot

File diff suppressed because it is too large Load Diff

4322
memline.c

File diff suppressed because it is too large Load Diff