⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 对软件进行可达性测试的软件
💻 C
📖 第 1 页 / 共 2 页
字号:
			{	printf("spin: cannot open %s\n",					*nvr_file);				alldone(1);			}			tl_out = cpyfile(argv[1], out2);			while (fgets(buf, 1024, fd))				fprintf(tl_out, "%s", buf);			fclose(tl_out);			fclose(fd);			preprocess(out2, out1, 1);		} else			preprocess(argv[1], out1, 0);		if (preprocessonly)			alldone(0);		if (!(yyin = fopen(out1, "r")))		{	printf("spin: cannot open %s\n", out1);			alldone(1);		}		if (strncmp(argv[1], "progress", (size_t) 8) == 0		||  strncmp(argv[1], "accept", (size_t) 6) == 0)			sprintf(cmd, "_%s", argv[1]);		else			strcpy(cmd, argv[1]);		oFname = Fname = lookup(cmd);		if (oFname->name[0] == '\"')		{	int i = (int) strlen(oFname->name);			oFname->name[i-1] = '\0';			oFname = lookup(&oFname->name[1]);		}	} else	{	oFname = Fname = lookup("<stdin>");		if (add_ltl)		{	if (argc > 0)				exit(tl_main(2, add_ltl));			printf("spin: missing argument to -f\n");			alldone(1);		}		printf("%s\n", SpinVersion);		printf("reading input from stdin:\n");		fflush(stdout);	}	if (columns == 2)	{	extern void putprelude(void);		if (xspin || verbose&(1|4|8|16|32))		{	printf("spin: -c precludes all flags except -t\n");			alldone(1);		}		putprelude();	}	if (columns && !(verbose&8) && !(verbose&16))		verbose += (8+16);	if (columns == 2 && limited_vis)		verbose += (1+4);	Srand((unsigned int) T);	/* defined in run.c */	SeedUsed = T;	s = lookup("_");	s->type = PREDEF; /* write-only global var */	s = lookup("_p");	s->type = PREDEF;	s = lookup("_pid");	s->type = PREDEF;	s = lookup("_last");	s->type = PREDEF;	s = lookup("_nr_pr");	s->type = PREDEF; /* new 3.3.10 */	yyparse();	fclose(yyin);	loose_ends();	if (inlineonly)	{	repro_src();		return 0;	}	chanaccess();	if (!Caccess)	{	if (!s_trail && (dataflow || merger))			ana_src(dataflow, merger);		sched();		alldone(nr_errs);	}	return 0;}intyywrap(void)	/* dummy routine */{	return 1;}voidnon_fatal(char *s1, char *s2){	extern int yychar; extern char yytext[];	printf("spin: line %3d %s, Error: ",		lineno, Fname?Fname->name:"nofilename");	if (s2)		printf(s1, s2);	else		printf(s1);	if (yychar != -1 && yychar != 0)	{	printf("	saw '");		explain(yychar);		printf("'");	}	if (strlen(yytext)>1)		printf(" near '%s'", yytext);	printf("\n");	nr_errs++;}voidfatal(char *s1, char *s2){	non_fatal(s1, s2);	alldone(1);}char *emalloc(size_t n){	char *tmp;	if (n == 0)		return NULL;	/* robert shelton 10/20/06 */	if (!(tmp = (char *) malloc(n)))		fatal("not enough memory", (char *)0);	memset(tmp, 0, n);	return tmp;}voidtrapwonly(Lextok *n /* , char *unused */){	extern int realread;	short i = (n->sym)?n->sym->type:0;	if (i != MTYPE	&&  i != BIT	&&  i != BYTE	&&  i != SHORT	&&  i != INT	&&  i != UNSIGNED)		return;	if (realread)	n->sym->hidden |= 128;	/* var is read at least once */}voidsetaccess(Symbol *sp, Symbol *what, int cnt, int t){	Access *a;	for (a = sp->access; a; a = a->lnk)		if (a->who == context		&&  a->what == what		&&  a->cnt == cnt		&&  a->typ == t)			return;	a = (Access *) emalloc(sizeof(Access));	a->who = context;	a->what = what;	a->cnt = cnt;	a->typ = t;	a->lnk = sp->access;	sp->access = a;}Lextok *nn(Lextok *s, int t, Lextok *ll, Lextok *rl){	Lextok *n = (Lextok *) emalloc(sizeof(Lextok));	static int warn_nn = 0;	n->ntyp = (short) t;	if (s && s->fn)	{	n->ln = s->ln;		n->fn = s->fn;	} else if (rl && rl->fn)	{	n->ln = rl->ln;		n->fn = rl->fn;	} else if (ll && ll->fn)	{	n->ln = ll->ln;		n->fn = ll->fn;	} else	{	n->ln = lineno;		n->fn = Fname;	}	if (s) n->sym  = s->sym;	n->lft  = ll;	n->rgt  = rl;	n->indstep = DstepStart;	if (t == TIMEOUT) Etimeouts++;	if (!context) return n;	if (t == 'r' || t == 's')		setaccess(n->sym, ZS, 0, t);	if (t == 'R')		setaccess(n->sym, ZS, 0, 'P');	if (context->name == claimproc)	{	int forbidden = separate;		switch (t) {		case ASGN:			printf("spin: Warning, never claim has side-effect\n");			break;		case 'r': case 's':			non_fatal("never claim contains i/o stmnts",(char *)0);			break;		case TIMEOUT:			/* never claim polls timeout */			if (Ntimeouts && Etimeouts)				forbidden = 0;			Ntimeouts++; Etimeouts--;			break;		case LEN: case EMPTY: case FULL:		case 'R': case NFULL: case NEMPTY:			/* status becomes non-exclusive */			if (n->sym && !(n->sym->xu&XX))			{	n->sym->xu |= XX;				if (separate == 2) {				printf("spin: warning, make sure that the S1 model\n");				printf("      also polls channel '%s' in its claim\n",				n->sym->name); 			}	}			forbidden = 0;			break;		case 'c':			AST_track(n, 0);	/* register as a slice criterion */			/* fall thru */		default:			forbidden = 0;			break;		}		if (forbidden)		{	printf("spin: never, saw "); explain(t); printf("\n");			fatal("incompatible with separate compilation",(char *)0);		}	} else if ((t == ENABLED || t == PC_VAL) && !(warn_nn&t))	{	printf("spin: Warning, using %s outside never claim\n",			(t == ENABLED)?"enabled()":"pc_value()");		warn_nn |= t;	} else if (t == NONPROGRESS)	{	fatal("spin: Error, using np_ outside never claim\n", (char *)0);	}	return n;}Lextok *rem_lab(Symbol *a, Lextok *b, Symbol *c)	/* proctype name, pid, label name */{	Lextok *tmp1, *tmp2, *tmp3;	has_remote++;	c->type = LABEL;	/* refered to in global context here */	fix_dest(c, a);		/* in case target of rem_lab is jump */	tmp1 = nn(ZN, '?',   b, ZN); tmp1->sym = a;	tmp1 = nn(ZN, 'p', tmp1, ZN);	tmp1->sym = lookup("_p");	tmp2 = nn(ZN, NAME,  ZN, ZN); tmp2->sym = a;	tmp3 = nn(ZN, 'q', tmp2, ZN); tmp3->sym = c;	return nn(ZN, EQ, tmp1, tmp3);#if 0	      .---------------EQ-------.	     /                          \	   'p' -sym-> _p               'q' -sym-> c (label name)	   /                           /	 '?' -sym-> a (proctype)     NAME -sym-> a (proctype name)	 / 	b (pid expr)#endif}Lextok *rem_var(Symbol *a, Lextok *b, Symbol *c, Lextok *ndx){	Lextok *tmp1;	has_remote++;	has_remvar++;	dataflow = 0;	/* turn off dead variable resets 4.2.5 */	tmp1 = nn(ZN, '?', b, ZN); tmp1->sym = a;	tmp1 = nn(ZN, 'p', tmp1, ndx);	tmp1->sym = c;	return tmp1;#if 0	cannot refer to struct elements	only to scalars and arrays	    'p' -sym-> c (variable name)	    / \______  possible arrayindex on c	   /	 '?' -sym-> a (proctype)	 / 	b (pid expr)#endif}static voidexplain(int n){	FILE *fd = stdout;	switch (n) {	default:	if (n > 0 && n < 256)				fprintf(fd, "'%c' = '", n);			fprintf(fd, "%d'", n);			break;	case '\b':	fprintf(fd, "\\b"); break;	case '\t':	fprintf(fd, "\\t"); break;	case '\f':	fprintf(fd, "\\f"); break;	case '\n':	fprintf(fd, "\\n"); break;	case '\r':	fprintf(fd, "\\r"); break;	case 'c':	fprintf(fd, "condition"); break;	case 's':	fprintf(fd, "send"); break;	case 'r':	fprintf(fd, "recv"); break;	case 'R':	fprintf(fd, "recv poll %s", Operator); break;	case '@':	fprintf(fd, "@"); break;	case '?':	fprintf(fd, "(x->y:z)"); break;	case ACTIVE:	fprintf(fd, "%sactive",	Keyword); break;	case AND:	fprintf(fd, "%s&&",	Operator); break;	case ASGN:	fprintf(fd, "%s=",	Operator); break;	case ASSERT:	fprintf(fd, "%sassert",	Function); break;	case ATOMIC:	fprintf(fd, "%satomic",	Keyword); break;	case BREAK:	fprintf(fd, "%sbreak",	Keyword); break;	case C_CODE:	fprintf(fd, "%sc_code",	Keyword); break;	case C_DECL:	fprintf(fd, "%sc_decl",	Keyword); break;	case C_EXPR:	fprintf(fd, "%sc_expr",	Keyword); break;	case C_STATE:	fprintf(fd, "%sc_state",Keyword); break;	case C_TRACK:	fprintf(fd, "%sc_track",Keyword); break;	case CLAIM:	fprintf(fd, "%snever",	Keyword); break;	case CONST:	fprintf(fd, "a constant"); break;	case DECR:	fprintf(fd, "%s--",	Operator); break;	case D_STEP:	fprintf(fd, "%sd_step",	Keyword); break;	case D_PROCTYPE: fprintf(fd, "%sd_proctype", Keyword); break;	case DO:	fprintf(fd, "%sdo",	Keyword); break;	case DOT:	fprintf(fd, "."); break;	case ELSE:	fprintf(fd, "%selse",	Keyword); break;	case EMPTY:	fprintf(fd, "%sempty",	Function); break;	case ENABLED:	fprintf(fd, "%senabled",Function); break;	case EQ:	fprintf(fd, "%s==",	Operator); break;	case EVAL:	fprintf(fd, "%seval",	Function); break;	case FI:	fprintf(fd, "%sfi",	Keyword); break;	case FULL:	fprintf(fd, "%sfull",	Function); break;	case GE:	fprintf(fd, "%s>=",	Operator); break;	case GOTO:	fprintf(fd, "%sgoto",	Keyword); break;	case GT:	fprintf(fd, "%s>",	Operator); break;	case HIDDEN:	fprintf(fd, "%shidden",	Keyword); break;	case IF:	fprintf(fd, "%sif",	Keyword); break;	case INCR:	fprintf(fd, "%s++",	Operator); break;	case INAME:	fprintf(fd, "inline name"); break;	case INLINE:	fprintf(fd, "%sinline",	Keyword); break;	case INIT:	fprintf(fd, "%sinit",	Keyword); break;	case ISLOCAL:	fprintf(fd, "%slocal",  Keyword); break;	case LABEL:	fprintf(fd, "a label-name"); break;	case LE:	fprintf(fd, "%s<=",	Operator); break;	case LEN:	fprintf(fd, "%slen",	Function); break;	case LSHIFT:	fprintf(fd, "%s<<",	Operator); break;	case LT:	fprintf(fd, "%s<",	Operator); break;	case MTYPE:	fprintf(fd, "%smtype",	Keyword); break;	case NAME:	fprintf(fd, "an identifier"); break;	case NE:	fprintf(fd, "%s!=",	Operator); break;	case NEG:	fprintf(fd, "%s! (not)",Operator); break;	case NEMPTY:	fprintf(fd, "%snempty",	Function); break;	case NFULL:	fprintf(fd, "%snfull",	Function); break;	case NON_ATOMIC: fprintf(fd, "sub-sequence"); break;	case NONPROGRESS: fprintf(fd, "%snp_",	Function); break;	case OD:	fprintf(fd, "%sod",	Keyword); break;	case OF:	fprintf(fd, "%sof",	Keyword); break;	case OR:	fprintf(fd, "%s||",	Operator); break;	case O_SND:	fprintf(fd, "%s!!",	Operator); break;	case PC_VAL:	fprintf(fd, "%spc_value",Function); break;	case PNAME:	fprintf(fd, "process name"); break;	case PRINT:	fprintf(fd, "%sprintf",	Function); break;	case PRINTM:	fprintf(fd, "%sprintm",	Function); break;	case PRIORITY:	fprintf(fd, "%spriority", Keyword); break;	case PROCTYPE:	fprintf(fd, "%sproctype",Keyword); break;	case PROVIDED:	fprintf(fd, "%sprovided",Keyword); break;	case RCV:	fprintf(fd, "%s?",	Operator); break;	case R_RCV:	fprintf(fd, "%s??",	Operator); break;	case RSHIFT:	fprintf(fd, "%s>>",	Operator); break;	case RUN:	fprintf(fd, "%srun",	Operator); break;	case SEP:	fprintf(fd, "token: ::"); break;	case SEMI:	fprintf(fd, ";"); break;	case SHOW:	fprintf(fd, "%sshow", Keyword); break;	case SND:	fprintf(fd, "%s!",	Operator); break;	case STRING:	fprintf(fd, "a string"); break;	case TRACE:	fprintf(fd, "%strace", Keyword); break;	case TIMEOUT:	fprintf(fd, "%stimeout",Keyword); break;	case TYPE:	fprintf(fd, "data typename"); break;	case TYPEDEF:	fprintf(fd, "%stypedef",Keyword); break;	case XU:	fprintf(fd, "%sx[rs]",	Keyword); break;	case UMIN:	fprintf(fd, "%s- (unary minus)", Operator); break;	case UNAME:	fprintf(fd, "a typename"); break;	case UNLESS:	fprintf(fd, "%sunless",	Keyword); break;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -