北邮编译原理-词法分析文档和程序

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

实验报告

班级:14

姓名: oneseven

学号:

一.题目:词法分析程序设计与实现

*

二.实验内容:设计并实现 C 语言的词法分析程序,要求如下。

(1) 可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。

(2) 可以识别并读取源程序中的注释。

(3) 可以统计源程序中的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计结果。

(4) 检查源程序中存在的非法字符错误,并可以报告错误所在的行列位置。

三.实现要求:采用C/C++作为实现语言,手工编写词法分析程序。

四.实现功能:基本完成了实验内容中要求的所有功能。(1)识别出源程序中的每个单词符号,并以记号的形式输出每个单词符号(2)识别并读取源程序中的注释(3) 统计源程序中的语句行数、单词个数和字符个数(4) 检查源程序中存在的非法字符错误,并可以报告错误所在的行列位置。

注:本程序未把注释中的单词符号,“”中的单词符号统计在单词个数中。单词个数只包括了标示符,关键字,无符号数。

五.实验原理:

1.词法分析程序的功能:

输入源程序,输出单词符号的记号形式,如图所示:

>

源程序词法分析器单词符号的记号形式

词法分析器

2.处理过程:每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完毕,并形成相应的单词串形式的源程序。

六.代码

#include

#include

#include

#include

using namespace std;

string keyword[32]={"auto","break","case","char","const", .'z':

case 'A'...'Z':

case '_':

word++;

while(isalpha(c)||isdigit(c)||c=='_')

{

str+=c;

get();

}

if(c=='@'||c==''||c=='$'||c=='#')

{

int tag=column;

while(isalpha(c)||isdigit(c)||c=='_'||c=='@'||c==''||c=='$'||c=='#') {

str+=c;

get();

}

outf<

"<

str="";

break;

*

}

if(find_key(str))

{

outf<

str="";

}

else

{

}

outf<

str="";

}

break;

case '0'...'9':

word++;

while(isdigit(c)||c=='.'||c=='e'||c=='E')

{

:

str+=c;

if(c=='e'||c=='E')

{

get();

str+=c;

}

get();

}

/

if(isalpha(c))

{

int tag=column;

while(isalpha(c)||c=='_'||isdigit(c)||c=='@'||c==''||c=='$'||c=='#') {

str+=c;

get();

}

;

outf<

"<

str="";

break;

}

outf<

str="";

break;

case'>':

get();

if(c=='=')

outf<="<

else if(c=='>')

outf<>"<

else

{

outf<"<

break;

}

get();

break;

case'<':

get();

if(c=='=')

outf<

else if(c=='<')

outf<

else

{

outf<

}

get();

~

break;

case'=':

get();

if(c=='=')

outf<

else

{

outf<

break;

相关文档
最新文档