编译原理实验指导 下载本文

的、实验内容、实验实现过程、源程序、实验结果、实验体会)。 实现代码: #include #include # include void pro_process(char *); void main( ) {//定义扫描缓冲区

char buf[4048]={'\\0'}; //缓冲区清0 //调用预处理程序 pro_process(buf);

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

void pro_process(char *buf) {

ifstream cinf(\

int i=0; //计数器

char old_c='\\0',cur_c; //前一个字符,当前字符 bool in_comment=false; //false表示当前字符未处于注释中 while(cinf.read(&cur_c,sizeof(char))) //从文件读一个字符 {

3

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

4

old_c=cur_c; //保留前一个字符 }//end of while

buf[i++]='#'; //在源程序词尾加字符# }

5

实验二 简单程序设计语言的词法分析器

实验学时:2学时 实验目的:

掌握词法分析器的原理

将源程序预处理、状态图转换等结合,建立简单的程序设计语言词法分析器 实验内容:

要求能对简单程序设计语言进行词法分析,具体内容如下:

字符集

{?a?..?z?, ?0?..?9?,?+?,?=?,?*?,?,?,?;?,?(?,?)?,?#?}

若发现字符集之外的字符,即为非法字符,当出现非法字符时终止词法分析器的运行。

单词集

基本字:begin、end、integer、real 标识符:以字母开始的数字字母串 无符号整常数 无符号实常数 运算符:+、*、++、= 界符:,、;、(、)、#

错误词形:. (前后无数字字符的小数点) 单词编码

6