Skip to content
Snippets Groups Projects
fml.c 1.28 KiB
Newer Older
#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>
michal's avatar
michal committed

#include "arena.h"
#include "parser.h"
michal's avatar
michal committed

#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;
}