编译实验报告+源代码

  • 格式:doc
  • 大小:328.50 KB
  • 文档页数:25

下载文档原格式

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

课程设计报告

( 2013-- 2014年度第1学期)

名称:编译技术课程设计B

题目:简单编译程序的设计与实现院系:计算机系

班级:XXX

学号:XXX

学生姓名:XXX

指导教师:XXX

设计周数:XXX

成绩:

日期:XX 年XX 月

实验一.词法分析器的设计与实现

一、课程设计(综合实验)的目的与要求

1.1 词法分析器设计的实验目的

本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。

1.2 词法分析器设计的实验要求

设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。

表1-1 单词符号及其内部表示

二、设计(实验)正文

1.词法分析器流程图

2.词法分析器设计程序代码

// first.cpp : 定义控制台应用程序的入口点。//

#include"stdafx.h"

#include

#include

using namespace std;

int what(char a)

{

if((int(a)>=48)&&(int(a)<=57))

{

return 0;//0-9数字

}

else

if((int(a)>=97)&&(int(a)<=122))

{

return 1;//a-z的字母

}

else

{

return 2;//其他的标点符号

}

}

void scan(char a[],int &m,char zc[100][100],int &n)

{

char zh[100];

int b=0,weizhi,r=0;

int zbbm;

//-----------------------------检测整形常数

while(a[m]==' ')

{

cout<<"遇到空格"<

m++;

}

if(what(a[m])==0)

{

while(what(a[m])==0)

{

b=b*10+int(a[m])-48;

m++;

}

zbbm=7;

cout<<"("<

}

else

//----------------------------------检测字符型

if(what(a[m])==1)

{

if((a[m]=='b')&&(a[m+1]=='e')&&(a[m+2]=='g')&&(a[m+3]=='i')&&(a[m+4]=='n')& &(what(a[m+5])==2))

{

m=m+5;

zbbm=1;

cout<<"("<

}//=====检测begin

else

if((a[m]=='i')&&(a[m+1]=='f')&&(what(a[m+2])==2))

{

m=m+2;

zbbm=2;

cout<<"("<

}//检测if

else

if((a[m]=='t')&&(a[m+1]=='h')&&(a[m+2]=='e')&&(a[m+3]=='n')&&(what(a[m+4])= =2))

{

m=m+4;

zbbm=3;

cout<<"("<

}//检测then

else

if((a[m]=='e')&&(a[m+1]=='l')&&(a[m+2]=='s')&&(a[m+3]=='e')&&(what(a[m+4])= =2))

{

m=m+4;

zbbm=4;

cout<<"("<

}//检测else

else

if((a[m]=='e')&&(a[m+1]=='n')&&(a[m+2]=='d')&&(what(a[m+3])==2))

{

m=m+3;

zbbm=5;

cout<<"("<

}//检测end

//----------------------------对未知字符的检测

else

{

int j=0;

while(what(a[m])!=2)

{

zh[j]=a[m];

m++;

j++;