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

Change program and Makefile for BC interpreter

parent 78b7015e
No related branches found
No related tags found
1 merge request!3Task2 odevzdání
......@@ -11,14 +11,18 @@ BUILD_DIR=./build
 
all: init fml
 
fml: $(BUILD_DIR)/arena.o $(BUILD_DIR)/parser.o $(BUILD_DIR)/ast_interpreter.o $(SRC_DIR)/fml.c #$(BUILD_DIR)/%.o
fml: $(BUILD_DIR)/arena.o $(BUILD_DIR)/parser.o $(BUILD_DIR)/ast_interpreter.o $(BUILD_DIR)/bc_interpreter.o $(SRC_DIR)/fml.c \
$(BUILD_DIR)/heap.o #$(BUILD_DIR)/%.o
$(CC) $(CFLAGS) $(LFLAGS) $? -o $(OUTPUT)
 
 
%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/ast_interpreter.o: $(SRC_DIR)/parser.o $(SRC_DIR)/ast_interpreter.c
$(BUILD_DIR)/bc_interpreter.o: $(SRC_DIR)/parser.o $(BUILD_DIR)/heap.o $(SRC_DIR)/bc_interpreter.c
$(CC) $(CFLAGS) -c $? -o $@
$(BUILD_DIR)/ast_interpreter.o: $(SRC_DIR)/parser.o $(BUILD_DIR)/heap.o $(SRC_DIR)/ast_interpreter.c
$(CC) $(CFLAGS) -c $? -o $@
$(BUILD_DIR)/parser.o: $(SRC_DIR)/parser.c
......@@ -26,6 +30,11 @@ $(BUILD_DIR)/parser.o: $(SRC_DIR)/parser.c
$(BUILD_DIR)/arena.o: $(SRC_DIR)/arena.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/heap.o: $(SRC_DIR)/heap.c
$(CC) $(CFLAGS) -c $< -o $@
 
 
init:
......
......@@ -7,8 +7,10 @@
#include "arena.h"
#include "parser.h"
#include "ast_interpreter.h"
#include "bc_interpreter.h"
 
#define AST_INTERPRETER_COMMAND "ast_interpret"
#define BC_INTERPRETER_COMMAND "bc_interpret"
#define RUN "run"
#define HEAP_SIZE_COMMAND "--heap-size"
#define HEAP_LOG_COMMAND "--heap-log"
......@@ -26,6 +28,7 @@ int main ( int argc, char **argv ) {
 
u8 flag = 0;
u8 ast_interpret = 0;
u8 bc_interpret = 0;
size_t len;
int f = -1;
for ( int arg = 1; arg < argc; ++arg ) {
......@@ -35,6 +38,9 @@ int main ( int argc, char **argv ) {
if ( len == strlen ( AST_INTERPRETER_COMMAND ) && strncmp ( argv [ arg ], AST_INTERPRETER_COMMAND, len ) == 0 ) {
ast_interpret = 1;
f = ++arg;
} else if ( len == strlen ( BC_INTERPRETER_COMMAND ) && strncmp ( argv [ arg ], BC_INTERPRETER_COMMAND, len ) == 0 ) {
bc_interpret = 1;
f = ++arg;
} else if ( len == strlen ( RUN ) && strncmp ( argv [ arg ], RUN, len ) == 0 ) {
ast_interpret = 1;
for ( size_t opt = 0; opt < 2; ++opt ) {
......@@ -88,31 +94,36 @@ int main ( int argc, char **argv ) {
}
 
fclose ( fp );
 
Arena arena;
arena_init( &arena );
Str file_str = (Str) { .str = buffer, .len = flen };
if ( ast_interpret ) {
Arena arena;
arena_init( &arena );
 
Ast *ast = parse_src ( &arena, (Str) { .str = buffer, .len = flen } );
Ast *ast = parse_src ( &arena, file_str );
 
if ( ast == NULL ) {
fprintf ( stderr, "Failed to parse source\n" );
arena_destroy ( &arena );
return 1;
}
if ( ast_interpret ) {
if ( ast == NULL ) {
fprintf ( stderr, "Failed to parse source\n" );
arena_destroy ( &arena );
return 1;
}
ASTInterpreterState state;
Heap heap;
heap_init ( &heap, heap_size * 1024 * 1024 );
state_init ( &state, &heap );
evaluate ( &state, ast );
state_destroy ( &state );
arena_destroy( &arena );
}
 
if ( bc_interpret ) {
parse_program ( file_str );
}
 
free ( buffer );
arena_destroy( &arena );
 
return 0;
}
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