73 lines
1.9 KiB
C
Raw Normal View History

2025-12-04 16:55:18 +01:00
#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 <stdio.h>
#include <stdlib.h>
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;
}