c语言词法分析程序设计,C语言词法分析器设计与实现.doc

>? C语言词法分析器设计与实现

?

C语言词法分析器的设计与实现

一.实验目的

1.强化对系统软件综合工程实现能力、规划能力的训练;

2.加强对词法分析原理、方法和基本实现技术的理解;

二.实验内容

用C语言(或 C++ )作为宿主语言完成:

????其中具体要求:

1.使用DFA实现词法分析器的设计;

2.实现对C源程序中注释的过滤;

3.利用两对半缓冲区从文件中逐一读取单词;

4.词法分析结果属性字流存放在独立文件中;

5.统计源程序每行单词的个数和整个源文件单词个数;

6.具有报告词法错误和出错位置(源程序行号和该行字符)的功能;

7.屏幕输出属性字流,每次显示10行,按ESC可中途退出,每行有统计信息,最后有词法分析的全部信息,包括各种属性单词的个数。

三.实验验收与评分要求

???? 1.编写C语言词法分析器的源程序并调试通过;

2.通过测试程序的验收 (测试程序名称:Test-Lexcial);

? 3.提交简明扼要的书面实验报告。内容包括:FA设计;源程序主要函数功能;主要数据结构设计。

四. 验收测试用例

1. 测试用例一:统一验收测试用例;

#include

#include

char buf[100],str[15];

int countdef=0;

FILE *fpmiddle;

struct define

{

char with[30];

char des[30];

char filename[15];

}def[30];

char* getFileName()

{

int i=0,k=0;

for(i=0;buf[i]!='

i++;

while(buf[i]!='>'&&i<30&&buf[i]!='\0')

str[k++]=buf[i++];

str[k]='\0';

puts(str);

return str;

}

long readline(FILE *fpt)

{

if(fgets(buf,100,fpt)==NULL)

{

puts(buf);

printf("readline error or reach file end!\n");

return 0;

}

puts(buf);

return (long)(strlen(buf)+1);

}

void writeline()

{

fprintf(fpmiddle,"%s",buf);

}

void processDefine(char *filename)

{

int i=8,j=0;

while((def[countdef].des[i-8]=buf[i])!=' ') i++;

def[countdef].des[i-8]='\0';

while((def[countdef].with[j]=buf[i])!='\0')

{

i++;

j++;

}

def[countdef].with[j-1]='\0';

strcpy(def[countdef].filename,filename);

countdef++;

}

long comment(FILE *fpt)

{

char prechar=buf[0],ch='*';

int i=0,j=0;

for(i=0;buf[i]!='\0'&&!(buf[i]=='/'&&buf[i+1]=='*');i++);

j=i;

buf[i]='\0';

if(i==strlen(buf)) return 0L;

do

{

prechar=ch;

if((ch=fgetc(fpt))==EOF)

{

printf(" in comment, end");

exit(0);

}

i++;

}while(!(prechar=='*'&&ch=='/'));

return (long)(i-j+1);

}

isin(char *p)

{

int i=0,j=0,temp=0;

while(temp!=strlen(buf))

{

while(buf[i]!='\0'&&buf[i]!=p[0])

i++;

temp=i;

while(buf[i]==p[j]&&p[j]!='\0'&&buf[i]!='\0')

{

i++;

j++;

}

if((i-temp)==strlen(p)) return temp;

i=te

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值