**大学
编译原理实验报告
报 告
学生姓名 ***
学
号 ***
专业班级 ***
指导教师 ***
院 ****
学
完成时间 *年*月
1
目录
一.实验目的.......................................... 3
二. 实验内容........................................ 3
三. 实验要求........................................ 3
四. 程序运行截图................................ 4
五.关键程序清单.................................. 7
六.心得体会........................................ 21
七.参考文献........................................ 21
2
一.实验目的
通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的
综合应用能力,并通过实践达到对所学的知识进行验证。通过实验,使学生掌握词法分析的
实现技术,深入了解语法分析的实现技术及具体实现方法。将《编译原理》的相关理论运用
到软件开发中,提高学生的应用程序设计能力,提高分析问题、解决问题的能力。锻炼学生
的编程能力和逻辑思维能力,体会计算机编译器的奥妙之处。
二.实验内容
1.状态转换图
2.DFA 扫描
3.First 集,follow 集计算
三.实验要求
实验一:状态转换图
输入一串数据,利用状态转换图程序求出“关键字,标识符,整数,运算符,实数”。
实验二:DFA 扫描
打开一个编写好的源代码,利用 DFA 扫描程序删除多行注释,单行注释,多余的行,
多余的空格。
实验三:first 集,follow 集计算
输入一个不含左递归的文法,由此程序求出该文法的 first 集和 follow 集。
3
四.程序运行截图
实验一:状态转换图:
得到“关键字,标识符,整数,运算符,实数”
实验二:DFA 扫描
(1)打开源代码 1.txt,删除了注释及多余的空格
4
五.关键程序清单
实验一:状态转换图
#include
#include
#include
iskeyword(sd)
{
if(strcmp(sd,"auto")==0||strcmp(sd,"break")==0||strcmp(sd,"case")==0||strcm
p(sd,"char")==0||strcmp(sd,"if")==0||strcmp(sd,"else")==0||strcmp(sd,"while")==
0)
return 1;
else return 0;
} /*关键字列表*/
iscalcu(sd)
{
if(sd=='+'||sd=='-'||sd=='*'||sd=='/')
return 1;
else return 0;
}
/*运算符列表*/
void main()
{
char strs[254],sd[254];
int st,sw,i;
clrscr();
printf("Please input the string:\n");/*输入一个字符串*/
scanf("%s",strs);
st=0;
sw=strlen(strs);
while(stprintf("The keyword is %s\n",sd);/*输入字符串在关键字列表中*/
else
{
while(strs[st]!='\0'&&(isdigit(strs[st])||isalpha(strs[st])))
sd[i++]=strs[st++];
sd[i]='\0';
printf("The remank is %s\n",sd); /*不在关键字列表中的为标识符*/
}
}
/*实数算法*/
else if(isdigit(strs[st]))
{
i=0;
do sd[i++]=strs[st++];
while(isdigit(strs[st])&&(st