C++源代码单词扫描程序

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

院系:计算机学院

实验课程:编译原理实验

实验项目:C++源代码单词扫描程序(词法分析)

指导老师:黄煜廉

一.实验项目

C++源代码单词扫描程序(词法分析)

二.实验要求

1.C++源代码扫描程序识别C++记号。C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。

2.打开一个C++源文件,打印出所有以上的记号。

3.要求应用程序应为Windows界面。

4.选作部分:为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮

一个删除了所有不必要空格和注释的C++源程序的压缩文本。因此,程序中还应该有这样的压缩功能。

5.选作部分:进一步思考或实现——如何进一步实现减小源文件大小的压缩功能。

6.应该书写完善的软件文档。

三.需求分析

1.根据所需的功能程序应分为分析关键字、分析标识符、分析数字、分析串、分析注释、分析特殊字符和过滤多余字符几部分。

2.关键字有iostream.h.main.while.goto include for break case if struct class等。

3.过滤字符要考虑到空格和换行。

四.实验代码

五.#include

六.#include

七.#include

八.#include

九.#include

十.FILE*fp;

十一.char string(char c[]);//字符串处理

十二.char ch;

十三.char*operate[6]={"+","-","*","/","++","--"};

十四.char*note[4]={"//","/*","*/","\""};

十五.char

*symbol[31]={"%","$","^","&","_","#","<","<=","=",">",">=","<>","<<","==","!="," &&","||","!",

十六.",",";",":=",".","(",")","{","}","&&","||","!","()",">>"};

十七.char

*keyword[35]={"iostream.h","include","break","case","char","const","continue","def ault","do","double",

十八."else","enum","cin","float","for","goto","if","int","long","cout",

十九."return","short","signed","sizeof","static","struct","switch","typedef","printf",二十."union","unsigned","void","volatile","while","main"};

二十一.

二十二.int search(char searchstr[],int type)//符号匹配查找

二十三.{

二十四.int i;

二十五.switch(type)

二十六.{

二十七.case1:for(i=0;i<35;i++)

二十八.{

二十九.if(strcmp(keyword[i],searchstr)==0)

三十.return1;

三十一.

三十二.}

三十四.{

三十五.for(i=0;i<=5;i++)

三十六.{

三十七.if(strcmp(operate[i],searchstr)==0)三十八.return1;

三十九.}

四十.break;

四十一.}

四十二.case3:for(i=0;i<31;i++)

四十三.{

四十四.if(strcmp(symbol[i],searchstr)==0)

四十五.return1;

四十六.}break;

四十七.case4:for(i=0;i<=3;i++)

四十八.{

四十九.

五十.if(!strcmp(note[i],searchstr)&&i==3)

五十一.{

五十二.string(searchstr);

五十三.break;

五十四.}

五十五.else if(!strcmp(note[i],searchstr))

五十六.return1;

五十七.

五十八.}break;

五十九.}

六十.return0;

六十一.}

六十二.

六十三.char letter(char ch)//字母处理

六十四.{

六十五.int i=-1;

六十六.char letter[50];

六十七.while(isalnum(ch)||ch=='.')

六十八.{

六十九.letter[++i]=ch;

七十.ch=fgetc(fp);

七十一.}

七十二.letter[i+1]='\0';

七十三.if(search(letter,1))

七十四.{

七十五.cout<

相关文档
最新文档