diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 38 |
1 files changed, 27 insertions, 11 deletions
@@ -1,8 +1,9 @@ -#include<stdio.h> -#include<program.h> -#include<lexer.h> -#include<string.h> -#include<print.h> +#include <stdio.h> +#include <program.h> +#include <lexer.h> +#include <string.h> +#include <parser.h> +#include <print.h> @@ -12,18 +13,18 @@ int main(int argc,char **argv) struct Source *source; struct Program *program; struct Translation_Data *translation_data; + struct AST* translation_unit; - options=parse_command_line(argv); - if(options->source==NULL) + options=parse_command_line(argc,argv); + if(options->src_name==NULL) { printf("No source file specified\n"); return 0; } - source=extract_source(strdup(options->source)); + source=extract_source(strndup(options->src_name,100)); translation_data=get_translation_data(); - - if(options->print_tokens) + if(options->target==OPTION_TARGET_TOKENS || options->target==OPTION_TARGET_AST) { lex(translation_data->tokens,source,translation_data); if(translation_data->errors->size>0) @@ -31,11 +32,26 @@ int main(int argc,char **argv) printf("There was an error!\n"); print_tokens(translation_data->tokens); return 1; - }else + }else if(options->target==OPTION_TARGET_TOKENS) { print_tokens(translation_data->tokens); + }else if(options->target==OPTION_TARGET_AST) //we check because we will probably add more options + { + translation_unit=parse_unit(translation_data); + if(has_new_errors(translation_data)) + { + print_errors(translation_data); + return 1; + }else + { + print_ast(translation_unit); + delete_ast(translation_unit); + } } + }else + { + assert(!"false"); } delete_source(source); |