Skip to content
Snippets Groups Projects
Commit e69343e8 authored by Michal Štěpánek's avatar Michal Štěpánek
Browse files

Init bc_compiler files and modify Makefile + fml.c to accomodate for bc_compiler

parent 5955606e
No related branches found
No related tags found
1 merge request!4Task 3 odevzdání
......@@ -11,7 +11,7 @@ BUILD_DIR=./build
 
all: init fml
 
fml: $(BUILD_DIR)/arena.o $(BUILD_DIR)/parser.o $(BUILD_DIR)/ast_interpreter.o $(BUILD_DIR)/bc_interpreter.o $(SRC_DIR)/fml.c \
fml: $(BUILD_DIR)/arena.o $(BUILD_DIR)/parser.o $(BUILD_DIR)/ast_interpreter.o $(BUILD_DIR)/bc_interpreter.o $(BUILD_DIR)/bc_compiler.o $(SRC_DIR)/fml.c \
$(BUILD_DIR)/heap.o #$(BUILD_DIR)/%.o
$(CC) $(CFLAGS) $(LFLAGS) $? -o $(OUTPUT)
 
......
#pragma once
#include "bc_compiler.c"
\ No newline at end of file
#pragma once
#include "parser.h"
Str generate_bc ( file_str );
\ No newline at end of file
......@@ -8,9 +8,11 @@
#include "parser.h"
#include "ast_interpreter.h"
#include "bc_interpreter.h"
#include "bc_compiler.h"
 
#define AST_INTERPRETER_COMMAND "ast_interpret"
#define BC_INTERPRETER_COMMAND "bc_interpret"
#define BC_COMPILER_COMMAND "bc_compile"
#define RUN "run"
#define HEAP_SIZE_COMMAND "--heap-size"
#define HEAP_LOG_COMMAND "--heap-log"
......@@ -29,6 +31,7 @@ int main ( int argc, char **argv ) {
u8 flag = 0;
u8 ast_interpreter = 0;
u8 bc_interpreter = 0;
u8 bc_compiler = 0;
size_t len;
int f = -1;
for ( int arg = 1; arg < argc; ++arg ) {
......@@ -41,8 +44,12 @@ int main ( int argc, char **argv ) {
} else if ( len == strlen ( BC_INTERPRETER_COMMAND ) && strncmp ( argv [ arg ], BC_INTERPRETER_COMMAND, len ) == 0 ) {
bc_interpreter = 1;
f = ++arg;
} else if ( len == strlen ( BC_COMPILER_COMMAND ) && strncmp ( argv [ arg ], BC_COMPILER_COMMAND, len ) == 0 ) {
bc_compiler = 1;
f = ++arg;
} else if ( len == strlen ( RUN ) && strncmp ( argv [ arg ], RUN, len ) == 0 ) {
ast_interpreter = 1;
bc_interpreter = 1;
bc_compiler = 1;
for ( size_t opt = 0; opt < 2; ++opt ) {
len = strlen ( argv [ ++arg ] );
if ( len == strlen ( HEAP_SIZE_COMMAND ) && strncmp ( argv [ arg ], HEAP_SIZE_COMMAND, len ) == 0 ) {
......@@ -117,14 +124,21 @@ int main ( int argc, char **argv ) {
arena_destroy( &arena );
}
 
Str bc;
if ( bc_compiler )
bc = generate_bc ( file_str );
if ( bc_interpreter ) {
if ( bc_compiler )
file_str = bc;
VM vm;
vm_init ( &vm, heap_size * 1024 * 1024 );
vm_interpret ( &vm, file_str );
vm_destroy ( &vm );
}
 
if ( bc_compiler && ! bc_interpreter )
printf ( "%.*s", (int) bc . len, bc . str );
 
free ( buffer );
 
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment