00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00036 #include <stdio.h>
00037 #include <stdlib.h>
00038 #include "ancr.h"
00039 #include "os/os.h"
00040 #include "builtin.h"
00041 #include "imode.h"
00042 #include "mytypes.h"
00043 #include "program.h"
00044 #include "strtab.h"
00045 #include "stree.h"
00046 #include "stype.h"
00047 #include "input.h"
00048 #include "lex.h"
00049 #include "parse.h"
00050 #include "run.h"
00051
00052 static void syntax_print(void);
00053
00058 int main(int argc, char *argv[])
00059 {
00060 stree_program_t *program;
00061 stype_t stype;
00062 run_t run;
00063 int rc;
00064
00065
00066 os_store_ef_path(*argv);
00067
00068 argv += 1;
00069 argc -= 1;
00070
00071 if (argc == 0) {
00072
00073 strtab_init();
00074 imode_run();
00075 return 0;
00076 }
00077
00078 if (os_str_cmp(*argv, "-h") == 0) {
00079 syntax_print();
00080 return 0;
00081 }
00082
00083 strtab_init();
00084 program = stree_program_new();
00085 program->module = stree_module_new();
00086
00087
00088 builtin_declare(program);
00089
00090
00091 if (program_lib_process(program) != EOK)
00092 return 1;
00093
00094
00095 ancr_module_process(program, program->module);
00096
00097
00098 builtin_bind(program->builtin);
00099
00100
00101 while (argc > 0) {
00102 rc = program_file_process(program, *argv);
00103 if (rc != EOK)
00104 return 1;
00105
00106 argv += 1;
00107 argc -= 1;
00108 }
00109
00110
00111 ancr_module_process(program, program->module);
00112
00113
00114 stype.program = program;
00115 stype.error = b_false;
00116 stype_module(&stype, program->module);
00117
00118
00119 if (stype.error)
00120 return 1;
00121
00122
00123 run_init(&run);
00124 run_program(&run, program);
00125
00126
00127 if (run.thread_ar->error)
00128 return 1;
00129
00130 return 0;
00131 }
00132
00134 static void syntax_print(void)
00135 {
00136 printf("Syntax: sbi <source_file.sy>\n");
00137 }