JSON ==== Parser **program** is generated as C99 code by default. However, you can generate it as JSON. You can convert the JSON program to C program using a function call. A library is provided utility file for this. .. code-block:: static int ReadFile(const char * filename, char ** text, unsigned int * length) { FILE* fp = fopen(filename, "rb"); if(fp == 0) return 0; fseek(fp, 0, SEEK_END); length[0] = ftell(fp); fseek(fp, 0, SEEK_SET); *text = malloc(length[0] + 1); memset(*text, 0, length[0] + 1); fread(*text, 1, length[0], fp); fclose(fp); return 1; } int main() { struct AlgodalParser_Program program = AlgodalJsonParser_GetProgramFromFile("ini-program.json", 0); //AlgodalJsonParser_DebugProgram(program); char * text = 0; unsigned int length; if(ReadFile("sample.ini", &text, &length) && program.successful_allocation_json) { clock_t begin = clock(), end; double duration; struct AlgodalParser_TokenizeResult tr = AlgodalParser_GetTokenizeResult(program, text, length, 0); struct AlgodalParser_AnalyzeResult ar = {}; if(tr.error.flags == 0) { ar = AlgodalParser_GetAnalyzeResult(program, text, tr.tokens.addr, tr.tokens.size, 0); } end = clock(); duration = (double)(end - begin) / CLOCKS_PER_SEC; struct AlgodalParser_Linenumber *L = AlgodalParser_CreateParserLinenumber(text, length); cwpc_printf("\nTokenization:\n"); AlgodalParser_PrintTokenizeResult(program, tr, text, L); if(ar.nodes.size) { cwpc_printf("\nAnalyzation:\n"); AlgodalParser_PrintAnalyzeResult(program, ar, tr.tokens.addr, text, L); } AlgodalParser_DestroyParserLinenumber(L); AlgodalParser_DestroyTokenizeResult(tr); if(ar.nodes.size) AlgodalParser_DestroyAnalyzeResult(ar); AlgodalJsonParser_DestroyProgram(program); free(text); cwpc_printf("completed in %f milliseconds\n", duration * 1000); } return EXIT_SUCCESS; }