- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 实验报告
学 号
姓 名
时 间
2011-10-30
专 业
班 级
实验题目: 源程序的预处理
实验目的:
根据所学的知识编写源程序代码并且对输入的具体的源程序进行处理。
对一段源程序预处理之后,将源程序中的注释与空格去掉,并将起始
和结束的符号由大写变成小写,并将处理后的源程序输出。
二、实验内容与步骤:
1. 用C语言编写一段代码对一段源程序进行预处理。代码如下:
#include fstream.h
#include iostream.h
void pro_process(char *);
void main()
{
//定义扫描缓冲区
char buf[4048]={\0};
pro_process(buf);
//在屏幕上显示扫描缓冲区的内容
coutbufendl;
}
void pro_process(char *buf)
{
ifstream cinf(source.txt,ios::in);
int i=0;
char old_c=\0,cur_c;
bool in_comment =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=Acur_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;
}
old_c=cur_c; //保留前一个字符
}
buf[i++]=#; // 在源程序尾部添加字符
}
2.运行源代码,将源程序写入source.txt文本中,内用如下:
Begin/*S=2*3.14*R*R+2*3.14*R*H*/
Real r,h,s;
s=2*3.\
14*r*(r+h)
End
3.调用source.txt文本将其内容写入缓冲区;
对源程序进行预处理并将结果输出如下:
Begin real r,h,s: s=2*3.14*r*(r+h) end \0 ...\0
分析与体会:
首先是分析需要处理的一串代码,根据实验目的要求对其情况进行剖解,怎样将其源程序中的注释与空格去掉,并将起始和结束的符号由大写变成小写,而且还得将处理后的源程序进行输出;一步一步的实现。
通过编写C语言代码对源程序进行处理,不仅对代码的编写有了更深刻的了解,而且最重要的掌握了对源程序预处理的过程。进一步明白了编译器对源程序的语法分析,词法分析,对编译原理的内容也了解了一些,可以说是受益匪浅的。
备注:要求学生每次试验结束后把实验报告填好后交给实验指导教师。
文档评论(0)