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

📄 input.c

📁 unix环境下实现的cmm语言编译器
💻 C
字号:
/*input.c:建立并管理输入缓冲区*/#include "cmm.h"#include <unistd.h>unsigned char	*cp,		/*cp为当前的输入字符*/				*limit;		/*limit指向缓冲区的结束处*/int lineno;					/*行计数*/char *line;					/*指向当前的行*/int	infd;					/*输入文件的描述符*/char *file;					/*文件名*/static unsigned char *buffer;	/*输入缓冲区*//*inputInit:一次性读入整个文件,并设置好缓冲区*/void inputInit(void){	int size;	int flen = lseek(infd, 0, SEEK_END);/*取得文件的偏移量,及文件的长度*/	if(flen == -1) {		error("lseek error\n");		exit(1);	}	buffer =  allocate(flen+1, PERM);	/*之前的lseek调用改变了文件内的偏移量,这里将	 *重新设置文件的偏移量为文件的开始处,以便read调用*/	lseek(infd, 0,SEEK_SET);	size = read(infd, buffer,flen);	if(size == -1) {		error("read error\n");			exit(1);	}	lineno = 0;	cp = buffer;	line = (char *)cp;	limit = buffer + size;	*limit = '\n';		return ;}/*nexline:当遇到换行符时调用nexline进行行计数, 并跳过行开始处的空白符*/void nexline(void){	if (cp >= limit)		return ; 	lineno++;	for (line = (char *)cp; *cp == ' ' || *cp == '\t';)		cp++;}

⌨️ 快捷键说明

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