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

📄 3.flow.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include <stdio.h>#/*correct the flow of control in the new program - use GOTO's which maybe changed later to NEXT, BREAK, etc.*/#include "def.h"#include "3.def.h"#define BRANCHTYPE(v)	(NTYPE(v) == GOVX )#define HASLEX(t)	(t != GOVX && t != COMPVX && t != ASGOVX  && t != ITERVX )			/* for these, control never flows directly to following statement */getflow()	{	fixflow(START,UNDEFINED);	}fixflow(v,autolex)VERT v;VERT autolex;		/* lexical successor of v */	{	VERT lex,chlex,z,x,w;	int i;	lex = lexval(v,autolex);	if (HASLEX(NTYPE(v)) && NTYPE(v) != ICASVX)		if (DEFINED(REACH(v)) && REACH(v) != lex)			insib(v,makebr(REACH(v)));		else if (NTYPE(v) == DOVX && ARC(v,1) != lex)			insib(v,makebr(ARC(v,1)));	if (NTYPE(v) == ITERVX)		{		BRK(v) = autolex;		chlex = v;		}	else		chlex = lexval(v,autolex);	for (i = 0; i < CHILDNUM(v); ++i)		{		w = LCHILD(v,i);		if (DEFINED(w))			fixflow(w,chlex);		else			{			ASSERT(i < ARCNUM(v),fixflow);			z = ARC(v,i);			ASSERT(DEFINED(z), fixflow);			if (z != chlex)				{				x = makebr(z);				LCHILD(v,i) = x;				RSIB(x) = UNDEFINED;				}			}		}	if (DEFINED(RSIB(v)))		fixflow(RSIB(v),autolex);	}lexval(v,lastlex)VERT v,lastlex;	{	VERT sib;	if (!HASLEX(NTYPE(v))) return(UNDEFINED);	sib = RSIB(v);	if (NTYPE(v) == ICASVX || NTYPE(v) == ACASVX)		return(lastlex);	else if (!DEFINED(sib))		return(lastlex);	else if (BRANCHTYPE(sib))		return(ARC(sib,0));	else return(sib);	}makebr(w)		/* make branching node leading to w */VERT w;	{	VERT new;	new = create(GOVX,1);	ARC(new,0) = w;	RSIB(new) = UNDEFINED;	REACH(new) = UNDEFINED;	return(new);	}

⌨️ 快捷键说明

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