#include "semcheck.h" #include #include #include void usage() { cerr << "sem-check [ -i ] [ -n ] [ cd ] " << endl; } void out_of_store() { cerr << "operator new failed: out of store\n"; exit( 1 ); } #ifndef __GNUC__ extern PF set_new_handler( PF ); #else extern "C" PF set_new_handler( PF ); #endif Vertex_Comma_list * terminals; Term_Comma_list * foreignclasses; Cd_graph * followsetEqGraph; char *GEN_DIR = getenv("GEN_DIR"); char *toolname = "sem-check"; char *tmpdir = "notmod/tmp"; char* cdpath; int main(int argc,char* argv[] , char *envp[]) { int doll = 1; int nointer = 1; char *dem_in = "cd.cd"; char * expected_arg1 = "-n"; //no leftrecursion-ll1-checking char * expected_arg2 = "-i"; //intermediate files char * cwd = getcwd(NULL,1024); if (GEN_DIR == NULL) GEN_DIR = "./"; set_new_handler( &out_of_store ); if (argc==2) { if (strcmp(expected_arg1,argv[1])==0) doll=0; else if (strcmp(expected_arg2,argv[1])==0) nointer = 0; else dem_in = argv[1]; } else if (argc==3) { if (strcmp(expected_arg1,argv[1])==0) { doll=0; if (strcmp(expected_arg2,argv[2])==0) nointer = 0; else dem_in = argv[2]; } else if (strcmp(expected_arg2,argv[1])==0) { nointer = 0 ; if (strcmp(expected_arg1,argv[2])==0) doll = 0; else dem_in = argv[2]; } else { usage(); exit(1); } } else if (argc==4) { if (strcmp(expected_arg1,argv[1])==0) { doll=0; if (strcmp(expected_arg2,argv[2])==0) { nointer = 0; dem_in = argv[3]; } else { usage(); exit(1); } } else if (strcmp(expected_arg2,argv[1])==0) { nointer = 0 ; if (strcmp(expected_arg1,argv[2])==0) { doll = 0; dem_in = argv[3]; } else { usage(); exit(1); } } else { usage(); exit(1); } } else if (argc != 1) { usage(); exit(1); } if (access(dem_in, R_OK) != 0) { char buf[1024]; sprintf(buf,"%s : %s",toolname,dem_in); perror(buf); exit(1); } if (!nointer) { int mkdir_status = mkdir("notmod",0755); if (mkdir_status == 0) sem_out << toolname << ": created the directory notmod." << endl; else if (mkdir_status && ( errno != EEXIST)) { char buf[1024]; sprintf(buf,"%s: mkdir %s",toolname,"notmod"); perror(buf); exit(1); } if (access("notmod", R_OK|W_OK|X_OK) != 0) { char buf[1024]; sprintf(buf,"%s : %s",toolname,"notmod"); perror(buf); exit(1); } mkdir_status = mkdir("notmod/cds",0755); if (mkdir_status == 0) sem_out << toolname << ": created the directory notmod/cds." << endl; else if (mkdir_status && ( errno != EEXIST)) { char buf[1024]; sprintf(buf,"%s: mkdir %s",toolname,"notmod/cds"); perror(buf); exit(1); } mkdir_status = mkdir("notmod/tmp",0755); if (mkdir_status == 0) sem_out << toolname << ": created the directory notmod/tmp." << endl; else if (mkdir_status && ( errno != EEXIST)) { char buf[1024]; sprintf(buf,"%s: mkdir %s",toolname,"notmod/tmp"); perror(buf); exit(1); } } Demeter_in *iDemeter_in = new Demeter_in(); iDemeter_in = (Demeter_in*)iDemeter_in->g_parse( dem_in ); if (iDemeter_in == NULL) exit(1); if (iDemeter_in ->sem_check(doll,nointer)) exit(1); else return (0); }