diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..438f282 --- /dev/null +++ b/src/main.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <program.h> +#include <lexer.h> +#include <string.h> +#include <parser.h> +#include <print.h> + + + +int main(int argc,char **argv) +{ + struct Options *options; + struct Source *source; + struct Program *program; + struct Translation_Data *translation_data; + struct AST* translation_unit; + + options=parse_command_line(argc,argv); + if(options->src_name==NULL) + { + printf("No source file specified\n"); + return 0; + } + source=extract_source(strndup(options->src_name,100)); + translation_data=get_translation_data(); + + if(options->target==OPTION_TARGET_TOKENS || options->target==OPTION_TARGET_AST) + { + lex(translation_data->tokens,source,translation_data); + if(translation_data->errors->size>0) + { + printf("There was an error!\n"); + print_tokens(translation_data->tokens); + return 1; + }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); + delete_options(options); + return 0; +} |