This commit is contained in:
Олег Бородин
2025-10-16 00:08:17 +02:00
parent 5dca71f775
commit fc578f6e48
26 changed files with 994 additions and 931 deletions

View File

@@ -18,55 +18,58 @@
int main(void) {
char* src = "key1 = var1 # comment 1\nkey2 = var2 # comment 2 and 3\n# comment 4\nkey3 = var3";
char* src = "key1 = var1 # comment 1\nkey2 = var2 # comment 2 and 3\n# comment 4\nkey3 = var3";
bstream_t stream;
bstream_t stream;
bstream_init(&stream);
bstream_init(&stream);
tclexer_t lexer;
tclexer_init(&lexer, &stream);
tclexer_t lexer;
vmapper_t vmapper;
vmapper_init(&vmapper);
tclexer_init(&lexer, &stream);
tccomp_t comp;
tccomp_init(&comp, &lexer, &vmapper);
vmapper_t vmapper;
bstream_write(&stream, src, strlen(src));
vmapper_init(&vmapper);
int port = 0;
bool flag = false;
char* ident = NULL;
tccomp_t comp;
vmapper_bind_int(&vmapper, "port", &port);
vmapper_bind_string(&vmapper, "ident", &ident);
vmapper_bind_bool(&vmapper, "flag", &flag);
tccomp_init(&comp, &lexer, &vmapper);
vmapper_set(&vmapper, "port", "12345");
vmapper_set(&vmapper, "ident", "qwerty");
vmapper_set(&vmapper, "flag", "true");
bstream_write(&stream, src, strlen(src));
int res = tccomp_parse(&comp);
int port = 0;
bool flag = false;
char* ident = NULL;
if (res < 0) {
printf("parsing error pos %d line %d\n", comp.pos, comp.lnum);
}
vmapper_bind_int(&vmapper, "port", &port);
vmapper_bind_string(&vmapper, "ident", &ident);
vmapper_bind_bool(&vmapper, "flag", &flag);
printf("port = %d\n", port);
MASSERT(port == 12345);
vmapper_set(&vmapper, "port", "12345");
vmapper_set(&vmapper, "ident", "qwerty");
vmapper_set(&vmapper, "flag", "true");
printf("ident = %s\n", ident);
MASSERT(strcmp(ident, "qwerty") == 0);
free(ident);
int res = tccomp_parse(&comp);
printf("flag = %d\n", flag);
MASSERT(flag == true);
if (res < 0) {
printf("parsing error pos %d line %d\n", comp.pos, comp.lnum);
}
tccomp_destroy(&comp);
tclexer_destroy(&lexer);
vmapper_destroy(&vmapper);
bstream_destroy(&stream);
printf("port = %d\n", port);
MASSERT(port == 12345);
return 0;
printf("ident = %s\n", ident);
MASSERT(strcmp(ident, "qwerty") == 0);
free(ident);
printf("flag = %d\n", flag);
MASSERT(flag == true);
tccomp_destroy(&comp);
tclexer_destroy(&lexer);
vmapper_destroy(&vmapper);
bstream_destroy(&stream);
return 0;
}