#include "../lexer/lexer.h" #include "../parser/parser.h" #include "../semantic/semantic.h" #include "../ir/ir.h" #include "../ir/ir_gen.h" #include #include int main() { const char *source = "public class Math {\n" " public static int add(int a, int b) {\n" " int result = a + b;\n" " return result;\n" " }\n" "\n" " public static int factorial(int n) {\n" " if (n <= 1) {\n" " return 1;\n" " }\n" " return n * factorial(n - 1);\n" " }\n" "}\n"; printf("Source code:\n%s\n", source); printf("\nIR Generation:\n"); printf("================================================================================\n\n"); RavaLexer_t *lexer = rava_lexer_create(source); RavaParser_t *parser = rava_parser_create(lexer); RavaASTNode_t *ast = rava_parser_parse(parser); if (parser->had_error) { printf("Parse error: %s\n", parser->error_message ? parser->error_message : "Unknown error"); return 1; } RavaSemanticAnalyzer_t *analyzer = rava_semantic_analyzer_create(); bool semantic_ok = rava_semantic_analyze(analyzer, ast); if (!semantic_ok) { printf("Semantic error: %s\n", analyzer->error_message ? analyzer->error_message : "Unknown error"); return 1; } RavaIRGenerator_t *ir_gen = rava_ir_generator_create(analyzer); RavaProgram_t *program = rava_ir_generate(ir_gen, ast); if (program) { rava_ir_print(program); printf("\nāœ“ IR generation completed successfully!\n"); } else { printf("āœ— IR generation failed!\n"); return 1; } rava_program_destroy(program); rava_ir_generator_destroy(ir_gen); rava_semantic_analyzer_destroy(analyzer); rava_ast_node_destroy(ast); rava_parser_destroy(parser); rava_lexer_destroy(lexer); printf("\nIR test completed!\n"); return 0; }