aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c60
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;
+}