1、(1)研究性学习专题一 字母 字母 数字 数字 + * ; () 双字符分界符=斜竖* = : /该语言的保留字 :begin end if then else for do while and or not 设计说明 (1)该语言大小写不敏感;(2)字母为a-z A-Z,数字为0-9;(3)可以对上述文法进行扩充和改造;(4) /*/为程序的注释部分。(2)研究性学习专题二GE: ETE EATE| TFT TMFT| F (E)|i A+|- M*|/设计说明 终结符号i为用户定义的简单变量,即标识符的定义。二 实验分析过程词法分析程序功能描述:根据上述正则文法,输入一串字符串,输出一串二
2、元式序列组成的中间文件,在实现的过程中,能发现输入串中的错误。语法分析程序功能描述:根据词法分析输出的二元式序列,对二元式序列进行判定,时候满足语法的要求,若满足,则输出结果为正确,反之,为错误。主要数据结构: 用TokenBean类存储数字,标识符,保留字 的类别,表示,和识别名 public class TokenBean String name; String code; int kind; 用ArrayList来装TokenBean类程序结构描述:(1) 词法分析过程用到的主要函数 public boolean isNumber(char ch)/判断输入字符是否为整数public b
3、oolean isAlph(char ch) /判断输入字符是否为字母private void isKey(String str)/ 判断str是关键字还是标识符public void excute(String s) /对字符串s 进行分析,得出二元式(2) 语法分析过程用到的主要函数 public boolean ipresent(int kind)/识别保留字,标识符,整数 以下是判断函数,入口为E() 若E为真,则二元式序列满足语法分析 private boolean E() / ETE private boolean E1() / EATE| private boolean A()
4、/A+|- private boolean T() / TFT private boolean T1() / TMFT| private boolean M() /M*|/ private boolean F() /F (E)|i流程图 (1) 词法分析程序执行图:(2 )语法分析程序流程图:三 验结果及分析正确实例: a + b c * d(1)词法分析过程 输入: 字符串输出: 二元式序列 并可以保存二元式序列(2)语法分析过程对二元式序列进行判定 ,给出的例题是正确的,所以结果为true错误实例分析:(a + b输入:对二元式序列进行判定 ,给出的例题是错误的,所以结果为false在出错区里面报错四 实验总结编程的过程中,遇到的难点:在实现的过程中,对string类的不了解,从char 转换到string的过程中,出现错误。对程序的整体框架在开始的时候,考虑不周详,尤其是对while循环条件设置,通过不断地反复调试,能基本上实现词法分析和语法分析的功能。收获:能把用户图形界面和编程较好的实现在一起。