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

📄 r1.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
#include "r.h"char	scrat[500];int	brkptr	-1;int	brkstk[10];int	forptr	0;int	forstk[10];repcode() {	outcont(0);	yyval = genlab();	outcont(yyval);	brkstk[++brkptr] = yyval+1;	genlab();	genlab();}untils(p1) int p1; {	outnum(p1+1);	outcode("\tif(.not.");	balpar(scrat);	outcode(scrat);	outcode(")");	outgoto(p1);	outcont(p1+2);	brkptr--;}ifcode(p1) int p1; {	outcode("\tif(.not.");	balpar(scrat);	outcode(scrat);	outcode(")");	outgoto(yyval=genlab()); genlab();}whilecode(p1) int p1; {	outcont(0);	brkstk[++brkptr] = yyval = genlab(); genlab();	outnum(yyval);	outcode("\tif(.not.");	balpar(scrat);	outcode(scrat);	outcode(")");	outgoto(yyval+1);}whilestat(p1) int p1; {	outgoto(p1);	outcont(p1+1);	brkptr--;}balpar(bp) char *bp; {	int  i, c, lpar;	extern int peek;	while( (c=getc()) == ' ' || c == '\t' || c=='\n' );	peek = c;	if( c != '(' ){		error("missing left paren");		bp[0] = '\0';		return(bp);	}	for( lpar=i=0; (bp[i++]=c=getc())!='\0'; ){		if( c=='\'' || c=='"' )			while( (bp[i++]=getc()) != c );		if( i>=499 || c=='{' || c=='}' ){			error("missing right parenthesis at %.20s", bp);			break;		}		if( c=='(' )			lpar++;		else if( c==')' )			lpar--;		if( lpar == 0 )			break;	}	bp[i] = '\0';	return(bp);}int	labval	23000;genlab(){	return(++labval);}gokcode(p1) char *p1; {	outcode("\t");	outcode(p1);	eatup(p1,scrat);	outcode(scrat);	outcode(0);}eatup(p1,bp) char *p1, *bp; {	extern int peek;	int i,c,lnb,lpar;	lnb = '\n';	while( c = *p1++ )		if( c!=' ' )			lnb = c;	i = lpar = 0;  more:	for( ; (bp[i++]=c=getc())!=';' && c!='{' && c!='\n' && c!='}'; ){		if( i>=499 ){			error("statement too long at %.20s", bp);			break;		}		if( c != ' ' && c != '\t' )			lnb = c;		if( c=='\'' || c=='"' )			while( (bp[i++]=getc()) != c );		if( c=='(' )			lpar++;		else if( c==')' ) {			lpar--;			if( lpar < 0 )				error("missing left paren at %.20s",bp);		}	}	if( c == '\n' ){		if( lnb=='\n' || lnb=='+' || lnb=='-' || lnb=='*' || lnb=='('			|| lnb=='/' || lnb==',' || lnb=='&'  || lnb=='|'			|| lnb=='=' )				goto more;		c = ';';	}	if( c!=';' )		peek = c;	bp[i-1] = '\0';	if( lpar > 0 )		error("missing right paren at %.20s",bp);	return(bp);}forcode(){	extern int peek;	int i,j,c;	char *bp, *getvec();	outcont(0);	balpar(scrat);	yyval = genlab(); genlab(); genlab();	brkstk[++brkptr] = yyval+1;	if( scrat[0] == '\0' ){		forstk[forptr++] = bp = getvec(1);		*bp = '\0';		return;	}	scrat[0] = '\t';	for( i=1; (c=scrat[i++])!=';' && c!='\0' ; )		if( c=='\'' || c=='"' )			while( scrat[i++] != c );	scrat[i-1] = '\0';	if( nonblank(scrat) ){		outcode(scrat);		outcode(0);	}	for( j=i; (c=scrat[i++])!=';' && c!='\0' ; )		if( c=='\'' || c=='"' )			while( scrat[i++] != c );	scrat[i-1] = '\0';	if( nonblank(&scrat[j]) ){		outnum(yyval);		outcode("\tif(.not.(");		outcode(&scrat[j]);		outcode("))");		outgoto(yyval+2);	}	else		outcont(yyval);	for( j=0; scrat[i+1]!='\0'; )		scrat[j++] = scrat[i++];	scrat[j] = '\0';	forstk[forptr++] = bp = getvec(j+1);	for(i=0; *bp++ = scrat[i++]; );}forstat(p1) int p1; {	char *bp, *q;	int i;	bp = forstk[--forptr];	outnum(p1+1);	if( nonblank(bp) ){		outcode("\t");		outcode(bp);		outcode(0);	}	outgoto(p1);	outcont(p1+2);	for( q=bp; *q++; );	relvec(bp, q-bp);	brkptr--;}docode(new,p1) int new; char *p1; {	outcode("\t");	outcode(p1);	eatup(p1,scrat);	yyval = 0;	if(new){		yyval = genlab(); genlab();		brkstk[++brkptr] = yyval;		outnum(yyval);	}	outcode(scrat);	outcode(0);}dostat(p1) int p1; {	if( p1==0 )		return;	outcont(p1);	outcont(p1+1);	brkptr--;}breakcode(p1) int p1; {	if(brkptr<0){		error("illegal BREAK");		return;	}	outgoto(brkstk[brkptr]+1);}nextcode(p1) int p1; {	if(brkptr<0){		error("illegal NEXT");		return;	}	outgoto(brkstk[brkptr]);}nonblank(s) char *s; {	int c;	while( c = *s++ )		if( c!=' ' && c!='\t' && c!='\n' )			return(1);	return(0);}error(s1, s2) char *s1, *s2; {	extern int linect[],ninclude,infile;	printf( 2, "error at line %d, file %d: ",linect[ninclude],infile);	printf( 2, s1,s2);	printf( 2, "\n");	errorflag = 1;}errcode(p1) char *p1; {	int c;	extern int yychar;	extern int linect[],ninclude,infile;	printf( 2, "\nsyntax error, line %d, file %d\n", linect[ninclude],infile);	while( (c=getc()) != ';' && c != '}' && c != '\n' && c != '\0' );	yychar = -1;	errorflag = 1;}

⌨️ 快捷键说明

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