#include <rlib.h> #define print rprintb int printf_dummy(const char *format, ...) { (void)format; return 0; } #ifdef printf #undef printf #endif #define printf printf_dummy #include "parser.h" unsigned int parse_only(char *script) { lexer_t *lexer = lexer_new(); lexer = lexer_parse(lexer, script); parse(lexer); unsigned int result = lexer->lines; lexer_delete(lexer); return result; } void lex_and_parse(char *script) { parse_string(script); } int main() { char *script = " // comment\n" " /* multiline comment */\n" " class Number{}\n" " class String{}\n" " class Boolean{}\n" " Number number1 = -1\n" " Number number2 = 2\n" " Number number3 = 3.0\n" " Number number4 = -3.0\n" " String string1 = 5\n" " String string2 = 4\n" " Boolean bool1 = 1\n" " Boolean bool2 = 0\n" " class Myclass(){}\n" " class MyClass2(MyClass){}"; lexer_t *lexer = lexer_new(); lexer = lexer_parse(lexer, script); print("Only lexing:\n"); nsecs_t time_start = nsecs(); parse(lexer); unsigned int lines = lexer->lines; unsigned int token_count = lexer->count; lexer_delete(lexer); nsecs_t time_end = nsecs(); nsecs_t duration = time_end - time_start; print("Time: %s\n", format_time(duration)); print("Lines per second: %f\n", ((float)lines) / (duration / 1000000000.0f)); print("Full parsing (lexing+parsing):\n"); time_start = nsecs(); parse_string(script); time_end = nsecs(); duration = time_end - time_start; print("Time: %s\n", format_time(duration)); print("Lines per second: %f\n", ((float)lines) / (duration / 1000000000.0f)); print("Lines: %d\n", lines); print("Token count: %zu\n", token_count); print("%s\n", rmalloc_stats()); return 0; }