C语言标识符识别的DFA,熟悉开发环境——C标识符词法识别实验报告.doc

熟悉开发环境——C标识符词法识别实验报告

大连民族学院

计算机科学与工程学院实验报告

实验题目: C标识符词法识别

课程名称: 编译原理

实验类型:□演示性 □验证性 □操作性 □设计性 □综合性

专业:计算机科学与技术班级:104 姓名:张家琪学号:2010081427

实验日期:2012年 11 月 0 3日 实验地点:多媒体实验室

实验学时: 实验成绩:

指导教师签字: 2012年 11月 03日

实验报告正文部分(具体要求详见实验报告格式要求)

一、总体思想

1)实验目的

设计编制并调试一个C标识符词法识别程序,加深对构造词法分析器的原理和技术理解与应用。

2)实验要求

针对C语言的标识符构成的词法特点——由数字、字母、下划线构成且首字符不可为数字,运用恰当的词法分析技术线路,设计和实现C标识符词法识别程序。

语言选择:C语言

平台选择:Linux/Windows

技术线路( 任选其一)

正规式→NFA→DFA→min DFA→程序设计

正规文法→NFA→DFA→min DFA→程序设计

识别程序输出结果存入到磁盘文件中

具有出错处理功能

二、C标识符词法识别程序详细设计

算法构造思想

将DFA以状态转换图的形式表现

将每个结点状态及其相应动作设计成一段程序,然后按照DFA逻辑关系将各结点程序连结

C标识符正规式(正规文法)构造

l=a/…/z/A/…/Z

d=0/…/9

e=l(l/d)*

“正规式(正规文法)→NFA” 构造

“NFA→DFA” 构造

ld{S} T1{A,B,Z} T2——{A,B,Z} T2{B,Z} T3{B,Z} T3{B,Z} T3{B,Z} T3{B,Z} T3

重命名

ldT1T2—T2T3T3T3T3T3

“DFA→min DFA” 构造

构造非终子集I1={T1 }终子集 I2={T2,T3}

分割I2

I2 输入l T2,T3(I2输入d T2,T3(I2 所以有T2=T3

设置I1=S, I2=Z

“min DFA→程序设计” 构造

getChar( );

while (isLetter( ) || isDigit( ))

getChar( );

程序流程图设计

三、?关键代码

#include

#include

#include

void main()

{

printf("请输入:");

char test[20];

scanf("%s",test);

char t=test[0];

int j=0;

if(!isdigit(t))

{

for(int i=0;i

{

if((test[i]>'a'&&test[i]'A')||isdigit(test[i])||test[i]=='_')

continue;

else if(test[i]=='#')

{

if(i!=strlen(test)-1||strlen(test)==1)

j=1;

}

else

j=1;

}

}

else

j=1;

if(j==1)

{

printf("抱歉,非法字符哦");

}

else

{

printf("恭喜你!合法的呢");

}

}四、实验体会与收获

通过这次试验我学会了怎么画图,还有简单的设计编制,可以调试一个C标识符词法识别程序,并且加深对构造词法分析器的原理和技术理解与应用。

5

d,l

Z

S

其它

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值