西安邮电大学编译原理LL文法分析器实验(java)
《编译原理》实验报告
题目: 语法分析器的制作
学生姓名:
班 级: 软件1202
学 号:
指导教师:
成 绩:
西安邮电大学计算机学院
2015 年 6 月 7 日
一:实验目的
熟悉语法分析的过程;
理解相关文法的步骤;
熟悉First集和Follow集生成
二:实验要求
对于给定的文法,试编写调试一个语法分析程序:
要求和提示:
可选择一种你感兴趣的语法分析方法(LL(1) 、算符优先、递归下降、SLR(1)等)作为编制语法分析程序的依据。
对于所选定的分析方法,如有需要,应选择一种合适的数据结构,以构造所给文法的机内表示。
能进行分析过程模拟。如输入一个句子,能输出与句子对应的语法树,能对语法树生成过程进行模拟;能够输出分析过程每一步符号栈的变化情况。
设计一个由给定文法生成First集和Follow集并进行简化的算法动态模拟。
三:实验过程
1:文法:
E->TE’
E’->+TE’|ε
T->FT’
T’->*FT’|ε
F->(E)|i:
2程序描述(LL(1)文法)
本程序是基于已构建好的某一个语法的预测分析表来对用户的输入字符串进行分析,判断输入的字符串是否属于该文法的句子。
基本实现思想:接收用户输入的字符串(字符串以“#”表示结束)后,对用做分析栈的一维数组和存放分析表的二维数组进行初始化。然后取出分析栈的栈顶字符,判断是否为终结符,若为终结符则判断是否为“#”且与当前输入符号一样,若是则语法分析结束,输入的字符串为文法的一个句子,否则出错若不为“#”且与当前输入符号一样则将栈顶符号出栈,当前输入符号从输入字符串中除去,进入下一个字符的分析。若不为“#”且不与当前输入符号一样,则出错。
3:流程图
4:该文法的预测分析表为:
四:实验结果
1、显示预测分析表,提示用户输入字符串
2、输入的字符串为正确的句子:
3、输入的字符串中包含了不属于终结符集的字符
4、输入的字符串不是该文法能推导出来的句子
五:实验心得
通过本次实验基本掌握了语法分析的原理和LL(1)语法分析方法,以及预测分析表的构造;进一步熟悉了语法分析的详细过程。通过编写程序进一步复习巩固了java语言和数据结构的相关知识,尤其是加深了对栈相关知识的印象;在编程过程中遇到了很多基础性问题,通过不断的查阅课本,最终解决了问题,但程序仍然存在很多值得改进和完善的地方,这就提醒我们在以后的学习过程当中应该及时复习巩固以前学过的相关知识。