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