熟悉开发环境——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
其它