Initial Commit

This commit is contained in:
2025-08-30 16:07:19 +01:00
commit d86c15e30c
169 changed files with 121377 additions and 0 deletions

87
tests/regex.c Normal file
View File

@@ -0,0 +1,87 @@
#define PCRE2_CODE_UNIT_WIDTH 8
#include <pcre2.h>
#include <stdio.h>
#include <string.h>
typedef struct Pattern {
const char *name;
pcre2_code *re;
} Pattern;
char *read_file(const char *filename) {
FILE *fp = fopen(filename, "rb");
if (!fp) {
perror("fopen");
return NULL;
}
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
rewind(fp);
char *buffer = malloc(size + 1);
if (!buffer) {
perror("malloc");
fclose(fp);
return NULL;
}
size_t read = fread(buffer, 1, size, fp);
buffer[read] = '\0';
fclose(fp);
return buffer;
}
int main() {
const char *pattern = "\\b(class)\\s+(([a-zA-Z0-9_]+)((::[a-zA-Z0-9_]+)*))"
"\\s*((<)\\s*(([a-zA-Z0-9_]+)((::[a-zA-Z0-9_]+)*))?)?";
const char *input = read_file("/home/syed/main/cubit/tests/test.rb");
int errorcode;
PCRE2_SIZE erroroffset;
// Compile the regex
pcre2_code *re = pcre2_compile((PCRE2_SPTR)pattern, // pattern
PCRE2_ZERO_TERMINATED, // pattern length
0, // options
&errorcode, // for error code
&erroroffset, // for error offset
NULL // compile context
);
if (!re) {
PCRE2_UCHAR buffer[256];
pcre2_get_error_message(errorcode, buffer, sizeof(buffer));
fprintf(stderr, "PCRE2 compilation failed at offset %d: %s\n",
(int)erroroffset, buffer);
return 1;
}
// Prepare match data
pcre2_match_data *match_data = pcre2_match_data_create_from_pattern(re, NULL);
int rc = pcre2_match(re, // the compiled pattern
(PCRE2_SPTR)input, // subject string
strlen(input), // length of subject
0, // start offset
0, // options
match_data, // match data
NULL // match context
);
if (rc < 0) {
printf("No match found.\n");
} else {
PCRE2_SIZE *ovector = pcre2_get_ovector_pointer(match_data);
for (int i = 0; i < rc; i++) {
PCRE2_SIZE start = ovector[2 * i];
PCRE2_SIZE end = ovector[2 * i + 1];
printf("Group %d: start=%lu end=%lu text=\"%.*s\"\n", i, start, end,
(int)(end - start), input + start);
}
}
// Cleanup
pcre2_match_data_free(match_data);
pcre2_code_free(re);
return 0;
}