123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #include "__virtualmath.h"
- #include <getopt.h>
- static const struct option long_option[]={
- {"input",required_argument,NULL,'i'},
- {"stdout",no_argument,NULL,'s'},
- #if OUT_LOG
- {"log",required_argument,NULL,'l'},
- {"debug",no_argument,&args.level,DEBUG},
- {"ddebug",no_argument,&args.level,DEEP_DEBUG},
- {"ldebug",no_argument,&args.level,LEXICAL_DEBUG},
- {"lcdebug",no_argument,&args.level,LEXICAL_CHECKOUT_DEBUG},
- {"info",no_argument,&args.level,INFO},
- #endif
- // 最后一个元素应该全为0
- {NULL,0,NULL,0}
- };
- #if OUT_LOG
- static const char *short_option = "si:l:";
- #else
- static const char *short_option = "si:";
- #endif
- int getArgs(int argc, char *argv[]);
- void freeArgs();
- int main(int argc, char *argv[]) {
- if (getArgs(argc, argv)){
- goto args_error_;
- }
- Inter *global_iter = makeInter(args.log_file);
- ParserMessage *pm = makeParserMessage(args.file, args.log_file);
- pasersCommandList(pm, global_iter, true, global_iter->statement);
- if (pm->status != success){
- writeLog(pm->paser_debug, ERROR, "Syntax Error: %s\n", pm->status_message);
- writeLog(stderr, ERROR, "Syntax Error: %s\n", pm->status_message);
- goto return_;
- }
- Result tmp;
- tmp = globalIterStatement(global_iter);
- if (tmp.type == error_return){
- writeLog(global_iter->debug, ERROR, "Run Error\n", NULL);
- writeLog(stderr, ERROR, "Run Error\n", NULL);
- }
- return_:
- freePasersMessage(pm, true);
- freeInter(global_iter, true);
- freeArgs();
- return 0;
- args_error_:
- freeArgs();
- return 1;
- }
- /**
- * 参数设置, args是全局结构体, 保存全局的参数设置
- * @param argc
- * @param argv
- * @return
- */
- int getArgs(int argc, char *argv[])
- {
- args.file = NULL;
- args.log_file = NULL;
- args.level = LEXICAL_CHECKOUT_DEBUG;
- args.stdout_inter = false;
- opterr = false;
- int opt;
- while((opt=getopt_long(argc,argv,short_option ,long_option,NULL))!=-1)
- {
- switch(opt)
- {
- case 0:
- break;
- case 'i':
- args.file = memStrcpy(optarg, 0, false, false);
- break;
- case 'l':
- args.log_file = memStrcpy(optarg, 0, false, false);
- break;
- case 's':
- args.stdout_inter = true;
- break;
- case '?':
- printf("[Error]: get not success args : -%c\n", (char)optopt);
- return -1;
- default:
- break;
- }
- }
- if (args.file == NULL){
- if (argc > optind){
- args.file = memStrcpy(argv[optind], 0, false, false);
- }
- else{
- return -1;
- }
- }
- return 0;
- }
- /**
- * 释放args的成员而不包括其本身
- */
- void freeArgs(){
- memFree(args.file);
- memFree(args.file);
- }
|