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

Add makefile and simple main function

parent b55f0b76
No related branches found
No related tags found
1 merge request!1Task1 odevzdání
Makefile 0 → 100644
CC=gcc
CFLAGS=-Wall -pedantic -Wextra -g
LFLAGS=
OUTPUT=fml
SRC_DIR=./src
BUILD_DIR=./build
.PHONY: init fml
all: init fml
fml: $(BUILD_DIR)/arena.o $(BUILD_DIR)/parser.o $(SRC_DIR)/fml.c #$(BUILD_DIR)/%.o
$(CC) $(CFLAGS) $(LFLAGS) $? -o $(OUTPUT)
%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/parser.o: $(SRC_DIR)/parser.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/arena.o: $(SRC_DIR)/arena.c
$(CC) $(CFLAGS) -c $< -o $@
init:
mkdir -p build
int main ( int argc, const char * argv [] ) {
#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>
 
#include "arena.h"
#include "parser.h"
 
return 0;
}
\ No newline at end of file
#define AST_INTERPRETER_COMMAND "ast_interpret"
#define RUN "run"
#define MAX_ARG_LEN 20
int main ( int argc, char **argv ) {
if ( argc < 2 ) {
fprintf( stderr, "Error: expected at least one argument\n" );
return 1;
}
u8 flag = 0;
u8 ast_interpret = 0;
size_t len;
for ( int arg = 1; arg < argc; ++arg ) {
len = strlen ( argv [ arg ] );
if ( len > MAX_ARG_LEN ) {
fprintf( stderr, "Error: unsupported argument.\n" );
flag = 1;
}
for ( size_t j = 0; j < len; j++ )
argv [ arg ] [ j ] = tolower ( argv [ arg ] [ j ] );
if ( strncpy ( argv [ arg ], AST_INTERPRETER_COMMAND, len ) == 0 )
ast_interpret = 1;
else if ( strncpy ( argv [ arg ], RUN, len ) == 0 )
ast_interpret = 1;
else {
fprintf( stderr, "Error: unsupported argument.\n" );
flag = 1;
}
}
if ( flag )
return 1;
Arena arena;
arena_init( &arena );
Ast *ast = parse_src ( &arena, (Str) { .str = (u8 *) argv[1], .len = strlen(argv[1]) } );
if ( ast == NULL ) {
fprintf ( stderr, "Failed to parse source\n" );
arena_destroy ( &arena );
return 1;
}
if ( ast_interpret )
return 88;
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