📄 3.branch.c
字号:
#include <stdio.h>#include "def.h"#include "3.def.h"getbranch(head)VERT *head; { VERT v; for (v = 0; v < nodenum; ++v) LABEL(v) = FALSE; for (v = START; DEFINED(v); v = RSIB(v)) chkbranch(v,head); addlab(START); }chkbranch(v,head)VERT v,*head; { VERT w; int i; switch(NTYPE(v)) { case GOVX: for (i = 1, w = head[v]; DEFINED(w); w = head[w], ++i) { if (i > 1 && !levnxt && !levbrk) break; if (ARC(v,0) == BRK(w) && (levbrk || i == 1)) { NTYPE(v) = BRKVX; LEVEL(v) = i; break; } else if (ARC(v,0) == NXT(w) && (levnxt || i == 1)) { NTYPE(v) = NXTVX; LEVEL(v) = i; break; } } if (NTYPE(v) == GOVX) { if (ARC(v,0) == stopvert) NTYPE(v) = STOPVX; else if (ARC(v,0) == retvert) NTYPE(v) = RETVX; else LABEL(ARC(v,0)) = TRUE; } break; case COMPVX: case ASGOVX: for (i = 0; i < ARCNUM(v); ++i) LABEL(ARC(v,i)) = TRUE; break; case IOVX: if (DEFINED(ARC(v,ENDEQ))) LABEL(ARC(v,ENDEQ)) = TRUE; if (DEFINED(ARC(v,ERREQ))) LABEL(ARC(v,ERREQ)) = TRUE; if (DEFINED(FMTREF(v))) LABEL(FMTREF(v)) = TRUE; break; } for (i = 0; i < CHILDNUM(v); ++i) for (w = LCHILD(v,i); DEFINED(w); w = RSIB(w)) chkbranch(w,head); }addlab(v) /* add labels */VERT v; { int recvar; if (NTYPE(v) != ITERVX && LABEL(v) ) LABEL(v) = nxtlab(); RECURSE(addlab,v,recvar); if (NTYPE(v) == ITERVX && LABEL(NXT(v))) LABEL(NXT(v)) = nxtlab(); }nxtlab() { static count; return(labinit + (count++) * labinc); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -