From 41b03491b067d9367a8b68a1eac4695c5fa3f061 Mon Sep 17 00:00:00 2001 From: Keyvan Kambakhsh Date: Sun, 10 Nov 2024 21:29:44 +0330 Subject: [PATCH] Testing preprocessed outputs --- main.c | 24 +- scripts/test.py | 3 +- tests/output/inp.c_prep_output.txt | 59 +++ tests/output/inp3.c_prep_output.txt | 492 ++++++++++++++++++ tests/output/inp4.c_prep_output.txt | 175 +++++++ tests/output/inp5.c_prep_output.txt | Bin 0 -> 2933 bytes tests/output/inp6.c_prep_output.txt | 81 +++ tests/output/inp_arg_macro.c_asm_output.txt | 76 +++ tests/output/inp_arg_macro.c_lex_output.txt | 79 +++ tests/output/inp_arg_macro.c_prep_output.txt | 52 ++ tests/output/inp_arg_macro.c_tree_output.txt | 62 +++ tests/output/inp_bin_op.c_prep_output.txt | 34 ++ tests/output/inp_break.c_prep_output.txt | 156 ++++++ tests/output/inp_func_ptrs.c_prep_output.txt | 183 +++++++ tests/output/inp_goto.c_prep_output.txt | 50 ++ tests/output/inp_include.c_asm_output.txt | 10 + tests/output/inp_include.c_lex_output.txt | 21 +- tests/output/inp_include.c_prep_output.txt | 67 +++ tests/output/inp_include.c_tree_output.txt | 10 + .../output/inp_linked_list.c_prep_output.txt | 252 +++++++++ tests/output/inp_pointer.c_prep_output.txt | Bin 0 -> 4659 bytes tests/output/inp_preprocess.c_prep_output.txt | 57 ++ tests/output/inp_unary_op.c_prep_output.txt | 119 +++++ tests/output/lib_usage.c_prep_output.txt | 204 ++++++++ tests/output/switch.c_prep_output.txt | 126 +++++ 25 files changed, 2363 insertions(+), 29 deletions(-) create mode 100644 tests/output/inp.c_prep_output.txt create mode 100644 tests/output/inp3.c_prep_output.txt create mode 100644 tests/output/inp4.c_prep_output.txt create mode 100644 tests/output/inp5.c_prep_output.txt create mode 100644 tests/output/inp6.c_prep_output.txt create mode 100644 tests/output/inp_arg_macro.c_asm_output.txt create mode 100644 tests/output/inp_arg_macro.c_lex_output.txt create mode 100644 tests/output/inp_arg_macro.c_prep_output.txt create mode 100644 tests/output/inp_arg_macro.c_tree_output.txt create mode 100644 tests/output/inp_bin_op.c_prep_output.txt create mode 100644 tests/output/inp_break.c_prep_output.txt create mode 100644 tests/output/inp_func_ptrs.c_prep_output.txt create mode 100644 tests/output/inp_goto.c_prep_output.txt create mode 100644 tests/output/inp_include.c_prep_output.txt create mode 100644 tests/output/inp_linked_list.c_prep_output.txt create mode 100644 tests/output/inp_pointer.c_prep_output.txt create mode 100644 tests/output/inp_preprocess.c_prep_output.txt create mode 100644 tests/output/inp_unary_op.c_prep_output.txt create mode 100644 tests/output/lib_usage.c_prep_output.txt create mode 100644 tests/output/switch.c_prep_output.txt diff --git a/main.c b/main.c index 36e91f4..3a5118e 100644 --- a/main.c +++ b/main.c @@ -21,9 +21,7 @@ char *read_source_file(FILE *fp); (p) = NULL; \ } while (0) -int lex = 0; - -typed_token *process(const char *filename, int depth) +typed_token *process(const char *filename, int depth, int log_lex, int log_prep) { typed_token *tkn = NULL; char *content = NULL; @@ -50,7 +48,7 @@ typed_token *process(const char *filename, int depth) } tkn = tokenize(content); - if (lex) + if (log_lex) { typed_token *t = tkn; while (t) @@ -60,6 +58,15 @@ typed_token *process(const char *filename, int depth) } } tkn = preprocess(tkn, filename, depth); + if (log_prep) + { + typed_token *t = tkn; + while (t) + { + t->debug(t); + t = t->next; + } + } cleanup: if (fp) @@ -73,18 +80,19 @@ int main(int argc, char *argv[]) { if (argc != 3) { - fprintf(stderr, "Usage: %s (: --lex, --asm or --tree)\n", argv[0]); + fprintf(stderr, "Usage: %s (: --lex, --prep, --asm or --tree)\n", argv[0]); return 1; } - if (strcmp(argv[2], "--lex") != 0 && strcmp(argv[2], "--asm") != 0 && strcmp(argv[2], "--tree") != 0) { + if (strcmp(argv[2], "--lex") != 0 && strcmp(argv[2], "--asm") != 0 && strcmp(argv[2], "--tree") != 0&& strcmp(argv[2], "--prep") != 0) { fprintf(stderr, "Unknown argument %s", argv[2]); return 1; } - lex = !strcmp(argv[2], "--lex"); + int log_lex = !strcmp(argv[2], "--lex"); + int log_prep = !strcmp(argv[2], "--prep"); - typed_token *tkn = process(argv[1], 0); + typed_token *tkn = process(argv[1], 0, log_lex, log_prep); if (tkn == NULL) { return 1; diff --git a/scripts/test.py b/scripts/test.py index c3baa29..43e3acf 100644 --- a/scripts/test.py +++ b/scripts/test.py @@ -21,6 +21,7 @@ "./examples/inp_preprocess.c", "./examples/inp_pointer.c", "./examples/switch.c", + "./examples/inp_arg_macro.c", ] C_PROGRAM_NAME = "./a.out" OUTPUT_FOLDER = "tests/output" @@ -109,7 +110,7 @@ def main(): diff_count = 0 for test_file in TEST_FILES: - for mode in ['lex', 'tree', 'asm']: + for mode in ['lex', 'prep', 'tree', 'asm']: output_file = os.path.join( OUTPUT_FOLDER, f"{os.path.basename(test_file)}_{mode}_output.txt" ) diff --git a/tests/output/inp.c_prep_output.txt b/tests/output/inp.c_prep_output.txt new file mode 100644 index 0000000..f057058 --- /dev/null +++ b/tests/output/inp.c_prep_output.txt @@ -0,0 +1,59 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(10) +TKN_SEMICOLON +TKN_FOR +TKN_L_PAREN +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_LT +TKN_LIT_INT(5) +TKN_SEMICOLON +TKN_ID(i) +TKN_ASSIGN +TKN_ID(i) +TKN_PLUS +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(2) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(i) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(i) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp3.c_prep_output.txt b/tests/output/inp3.c_prep_output.txt new file mode 100644 index 0000000..1c4f9d4 --- /dev/null +++ b/tests/output/inp3.c_prep_output.txt @@ -0,0 +1,492 @@ +TKN_CHAR +TKN_ID(c) +TKN_ASSIGN +TKN_LIT_CHAR( +) +TKN_SEMICOLON +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_STRUCT +TKN_ID(MyStruct) +TKN_L_BRACE +TKN_INT +TKN_STAR +TKN_STAR +TKN_ID(a) +TKN_SEMICOLON +TKN_CHAR +TKN_ID(b) +TKN_SEMICOLON +TKN_INT +TKN_ID(c) +TKN_SEMICOLON +TKN_R_BRACE +TKN_SEMICOLON +TKN_INT +TKN_ID(salam) +TKN_ASSIGN +TKN_LIT_INT(52) +TKN_SEMICOLON +TKN_INT +TKN_ID(doub) +TKN_L_PAREN +TKN_INT +TKN_ID(k) +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_ID(k) +TKN_STAR +TKN_LIT_INT(2) +TKN_SEMICOLON +TKN_R_BRACE +TKN_INT +TKN_ID(fact) +TKN_L_PAREN +TKN_INT +TKN_ID(a) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Fact: %u +) +TKN_COMMA +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_IF +TKN_L_PAREN +TKN_ID(a) +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_ID(a) +TKN_STAR +TKN_ID(fact) +TKN_L_PAREN +TKN_ID(a) +TKN_MIN +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_ELSE +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(1) +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_INT +TKN_ID(fibo) +TKN_L_PAREN +TKN_INT +TKN_ID(n) +TKN_R_PAREN +TKN_L_BRACE +TKN_IF +TKN_L_PAREN +TKN_ID(n) +TKN_EQ +TKN_LIT_INT(0) +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(1) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ELSE +TKN_IF +TKN_L_PAREN +TKN_ID(n) +TKN_EQ +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(1) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ELSE +TKN_L_BRACE +TKN_RETURN +TKN_ID(fibo) +TKN_L_PAREN +TKN_ID(n) +TKN_MIN +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_PLUS +TKN_ID(fibo) +TKN_L_PAREN +TKN_ID(n) +TKN_MIN +TKN_LIT_INT(2) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(i2) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_WHILE +TKN_L_PAREN +TKN_ID(i2) +TKN_LT +TKN_LIT_INT(10) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(I: %u +) +TKN_COMMA +TKN_ID(i2) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(i2) +TKN_ASSIGN +TKN_ID(i2) +TKN_PLUS +TKN_LIT_INT(1) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%c %c %u) +TKN_COMMA +TKN_LIT_CHAR(a) +TKN_COMMA +TKN_LIT_INT(110) +TKN_COMMA +TKN_LIT_CHAR(c) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR( +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(10) +TKN_SEMICOLON +TKN_INT +TKN_ID(b) +TKN_ASSIGN +TKN_LIT_INT(20) +TKN_SEMICOLON +TKN_INT +TKN_ID(c) +TKN_ASSIGN +TKN_ID(a) +TKN_STAR +TKN_ID(b) +TKN_SEMICOLON +TKN_INT +TKN_ID(d) +TKN_ASSIGN +TKN_ID(c) +TKN_STAR +TKN_L_PAREN +TKN_ID(c) +TKN_PLUS +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Result: %u +) +TKN_COMMA +TKN_ID(c) +TKN_PLUS +TKN_ID(c) +TKN_PLUS +TKN_ID(d) +TKN_PLUS +TKN_L_PAREN +TKN_L_PAREN +TKN_ID(b) +TKN_PLUS +TKN_ID(a) +TKN_R_PAREN +TKN_STAR +TKN_ID(a) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_STAR +TKN_ID(cc) +TKN_ASSIGN +TKN_AND +TKN_ID(c) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Addr of a: %u +) +TKN_COMMA +TKN_AND +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Addr of c: %u +) +TKN_COMMA +TKN_ID(cc) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Double of 123: %u +) +TKN_COMMA +TKN_ID(doub) +TKN_L_PAREN +TKN_ID(doub) +TKN_L_PAREN +TKN_LIT_INT(123) +TKN_STAR +TKN_ID(doub) +TKN_L_PAREN +TKN_LIT_INT(123) +TKN_R_PAREN +TKN_R_PAREN +TKN_STAR +TKN_LIT_INT(2) +TKN_R_PAREN +TKN_PLUS +TKN_LIT_INT(10) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Factorial 5: %u +) +TKN_COMMA +TKN_ID(fact) +TKN_L_PAREN +TKN_LIT_INT(5) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_IF +TKN_L_PAREN +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(TRUE +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_ELSE +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(FALSE +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_IF +TKN_L_PAREN +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(TRUE +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_ELSE +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(FALSE +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u +) +TKN_COMMA +TKN_LIT_INT(5) +TKN_NEQ +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(0) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(2) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(3) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(4) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(5) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(6) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(7) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u +) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_LIT_INT(8) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_FOR +TKN_L_PAREN +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_LT +TKN_LIT_INT(20) +TKN_SEMICOLON +TKN_ID(i) +TKN_ASSIGN +TKN_ID(i) +TKN_PLUS +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u ) +TKN_COMMA +TKN_ID(fibo) +TKN_L_PAREN +TKN_ID(i) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR( +DONE! +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u +) +TKN_COMMA +TKN_L_PAREN +TKN_LIT_INT(1) +TKN_ANDAND +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_ANDAND +TKN_L_PAREN +TKN_LIT_INT(1) +TKN_ANDAND +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp4.c_prep_output.txt b/tests/output/inp4.c_prep_output.txt new file mode 100644 index 0000000..910378b --- /dev/null +++ b/tests/output/inp4.c_prep_output.txt @@ -0,0 +1,175 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_STAR +TKN_ID(malloc) +TKN_L_PAREN +TKN_INT +TKN_ID(sz) +TKN_R_PAREN +TKN_SEMICOLON +TKN_STRUCT +TKN_ID(MyStruct2) +TKN_L_BRACE +TKN_INT +TKN_ID(e) +TKN_SEMICOLON +TKN_INT +TKN_ID(f) +TKN_SEMICOLON +TKN_R_BRACE +TKN_SEMICOLON +TKN_STRUCT +TKN_ID(MyStruct) +TKN_L_BRACE +TKN_INT +TKN_ID(c) +TKN_SEMICOLON +TKN_INT +TKN_ID(d) +TKN_SEMICOLON +TKN_STRUCT +TKN_ID(MyStruct2) +TKN_ID(hi) +TKN_SEMICOLON +TKN_INT +TKN_ID(e) +TKN_SEMICOLON +TKN_R_BRACE +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_STRUCT +TKN_ID(MyStruct) +TKN_ID(m) +TKN_SEMICOLON +TKN_ID(m) +TKN_DOT +TKN_ID(c) +TKN_ASSIGN +TKN_LIT_INT(5) +TKN_SEMICOLON +TKN_ID(m) +TKN_DOT +TKN_ID(d) +TKN_ASSIGN +TKN_LIT_INT(10) +TKN_SEMICOLON +TKN_ID(m) +TKN_DOT +TKN_ID(hi) +TKN_DOT +TKN_ID(e) +TKN_ASSIGN +TKN_LIT_INT(19) +TKN_SEMICOLON +TKN_ID(m) +TKN_DOT +TKN_ID(hi) +TKN_DOT +TKN_ID(f) +TKN_ASSIGN +TKN_LIT_INT(123) +TKN_SEMICOLON +TKN_ID(m) +TKN_DOT +TKN_ID(e) +TKN_ASSIGN +TKN_ID(m) +TKN_DOT +TKN_ID(hi) +TKN_DOT +TKN_ID(f) +TKN_STAR +TKN_LIT_INT(2) +TKN_PLUS +TKN_ID(m) +TKN_DOT +TKN_ID(c) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u %u %u %u %u +) +TKN_COMMA +TKN_ID(m) +TKN_DOT +TKN_ID(c) +TKN_COMMA +TKN_ID(m) +TKN_DOT +TKN_ID(d) +TKN_COMMA +TKN_ID(m) +TKN_DOT +TKN_ID(hi) +TKN_DOT +TKN_ID(e) +TKN_COMMA +TKN_ID(m) +TKN_DOT +TKN_ID(hi) +TKN_DOT +TKN_ID(f) +TKN_COMMA +TKN_ID(m) +TKN_DOT +TKN_ID(e) +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_STAR +TKN_ID(salam) +TKN_ASSIGN +TKN_L_PAREN +TKN_INT +TKN_STAR +TKN_R_PAREN +TKN_ID(malloc) +TKN_L_PAREN +TKN_LIT_INT(10) +TKN_STAR +TKN_LIT_INT(8) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(salam) +TKN_L_BRACK +TKN_LIT_INT(5) +TKN_R_BRACK +TKN_ASSIGN +TKN_LIT_INT(987) +TKN_SEMICOLON +TKN_INT +TKN_STAR +TKN_ID(s5) +TKN_ASSIGN +TKN_AND +TKN_ID(salam) +TKN_L_BRACK +TKN_LIT_INT(5) +TKN_R_BRACK +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u +) +TKN_COMMA +TKN_STAR +TKN_ID(s5) +TKN_R_PAREN +TKN_SEMICOLON +TKN_RETURN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp5.c_prep_output.txt b/tests/output/inp5.c_prep_output.txt new file mode 100644 index 0000000000000000000000000000000000000000..5b78706fe3155af587205132c03c8ac2975dc08d GIT binary patch literal 2933 zcmd5;O;dv~5cS+&p@+`k&7vo72vnI;sDK{4bkG@VXWHsO>%m`d$mV0y5JEe3##;#4 zw=ZwsCMhP#{5g$+K|uyl;Cxlf&G!A0e#Y~emxT!(`ww152YJB;emb3cbSg-ToDMP+ zkcZRAPvaEAMG6s4a;?kN>hn#{6(t3QBTMQZ_-#f;i`V6H(}`AA3zklj*EfbKl8A4e zK|H_9JU^r)$0_K7#X_8x5bfo8bPrO*Q86bAoGbXF>O{88B4VL|WNlhIi=XoFk<#Jl zqi)t6m2MF7B6GZIaX#GLo)7B*U`fp+OJz=q1p-ZY71@?DDjUq23ks`1TrQ+i5?xVb zJ1qhyBD_tW6T0!TaGU4ROPG#9+m<{S9*@;h{jo_j@=EW?Y9SZO$;Lc3>yXtY$ZoGJ zO2T=$5R0qGEb%X8>eo(06VqYITWGjzYn|Ron*F4?983FpSc8aAoQ`bH-YM?QUR_Vp zD|~N+0z0f*95r&US?+zSv)yB#avQSN#>WtbM&0ct;zDE`usEt|g?`En5IBbs!T5;O z>A@u;yN7sl?hARGxvg^P_bn-Oy{$S;s|R7ddYIMid8~^>7$1+-+GFZRIF3}HN$7kS zyewpC!xlGu^A>?i6&a`TJjHH3Xl=ZiCrq8fu`iC{%^KH+%}&n4^kxT=4g1W%+iLk5 T0+m;fD3aMGzz3c*&12#hxHvk^ literal 0 HcmV?d00001 diff --git a/tests/output/inp6.c_prep_output.txt b/tests/output/inp6.c_prep_output.txt new file mode 100644 index 0000000..3c10205 --- /dev/null +++ b/tests/output/inp6.c_prep_output.txt @@ -0,0 +1,81 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_STAR +TKN_ID(malloc) +TKN_L_PAREN +TKN_INT +TKN_ID(sz) +TKN_R_PAREN +TKN_SEMICOLON +TKN_TYPEDEF +TKN_STRUCT +TKN_L_BRACE +TKN_INT +TKN_ID(a) +TKN_SEMICOLON +TKN_INT +TKN_ID(b) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(MyStruct) +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(MyStruct) +TKN_STAR +TKN_ID(m) +TKN_ASSIGN +TKN_L_PAREN +TKN_ID(MyStruct) +TKN_STAR +TKN_R_PAREN +TKN_ID(malloc) +TKN_L_PAREN +TKN_SIZEOF +TKN_L_PAREN +TKN_ID(MyStruct) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(m) +TKN_ARROW +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(10) +TKN_SEMICOLON +TKN_ID(m) +TKN_ARROW +TKN_ID(b) +TKN_ASSIGN +TKN_LIT_INT(20) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u %u +) +TKN_COMMA +TKN_ID(m) +TKN_ARROW +TKN_ID(a) +TKN_COMMA +TKN_ID(m) +TKN_ARROW +TKN_ID(b) +TKN_R_PAREN +TKN_SEMICOLON +TKN_RETURN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_arg_macro.c_asm_output.txt b/tests/output/inp_arg_macro.c_asm_output.txt new file mode 100644 index 0000000..353113f --- /dev/null +++ b/tests/output/inp_arg_macro.c_asm_output.txt @@ -0,0 +1,76 @@ +section .data +__printf_size: equ 16 +__temp_str_1 db `cde`, 0 +__temp_str_2 db `%s: %d\n`, 0 +__main_size: equ 128 +section .text +extern printf +global main +main: +push rbp +mov rbp, rsp +sub rsp, __main_size +;define variable a +mov rax, 10 +mov [rsp+0], rax +;end define variable a +mov rax, rsp +add rax, 0 +mov [rsp+16], rax +mov rax, 2 +mov rbx, [rsp+0] +mul rbx +mov [rsp+24], rax +mov rax, 20 +mov rbx, [rsp+24] +add rax, rbx +mov [rsp+32], rax +mov rax, 3 +mov rbx, 20 +mul rbx +mov [rsp+40], rax +mov rax, [rsp+32] +mov rbx, [rsp+40] +add rax, rbx +mov [rsp+48], rax +;define variable cde +mov rax, [rsp+48] +mov [rsp+8], rax +;end define variable cde +;define variable s +mov rax, __temp_str_1 +mov [rsp+56], rax +;end define variable s +mov rax, __temp_str_2 +mov [rsp+64], rax +mov rax, rsp +add rax, 56 +mov [rsp+72], rax +mov rax, [rsp+56] +mov [rsp+80], rax +mov rax, rsp +add rax, 8 +mov [rsp+88], rax +mov rax, [rsp+8] +mov [rsp+96], rax +mov rdi, [rsp+64] +mov rsi, [rsp+80] +mov rdx, [rsp+96] +mov rax, rsp +add rax, 0 +mov [rsp+104], rax +call printf +mov [rsp+112], rax +mov rsp, rbp +pop rbp +ret +extern exit +global _start +_start: +; Pass argc and argv +mov rdi, [rsp] +mov rsi, rsp +add rsi, 8 +call main +mov rdi, 0 +call exit diff --git a/tests/output/inp_arg_macro.c_lex_output.txt b/tests/output/inp_arg_macro.c_lex_output.txt new file mode 100644 index 0000000..efc175d --- /dev/null +++ b/tests/output/inp_arg_macro.c_lex_output.txt @@ -0,0 +1,79 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_DIRECTIVE: + TKN_ID(define) + TKN_ID(ADD) + TKN_L_PAREN + TKN_ID(x) + TKN_COMMA + TKN_ID(y) + TKN_R_PAREN + TKN_L_PAREN + TKN_LIT_INT(20) + TKN_PLUS + TKN_LIT_INT(2) + TKN_STAR + TKN_ID(x) + TKN_PLUS + TKN_LIT_INT(3) + TKN_STAR + TKN_ID(y) + TKN_R_PAREN + TKN_EOF +TKN_DIRECTIVE: + TKN_ID(define) + TKN_ID(STR) + TKN_L_PAREN + TKN_ID(x) + TKN_R_PAREN + TKN_SHARP + TKN_ID(x) + TKN_EOF +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(10) +TKN_SEMICOLON +TKN_INT +TKN_ID(cde) +TKN_ASSIGN +TKN_ID(ADD) +TKN_L_PAREN +TKN_ID(a) +TKN_COMMA +TKN_LIT_INT(20) +TKN_R_PAREN +TKN_SEMICOLON +TKN_CHAR +TKN_STAR +TKN_ID(s) +TKN_ASSIGN +TKN_ID(STR) +TKN_L_PAREN +TKN_ID(cde) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%s: %d +) +TKN_COMMA +TKN_ID(s) +TKN_COMMA +TKN_ID(cde) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_arg_macro.c_prep_output.txt b/tests/output/inp_arg_macro.c_prep_output.txt new file mode 100644 index 0000000..3b82873 --- /dev/null +++ b/tests/output/inp_arg_macro.c_prep_output.txt @@ -0,0 +1,52 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(10) +TKN_SEMICOLON +TKN_INT +TKN_ID(cde) +TKN_ASSIGN +TKN_L_PAREN +TKN_LIT_INT(20) +TKN_PLUS +TKN_LIT_INT(2) +TKN_STAR +TKN_ID(a) +TKN_PLUS +TKN_LIT_INT(3) +TKN_STAR +TKN_LIT_INT(20) +TKN_R_PAREN +TKN_SEMICOLON +TKN_CHAR +TKN_STAR +TKN_ID(s) +TKN_ASSIGN +TKN_LIT_STR(cde) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%s: %d +) +TKN_COMMA +TKN_ID(s) +TKN_COMMA +TKN_ID(cde) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_arg_macro.c_tree_output.txt b/tests/output/inp_arg_macro.c_tree_output.txt new file mode 100644 index 0000000..297fbed --- /dev/null +++ b/tests/output/inp_arg_macro.c_tree_output.txt @@ -0,0 +1,62 @@ +Program( + FunctionDecl( + Name: + printf + Returns: + Type(Name: (null)): + TKN_VOID + Params: + Type(Name: (null)): + Pointer of: + TKN_CHAR + ) + Function( + Name: + main + Returns: + Type(Name: (null)): + TKN_INT + Params: + Statements: + VarDecl(a): + Type(Name: a): + TKN_INT + Value: + Literal(Type: 34, Value: 10) + VarDecl(cde): + Type(Name: cde): + TKN_INT + Value: + BinaryOp(Op: 72) + Left: + BinaryOp(Op: 72) + Left: + Literal(Type: 34, Value: 20) + Right: + BinaryOp(Op: 78) + Left: + Literal(Type: 34, Value: 2) + Right: + Variable(a) + Right: + BinaryOp(Op: 78) + Left: + Literal(Type: 34, Value: 3) + Right: + Literal(Type: 34, Value: 20) + VarDecl(s): + Type(Name: s): + Pointer of: + TKN_CHAR + Value: + Literal(Type: 33, Value: cde) + FunctionCall: + Function: + Variable(printf) + Args: + Literal(Type: 33, Value: %s: %d +) + Variable(s) + Variable(cde) + ) +) diff --git a/tests/output/inp_bin_op.c_prep_output.txt b/tests/output/inp_bin_op.c_prep_output.txt new file mode 100644 index 0000000..29db22a --- /dev/null +++ b/tests/output/inp_bin_op.c_prep_output.txt @@ -0,0 +1,34 @@ +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(2) +TKN_SEMICOLON +TKN_INT +TKN_ID(b) +TKN_ASSIGN +TKN_LIT_INT(3) +TKN_SEMICOLON +TKN_ID(a) +TKN_PLUSEQ +TKN_ID(b) +TKN_SEMICOLON +TKN_ID(a) +TKN_MINEQ +TKN_ID(b) +TKN_SEMICOLON +TKN_ID(a) +TKN_STAREQ +TKN_ID(b) +TKN_PLUS +TKN_LIT_INT(1) +TKN_SEMICOLON +TKN_RETURN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_break.c_prep_output.txt b/tests/output/inp_break.c_prep_output.txt new file mode 100644 index 0000000..d41d5fe --- /dev/null +++ b/tests/output/inp_break.c_prep_output.txt @@ -0,0 +1,156 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_WHILE +TKN_L_PAREN +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_IF +TKN_L_PAREN +TKN_ID(i) +TKN_EQ +TKN_LIT_INT(0) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(i is 0 +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_CONTINUE +TKN_SEMICOLON +TKN_R_BRACE +TKN_BREAK +TKN_SEMICOLON +TKN_R_BRACE +TKN_FOR +TKN_L_PAREN +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_GTE +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_ASSIGN +TKN_ID(i) +TKN_PLUS +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_IF +TKN_L_PAREN +TKN_ID(i) +TKN_EQ +TKN_LIT_INT(0) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(i is 0 +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_CONTINUE +TKN_SEMICOLON +TKN_R_BRACE +TKN_IF +TKN_L_PAREN +TKN_ID(i) +TKN_EQ +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_BREAK +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_FOR +TKN_L_PAREN +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_GTE +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_ASSIGN +TKN_ID(i) +TKN_PLUS +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(i is %d +) +TKN_COMMA +TKN_ID(i) +TKN_R_PAREN +TKN_SEMICOLON +TKN_FOR +TKN_L_PAREN +TKN_INT +TKN_ID(j) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(j) +TKN_LT +TKN_LIT_INT(10) +TKN_SEMICOLON +TKN_ID(j) +TKN_PLUSPLUS +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(j is %d +) +TKN_COMMA +TKN_ID(j) +TKN_R_PAREN +TKN_SEMICOLON +TKN_IF +TKN_L_PAREN +TKN_ID(j) +TKN_EQ +TKN_LIT_INT(5) +TKN_R_PAREN +TKN_L_BRACE +TKN_BREAK +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_BREAK +TKN_SEMICOLON +TKN_R_BRACE +TKN_RETURN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_func_ptrs.c_prep_output.txt b/tests/output/inp_func_ptrs.c_prep_output.txt new file mode 100644 index 0000000..6cf9d62 --- /dev/null +++ b/tests/output/inp_func_ptrs.c_prep_output.txt @@ -0,0 +1,183 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_STAR +TKN_ID(malloc) +TKN_L_PAREN +TKN_INT +TKN_ID(sz) +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(sum) +TKN_L_PAREN +TKN_INT +TKN_ID(a) +TKN_COMMA +TKN_INT +TKN_ID(b) +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_ID(a) +TKN_PLUS +TKN_ID(b) +TKN_SEMICOLON +TKN_R_BRACE +TKN_INT +TKN_ID(mul) +TKN_L_PAREN +TKN_INT +TKN_ID(a) +TKN_COMMA +TKN_INT +TKN_ID(b) +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_ID(a) +TKN_STAR +TKN_ID(b) +TKN_SEMICOLON +TKN_R_BRACE +TKN_INT +TKN_ID(handle) +TKN_L_PAREN +TKN_INT +TKN_ID(a) +TKN_COMMA +TKN_INT +TKN_ID(b) +TKN_COMMA +TKN_INT +TKN_L_PAREN +TKN_STAR +TKN_ID(f) +TKN_R_PAREN +TKN_L_PAREN +TKN_INT +TKN_COMMA +TKN_INT +TKN_R_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_ID(f) +TKN_L_PAREN +TKN_ID(a) +TKN_COMMA +TKN_ID(b) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_L_PAREN +TKN_STAR +TKN_STAR +TKN_ID(funcs) +TKN_R_PAREN +TKN_L_PAREN +TKN_INT +TKN_COMMA +TKN_INT +TKN_R_PAREN +TKN_ASSIGN +TKN_L_PAREN +TKN_INT +TKN_L_PAREN +TKN_STAR +TKN_STAR +TKN_R_PAREN +TKN_L_PAREN +TKN_INT +TKN_COMMA +TKN_INT +TKN_R_PAREN +TKN_R_PAREN +TKN_ID(malloc) +TKN_L_PAREN +TKN_SIZEOF +TKN_L_PAREN +TKN_INT +TKN_L_PAREN +TKN_STAR +TKN_R_PAREN +TKN_L_PAREN +TKN_INT +TKN_COMMA +TKN_INT +TKN_R_PAREN +TKN_R_PAREN +TKN_STAR +TKN_LIT_INT(2) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(funcs) +TKN_L_BRACK +TKN_LIT_INT(0) +TKN_R_BRACK +TKN_ASSIGN +TKN_ID(sum) +TKN_SEMICOLON +TKN_ID(funcs) +TKN_L_BRACK +TKN_LIT_INT(1) +TKN_R_BRACK +TKN_ASSIGN +TKN_ID(mul) +TKN_SEMICOLON +TKN_FOR +TKN_L_PAREN +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_LT +TKN_LIT_INT(2) +TKN_SEMICOLON +TKN_ID(i) +TKN_PLUSPLUS +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(res) +TKN_ASSIGN +TKN_ID(handle) +TKN_L_PAREN +TKN_LIT_INT(10) +TKN_COMMA +TKN_LIT_INT(20) +TKN_COMMA +TKN_ID(funcs) +TKN_L_BRACK +TKN_ID(i) +TKN_R_BRACK +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Func #%u result: %u +) +TKN_COMMA +TKN_ID(i) +TKN_COMMA +TKN_ID(res) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_goto.c_prep_output.txt b/tests/output/inp_goto.c_prep_output.txt new file mode 100644 index 0000000..a94ad7c --- /dev/null +++ b/tests/output/inp_goto.c_prep_output.txt @@ -0,0 +1,50 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(2) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(first +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_GOTO +TKN_ID(end) +TKN_SEMICOLON +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(69) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(second +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(end) +TKN_COLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_include.c_asm_output.txt b/tests/output/inp_include.c_asm_output.txt index c53a37c..d846e9e 100644 --- a/tests/output/inp_include.c_asm_output.txt +++ b/tests/output/inp_include.c_asm_output.txt @@ -1,3 +1,13 @@ +TKN_INT +TKN_ID(function2) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(13) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF section .data __function2_size: equ 16 __function_size: equ 16 diff --git a/tests/output/inp_include.c_lex_output.txt b/tests/output/inp_include.c_lex_output.txt index 8885662..c92dbc4 100644 --- a/tests/output/inp_include.c_lex_output.txt +++ b/tests/output/inp_include.c_lex_output.txt @@ -41,32 +41,13 @@ TKN_LIT_INT(0) TKN_SEMICOLON TKN_R_BRACE TKN_EOF -TKN_DIRECTIVE: - TKN_ID(include) - TKN_LIT_STR(header2.h) - TKN_EOF -TKN_INT -TKN_ID(function) -TKN_L_PAREN -TKN_R_PAREN -TKN_L_BRACE -TKN_RETURN -TKN_LIT_INT(69) -TKN_SEMICOLON -TKN_R_BRACE -TKN_EOF -TKN_DIRECTIVE: - TKN_ID(define) - TKN_ID(VALUE) - TKN_LIT_INT(13) - TKN_EOF TKN_INT TKN_ID(function2) TKN_L_PAREN TKN_R_PAREN TKN_L_BRACE TKN_RETURN -TKN_ID(VALUE) +TKN_LIT_INT(13) TKN_SEMICOLON TKN_R_BRACE TKN_EOF diff --git a/tests/output/inp_include.c_prep_output.txt b/tests/output/inp_include.c_prep_output.txt new file mode 100644 index 0000000..fc6c946 --- /dev/null +++ b/tests/output/inp_include.c_prep_output.txt @@ -0,0 +1,67 @@ +TKN_INT +TKN_ID(function2) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(13) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF +TKN_INT +TKN_ID(function2) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(13) +TKN_SEMICOLON +TKN_R_BRACE +TKN_INT +TKN_ID(function) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(69) +TKN_SEMICOLON +TKN_R_BRACE +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(function: %d +) +TKN_COMMA +TKN_ID(function) +TKN_L_PAREN +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(function2: %d +) +TKN_COMMA +TKN_ID(function2) +TKN_L_PAREN +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_RETURN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_include.c_tree_output.txt b/tests/output/inp_include.c_tree_output.txt index e8f83eb..d883e46 100644 --- a/tests/output/inp_include.c_tree_output.txt +++ b/tests/output/inp_include.c_tree_output.txt @@ -1,3 +1,13 @@ +TKN_INT +TKN_ID(function2) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(13) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF Program( Function( Name: diff --git a/tests/output/inp_linked_list.c_prep_output.txt b/tests/output/inp_linked_list.c_prep_output.txt new file mode 100644 index 0000000..754b34e --- /dev/null +++ b/tests/output/inp_linked_list.c_prep_output.txt @@ -0,0 +1,252 @@ +TKN_VOID +TKN_STAR +TKN_ID(malloc) +TKN_L_PAREN +TKN_INT +TKN_ID(sz) +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_ID(s) +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_TYPEDEF +TKN_STRUCT +TKN_ID(node_) +TKN_L_BRACE +TKN_INT +TKN_ID(val) +TKN_SEMICOLON +TKN_STRUCT +TKN_ID(node_) +TKN_STAR +TKN_ID(next) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(node) +TKN_SEMICOLON +TKN_STRUCT +TKN_ID(linked_list) +TKN_L_BRACE +TKN_ID(node) +TKN_STAR +TKN_ID(first) +TKN_SEMICOLON +TKN_R_BRACE +TKN_SEMICOLON +TKN_STRUCT +TKN_ID(linked_list) +TKN_STAR +TKN_ID(new_list) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_STRUCT +TKN_ID(linked_list) +TKN_STAR +TKN_ID(ret) +TKN_ASSIGN +TKN_L_PAREN +TKN_STRUCT +TKN_ID(linked_list) +TKN_STAR +TKN_R_PAREN +TKN_ID(malloc) +TKN_L_PAREN +TKN_SIZEOF +TKN_L_PAREN +TKN_STRUCT +TKN_ID(linked_list) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_RETURN +TKN_ID(ret) +TKN_SEMICOLON +TKN_R_BRACE +TKN_VOID +TKN_ID(add_val) +TKN_L_PAREN +TKN_STRUCT +TKN_ID(linked_list) +TKN_STAR +TKN_ID(lst) +TKN_COMMA +TKN_INT +TKN_ID(val) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(node) +TKN_STAR +TKN_ID(new) +TKN_ASSIGN +TKN_L_PAREN +TKN_ID(node) +TKN_STAR +TKN_R_PAREN +TKN_ID(malloc) +TKN_L_PAREN +TKN_SIZEOF +TKN_L_PAREN +TKN_ID(node) +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_STAR +TKN_L_PAREN +TKN_L_PAREN +TKN_INT +TKN_STAR +TKN_R_PAREN +TKN_L_PAREN +TKN_AND +TKN_ID(new) +TKN_ARROW +TKN_ID(next) +TKN_R_PAREN +TKN_R_PAREN +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(new) +TKN_ARROW +TKN_ID(val) +TKN_ASSIGN +TKN_ID(val) +TKN_SEMICOLON +TKN_IF +TKN_L_PAREN +TKN_ID(lst) +TKN_ARROW +TKN_ID(first) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(node) +TKN_STAR +TKN_ID(curr) +TKN_ASSIGN +TKN_ID(lst) +TKN_ARROW +TKN_ID(first) +TKN_SEMICOLON +TKN_WHILE +TKN_L_PAREN +TKN_ID(curr) +TKN_ARROW +TKN_ID(next) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(curr) +TKN_ASSIGN +TKN_L_PAREN +TKN_STRUCT +TKN_ID(node) +TKN_STAR +TKN_R_PAREN +TKN_ID(curr) +TKN_ARROW +TKN_ID(next) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(curr) +TKN_ARROW +TKN_ID(next) +TKN_ASSIGN +TKN_ID(new) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ELSE +TKN_L_BRACE +TKN_ID(lst) +TKN_ARROW +TKN_ID(first) +TKN_ASSIGN +TKN_ID(new) +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_STRUCT +TKN_ID(linked_list) +TKN_STAR +TKN_ID(lst) +TKN_ASSIGN +TKN_ID(new_list) +TKN_L_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(add_val) +TKN_L_PAREN +TKN_ID(lst) +TKN_COMMA +TKN_LIT_INT(123) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(add_val) +TKN_L_PAREN +TKN_ID(lst) +TKN_COMMA +TKN_LIT_INT(432) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(add_val) +TKN_L_PAREN +TKN_ID(lst) +TKN_COMMA +TKN_LIT_INT(999) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(add_val) +TKN_L_PAREN +TKN_ID(lst) +TKN_COMMA +TKN_LIT_INT(873) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(node) +TKN_STAR +TKN_ID(curr) +TKN_ASSIGN +TKN_ID(lst) +TKN_ARROW +TKN_ID(first) +TKN_SEMICOLON +TKN_WHILE +TKN_L_PAREN +TKN_ID(curr) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%u +) +TKN_COMMA +TKN_ID(curr) +TKN_ARROW +TKN_ID(val) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(curr) +TKN_ASSIGN +TKN_L_PAREN +TKN_STRUCT +TKN_ID(node) +TKN_STAR +TKN_R_PAREN +TKN_ID(curr) +TKN_ARROW +TKN_ID(next) +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_pointer.c_prep_output.txt b/tests/output/inp_pointer.c_prep_output.txt new file mode 100644 index 0000000000000000000000000000000000000000..6cffa7486176c64cac36ce181e02c1cb7aad9923 GIT binary patch literal 4659 zcmd5=QBT`25Z*JtA}>fC5>mS{5WIyp42!gZB-^ARR0RfFrO={wyzuMi=FavxwiBlm zHmMJ8>ih1y`|i$e@{7szd%{LLIbX0*?`b)k|9SXWeT}D=VH!=U_3%7Qt3{UMVwjA_ zVfAQ~yi9r^P*)WL{FqbZ*IrsHgl;z^i^u;E51;@9nUf^dpGTHoC%;qKrQ{Q{qG* zeyZhEIoH#~pSx;%4VC3-ued(A33h+&0HUgIsTWPL@P7ciWuz(`8YErUc&TFVDAkX1 z7DFjhUMl`IB}vPnCgr6yM|-yRij&4HXwE*4I4)HJm6+Ffse zy<8tLm=YT@nzSMR?v9Lur49MMJMw2RX+ti%BjYf71LQA$oEP0WANnEVRPIuBM}Ej3 z9Gu&Zi&e0D=RPa6p{Kf|v4cE3Vk@Y_$qTxE)sZI}w=R}TNPuJF7`Gm2Ok?3d+nPLv zL+XdF^;(d$Hi?PCzCkDyo~|7c)XsCMkUGu9jZ##&x~TiANNN1Dh^bVz>E1Gf$+_5A zH2-aUmUGdT2Fo@oGZw?)v2Bpaws=iZZBFXgpVU^Ec5M;SNPR0$UN~(tnK$Qk|Av2T zchR=`wg~H)YTCZ~6!GLdaB<#>4DT4lV57`i?u|CimTe80uOG8qid*w+#gaqqYvNhn u21tS3UPjyuwfzofF(9;eXlsb;Vzq=_b_x literal 0 HcmV?d00001 diff --git a/tests/output/inp_preprocess.c_prep_output.txt b/tests/output/inp_preprocess.c_prep_output.txt new file mode 100644 index 0000000..0e20cf0 --- /dev/null +++ b/tests/output/inp_preprocess.c_prep_output.txt @@ -0,0 +1,57 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(function) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(69) +TKN_SEMICOLON +TKN_R_BRACE +TKN_INT +TKN_ID(function2) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_RETURN +TKN_LIT_INT(99) +TKN_SEMICOLON +TKN_R_BRACE +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(function(): %d +) +TKN_COMMA +TKN_ID(function) +TKN_L_PAREN +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(function2(): %d +) +TKN_COMMA +TKN_ID(function2) +TKN_L_PAREN +TKN_R_PAREN +TKN_R_PAREN +TKN_SEMICOLON +TKN_RETURN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/inp_unary_op.c_prep_output.txt b/tests/output/inp_unary_op.c_prep_output.txt new file mode 100644 index 0000000..a7e041c --- /dev/null +++ b/tests/output/inp_unary_op.c_prep_output.txt @@ -0,0 +1,119 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_INT +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_INT(2) +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_MIN +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_MINMIN +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_NOT +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_NOT +TKN_NOT +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_PLUS +TKN_MIN +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_PLUSPLUS +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_ID(a) +TKN_PLUSPLUS +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_ID(a) +TKN_MINMIN +TKN_R_PAREN +TKN_SEMICOLON +TKN_FOR +TKN_L_PAREN +TKN_INT +TKN_ID(i) +TKN_ASSIGN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_ID(i) +TKN_LT +TKN_LIT_INT(5) +TKN_SEMICOLON +TKN_ID(i) +TKN_PLUSPLUS +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%d +) +TKN_COMMA +TKN_ID(i) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/lib_usage.c_prep_output.txt b/tests/output/lib_usage.c_prep_output.txt new file mode 100644 index 0000000..ddeb038 --- /dev/null +++ b/tests/output/lib_usage.c_prep_output.txt @@ -0,0 +1,204 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(strcmp) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_CHAR +TKN_STAR +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_ID(strcat) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_CHAR +TKN_STAR +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_ID(strcpy) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_CHAR +TKN_STAR +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_STAR +TKN_ID(malloc) +TKN_L_PAREN +TKN_INT +TKN_R_PAREN +TKN_SEMICOLON +TKN_VOID +TKN_ID(fprintf) +TKN_L_PAREN +TKN_ID(FILE) +TKN_STAR +TKN_COMMA +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_TYPEDEF +TKN_STRUCT +TKN_L_BRACE +TKN_CHAR +TKN_STAR +TKN_ID(_ptr) +TKN_SEMICOLON +TKN_INT +TKN_ID(_cnt) +TKN_SEMICOLON +TKN_CHAR +TKN_STAR +TKN_ID(_base) +TKN_SEMICOLON +TKN_INT +TKN_ID(_flag) +TKN_SEMICOLON +TKN_INT +TKN_ID(_file) +TKN_SEMICOLON +TKN_INT +TKN_ID(_charbuf) +TKN_SEMICOLON +TKN_INT +TKN_ID(_bufsiz) +TKN_SEMICOLON +TKN_CHAR +TKN_STAR +TKN_ID(_tmpfname) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(FILE) +TKN_SEMICOLON +TKN_ID(FILE) +TKN_STAR +TKN_ID(fopen) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_CHAR +TKN_STAR +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(fclose) +TKN_L_PAREN +TKN_ID(FILE) +TKN_STAR +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_CHAR +TKN_STAR +TKN_ID(a) +TKN_ASSIGN +TKN_LIT_STR(salam ) +TKN_SEMICOLON +TKN_CHAR +TKN_STAR +TKN_ID(b) +TKN_ASSIGN +TKN_LIT_STR(khubi) +TKN_SEMICOLON +TKN_CHAR +TKN_STAR +TKN_ID(c) +TKN_ASSIGN +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_R_PAREN +TKN_ID(malloc) +TKN_L_PAREN +TKN_LIT_INT(100) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(strcpy) +TKN_L_PAREN +TKN_ID(c) +TKN_COMMA +TKN_ID(a) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(strcat) +TKN_L_PAREN +TKN_ID(c) +TKN_COMMA +TKN_ID(b) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%s +) +TKN_COMMA +TKN_ID(c) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(FILE) +TKN_STAR +TKN_ID(file_ptr) +TKN_SEMICOLON +TKN_ID(file_ptr) +TKN_ASSIGN +TKN_ID(fopen) +TKN_L_PAREN +TKN_LIT_STR(output.txt) +TKN_COMMA +TKN_LIT_STR(w) +TKN_R_PAREN +TKN_SEMICOLON +TKN_IF +TKN_L_PAREN +TKN_NOT +TKN_ID(file_ptr) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(Error opening file!) +TKN_R_PAREN +TKN_SEMICOLON +TKN_RETURN +TKN_LIT_INT(1) +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(fprintf) +TKN_L_PAREN +TKN_ID(file_ptr) +TKN_COMMA +TKN_LIT_STR(Hello, World! +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_ID(fclose) +TKN_L_PAREN +TKN_ID(file_ptr) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF diff --git a/tests/output/switch.c_prep_output.txt b/tests/output/switch.c_prep_output.txt new file mode 100644 index 0000000..9eddba2 --- /dev/null +++ b/tests/output/switch.c_prep_output.txt @@ -0,0 +1,126 @@ +TKN_VOID +TKN_ID(printf) +TKN_L_PAREN +TKN_CHAR +TKN_STAR +TKN_COMMA +TKN_DOTS +TKN_R_PAREN +TKN_SEMICOLON +TKN_INT +TKN_ID(main) +TKN_L_PAREN +TKN_R_PAREN +TKN_L_BRACE +TKN_CHAR +TKN_ID(grade) +TKN_ASSIGN +TKN_LIT_CHAR(B) +TKN_SEMICOLON +TKN_CHAR +TKN_STAR +TKN_ID(s) +TKN_SEMICOLON +TKN_SWITCH +TKN_L_PAREN +TKN_ID(grade) +TKN_R_PAREN +TKN_L_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(1) +TKN_R_PAREN +TKN_SEMICOLON +TKN_CASE +TKN_LIT_CHAR(A) +TKN_COLON +TKN_ID(s) +TKN_ASSIGN +TKN_LIT_STR(Excellent! +) +TKN_SEMICOLON +TKN_BREAK +TKN_SEMICOLON +TKN_CASE +TKN_LIT_CHAR(B) +TKN_COLON +TKN_CASE +TKN_LIT_CHAR(C) +TKN_COLON +TKN_ID(s) +TKN_ASSIGN +TKN_LIT_STR(Well done +) +TKN_SEMICOLON +TKN_BREAK +TKN_SEMICOLON +TKN_CASE +TKN_LIT_CHAR(D) +TKN_COLON +TKN_ID(s) +TKN_ASSIGN +TKN_LIT_STR(You passed +) +TKN_SEMICOLON +TKN_BREAK +TKN_SEMICOLON +TKN_CASE +TKN_LIT_CHAR(F) +TKN_COLON +TKN_ID(s) +TKN_ASSIGN +TKN_LIT_STR(Better try again +) +TKN_SEMICOLON +TKN_BREAK +TKN_SEMICOLON +TKN_DEFAULT +TKN_COLON +TKN_ID(s) +TKN_ASSIGN +TKN_LIT_STR(Invalid grade +) +TKN_SEMICOLON +TKN_R_BRACE +TKN_SWITCH +TKN_L_PAREN +TKN_LIT_INT(1) +TKN_R_PAREN +TKN_L_BRACE +TKN_DEFAULT +TKN_COLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(default case +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_SWITCH +TKN_L_PAREN +TKN_LIT_INT(2) +TKN_R_PAREN +TKN_L_BRACE +TKN_CASE +TKN_LIT_INT(2) +TKN_COLON +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(is two +) +TKN_R_PAREN +TKN_SEMICOLON +TKN_R_BRACE +TKN_ID(printf) +TKN_L_PAREN +TKN_LIT_STR(%s +) +TKN_COMMA +TKN_ID(s) +TKN_R_PAREN +TKN_SEMICOLON +TKN_RETURN +TKN_LIT_INT(0) +TKN_SEMICOLON +TKN_R_BRACE +TKN_EOF