aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/main.c b/main.c
index bfc09c0..438f282 100644
--- a/main.c
+++ b/main.c
@@ -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);