4.brace.c

来自「unix v7是最后一个广泛发布的研究型UNIX版本」· C语言 代码 · 共 57 行

C
57
字号
#include <stdio.h>#include "def.h"#include "4.def.h"#include "3.def.h"ndbrace(v)			/* determine whether braces needed around subparts of v */				/* return TRUE if v ends with IF THEN not in braces */VERT v;	{	VERT w;	int i;	LOGICAL endif;	endif = FALSE;	for (i = 0; i < CHILDNUM(v); ++i)		{		endif = FALSE;		for (w = LCHILD(v,i); DEFINED(w); w = RSIB(w))			endif = ndbrace(w);		if (NTYPE(v) != DUMVX && NTYPE(v) != ITERVX &&			(!DEFINED(LCHILD(v,i)) || compound(v,i) ||			(endif && NTYPE(v) == IFVX && !IFTHEN(v) && i == THEN )))				/* DUMVX doesn't nest, ITERVX doen't nest since					nesting is done at LOOPNODE, etc., must					check for IFTHEN followed by unrelated ELSE */			{			YESBRACE(v,i);			endif = FALSE;			}		}	return(endif || IFTHEN(v) );	}compound(v,ch)		/* return TRUE iff subpart ch of v has multiple statements */VERT v;int ch;	{	VERT w;	w = LCHILD(v,ch);	if (!DEFINED(w))		return(FALSE);	if (NTYPE(w) == ITERVX)		{		ASSERT(DEFINED(NXT(w)),compound);		if (LABEL(NXT(w)))			return(TRUE);		/* loop ends with labeled CONTINUE statement */		else			return(compound(w,0));		}	else if (DEFINED(RSIB(w)))		return(TRUE);	else if (NTYPE(w) == STLNVX && CODELINES(w) > 1)		return(TRUE);	else		return(FALSE);	}

⌨️ 快捷键说明

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