(1)词法分析概述(主要介绍词法分析的主要功能)
1. 将正规式转化为NFA
2. 将NFA转化为DFA
3. 将DFA转化为最小DFA
4. 模拟DFA
5. 识别源程序
6. 错误信息判断
(2)?采用的技术及平台安装(主要介绍采用了什么开发语言,如何部署软件运行环境,简要说明不超过300字)
本实验采用Java语言编写,IDE为Eclipse Jee Oxygen,部署时直接下载安装对应软件即可,Java语言的配置需要在安装相应文件后,设置环境变量和系统变量。
(3)?算法分析(主要介绍采用的算法及数据结构,以及如何用数据结构实现算法,包含:数据结构和算法分析两部分内容,在对应算法分析部分,必须给出示例说明算法)
1.?栈,优先级识别正规式
数据结构:使用栈,分为运算符栈和字符栈
算法:将‘#’符号压入运算符栈,当输入表达式的字符坐标不等于表达式的长度或者运算符栈顶不等于‘#’时,做循环,在循环体中,判断表达式的各个字符,若不是运算符则压入字符栈,若是运算符,则与运算符栈的栈顶元素进行优先级比较,若栈顶元素优先级低,将运算符压栈,若相等,运算符栈弹栈,若栈顶元素优先级高,则弹出运算符栈,以及连续弹出两次字符栈,将上述弹出的两个字符和一个运算符作为一个运算组。
2.?Thompson算法
数据结构:构造节点和弧的结构来表示NFA,构造的结果类似图。通过结点和弧可以遍历整个图;NFA栈,用来保存中间的NFA结果。
算法:在通过优先级判断后得到的表达式单元,比如AB|(A或B)这样的正规式后,判断运算符是 | ,则调用事先编写好的五个构造函数(分别是或运算,连接运算,闭包运算,单个字符,ε运算)中的或运算,构造A|B的NFA,同时将构造好的NFA压进NFA栈,这一过程实际就是将NFA构造过程和表达式优先级判断过程同步。不断重复过程,最终得到的NFA栈的栈顶元素就是完整的NFA。
3.?最小子集法
数据结构:定义了表示DFA的矩阵和 表示状态集合的结构。
算法:首先定义了ε闭包和smove函数,设计递归的部分用栈来模拟递归。然后用表示状态集合的数据结构表示ε闭包+smove操作所得到的的状态集合,在运算过程中对于新的状态标号,并在后续对新的状态进行对应字符的smove+ε闭包运算,直到不再产生新状态为止。完成上述运算后,根据表示的新状态号和对应的字符,构造DFA矩阵。
4.?最小DFA算法
数据结构:定义了表示一个划分的数据结构,以及记录可以合并状态(即同属一个划分的两个状态)的集合。
算法