资源下载地址:https://download.csdn.net/download/sheziqiong/86918774
资源下载地址:https://download.csdn.net/download/sheziqiong/86918774
使用java语言。
包含标识符id,关键字keyword,数字num,运算符operator,分界符separator以及注释doc的辨别.
包含空白字符的过滤。
包含一些非法输入的处理和注释出错的处理。
Input:stream of characters
Output:sequence of tokens
输入: i=2+1;
输出如下:
(id,i)
(operator,=)
(num,2)
(operator,+)
(num,1)
(separator,;)
Define some REs by yourself
Convert REs into NFAs
Merge these NFAs into a single NFA
Convert the NFA into a DFAo with minimum states
Programming based on the DFAo
输入为一般的以Java语言写成的.java文件对应的字符流文本。
不包含++,–,**,==二连运算符的判定。

关键字,运算符,分界符的集合如下:

FileIO类负责文件相关操作,包含读入输入字符流,清空输出文件,写入输出文件TypeCheck类负责识别token类型Analyzer类为核心类,继承了TypeCheck类,其中analyse()方法实现了词法分析,具体状态图参见,generate()方法将识别出的token格式化,打印并写回输出文件。
Start类为普通启动类,创建Analyzer实例,调用analyse()方法进行词法分析。
详见input.txt和output.txt
启动器代码Start.java加入一条赋值语句作为一个输入case:
package src;
/**
* @author Bourbon
* @date 2017/10/26
* @description 启动器
*/
public class Start {
public static void main(String[] args) {
int i = 2+1;
new Analyzer("./input.txt").analyse();
}
}
输出结果:
无法将两种注释的情况处理编入一般的运算符之中。
将’/’运算符当作特殊字符单独处理。
})
## Problems occurred and related solutions
- Problem:
无法将两种注释的情况处理编入一般的运算符之中。
- Solution:
将’/’运算符当作特殊字符单独处理。
#
```cpp
在这里插入代码片
资源下载地址:https://download.csdn.net/download/sheziqiong/86918774
资源下载地址:https://download.csdn.net/download/sheziqiong/86918774