#include "../lexer/lexer.h" #include "../parser/parser.h" #include "../semantic/semantic.h" #include "../ir/ir.h" #include "../ir/ir_gen.h" #include "../runtime/runtime.h" #include #include int main() { const char *source = "public class Test {\n" " public static int main() {\n" " System.out.println(42);\n" " System.out.println(100);\n" " int x = 10;\n" " int y = 20;\n" " System.out.println(x + y);\n" " return 0;\n" " }\n" "}\n"; printf("Source:\n%s\n", source); 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); return 1; } RavaSemanticAnalyzer_t *analyzer = rava_semantic_analyzer_create(); if (!rava_semantic_analyze(analyzer, ast)) { printf("Semantic error: %s\n", analyzer->error_message); return 1; } RavaIRGenerator_t *ir_gen = rava_ir_generator_create(analyzer); RavaProgram_t *program = rava_ir_generate(ir_gen, ast); if (!program) { printf("IR generation failed\n"); return 1; } printf("\nGenerated IR:\n"); rava_ir_print(program); RavaVM_t *vm = rava_vm_create(program); printf("\nExecuting Test.main()...\n"); printf("Output:\n"); if (!rava_vm_execute(vm, "Test", "main")) { printf("Runtime error: %s\n", vm->error_message); rava_vm_destroy(vm); return 1; } printf("\n✅ Execution completed successfully!\n"); rava_vm_destroy(vm); 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); return 0; }