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

📄 212.cpp

📁 学习编译原理的实用教程.教程共分7章: 第1章 编译系统概述 第2章 词法分析 第3章 程序设计语言的语法描述 第4章 自上而下的语法分析 第5章 自下而上的语法分析 第6章 语法制导翻译
💻 CPP
字号:
//2.1.2 源程序的输入及预处理
#include <fstream.h>
#include <iostream.h>
void pro_process(char *);
void main( )									//测试驱动程序
{
//定义扫描缓冲区
	char buf[4048]={'\0'}; 						//缓冲区清0
//调用预处理程序
	pro_process(buf);
//在屏幕上显示扫描缓冲区的内容
	cout<<buf<<endl;
}
void pro_process(char *buf)						//预处理程序
{
	ifstream cinf("source.txt",ios::in);
	int i=0; 									//计数器
	char old_c='\0',cur_c;						//前一个字符,当前字符。
	bool in_comment=false;						//false表示当前字符未处于注释中。
	while(cinf.read(&cur_c,sizeof(char))){		//从文件读一个字符
		switch(in_comment){
		case false:
			if(old_c=='/' && cur_c=='*'){		//进入注释
				i--;							//去除已存入扫描缓冲区的字符'/'
				in_comment=true;
			}
			else {
				if(old_c=='\\' && cur_c=='\n') 	//发现续行
					i--;						//去除已存入扫描缓冲区的字符'\'
				else {
					if(cur_c>='A' && cur_c<='Z')//大写变小写
						cur_c+=32; 
					if(cur_c =='\t' || cur_c =='\n')  //空格取代TAB换行
						cur_c=' '; 
					buf[i++]=cur_c ;
				}
			}
			break;
		case true:
			if(old_c=='*' && cur_c=='/')		//离开注释
				in_comment=false;
		}//end of switch
		old_c= cur_c;							//保留前一个字符
	}//end of while
	buf[i++]='#';								//在源程序尾部添加字符'#'
}

⌨️ 快捷键说明

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