编译原理实验报告- 源程序的预处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理实验报告

学号姓名时间2011-10-30 专业班级

实验题目:源程序的预处理

一、实验目的:

根据所学的知识编写源程序代码并且对输入的具体的源程序进行处理。

对一段源程序预处理之后,将源程序中的注释与空格去掉,并将起始

和结束的符号由大写变成小写,并将处理后的源程序输出。

二、实验内容与步骤:

1. 用C语言编写一段代码对一段源程序进行预处理。代码如下:

#include

#include

void pro_process(char *);

void main()

{

//定义扫描缓冲区

char buf[4048]={'\0'};

pro_process(buf);

//在屏幕上显示扫描缓冲区的内容

cout<

}

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>='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;

}

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语言代码对源程序进行处理,不仅对代码的编写有了更深刻的了解,而且最重要的掌握了对源程序预处理的过程。进一步明白了编译器对源程序的语法分析,词法分析,对编译原理的内容也了解了一些,可以说是受益匪浅的。

备注:要求学生每次试验结束后把实验报告填好后交给实验指导教师。

相关文档
最新文档