Back to project.

Raw source file available here .

#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;
}