实验目的与要求:
目的:通过实验,加深对文法及其分类的理解。
要求:
第一部分:文法的分类
输入:读入一个名为“g.in”,表示一个文法的文本文件。文件由n行组成,每行表示一个产生式,产生式是形如“Sa”的字符串,终结符由小写字母或数字表示,非终结符由大写字母表示,第一行的第一个非终结符为开始符号。
处理:对文法进行分类
输出:控制台输出,明确这是一个0/1/2/3型文法
第二部分:3型文法的推导
输入:第一部分实验的输入文件,并在最后面,增加一个字符串
处理:首先判断输入文法是否3型文法,如果是3型文法,再判断该文法能否推导生成给定字符串,若可以,给出推导过程。其它情况输出自由定义(可自由尝试0、1、2型文法的推导情况)
输出:控制台输出,给出给定字符串的推导过程(若存在)或其他说明信息。
方法、步骤:
要完成本实验,依据实验要求进行分解,需要完成的实验步骤是:
1. 如何设计、实现(或存储、处理)文法?
特别的,如果把文法设计为一个类,那么这个类的公有方法应该设计为哪些?
请采用面向对象的方法,对该类的数据和方法给出详细的解释。
请在这里,补充完善你使用何种数据结构存储文法,完成后,请删去这句话。
2. 如何判定一个文法是0、1、2、3型文法?
请在这里,补充完善你0、1、2、3型文法判断的设计实现思路,完成后,请删去这句话。
3. 针对3型文法,如何判断开始符号S能否推导出给定符号串a?
请在这里,补充完善你对推导的设计实现思路,完成后,请删去这句话。
4. 如果针对的是2型文法,前述3型文法的推导算法能否正常运行?如果不能,将可能出现什么问题?你将如何解决?
请在这里,写下你对该问题的思考、回答,完成后,请删去这句话。
实验过程及内容:
实验过程及内容,不要贴长篇代码,只能出现个别代码(截图)及其注释。关注编程过程。
例如,为了编程调试方便,你一开始时如何处理输入的,中间有做了什么修改变动,最后变成什么样?请在这里,分步骤,通过图片、文字、表格等多种形式,补充完善本实验的设计实现过程,完成后,请删去这句话。
实验结论:
1. 文法分类的实验结果
请截OJ上通过测试的截图进行说明。
2. 文法推导的实验结果。
请截OJ上通过测试的截图进行说明
心得体会:
除了实验的心得体会外,增加说明你对文法及其分类和文法推导的理解。