/lexer

多种实现方法的词法分析器

Primary LanguageJava

#词法分析程序

##词法分析程序一般有

###普通代码实现 这种方法通过直接读取字符,然后对字符进行分析。分析一些简单的方法时,这种方法比较实用,但是对于比较复杂的语法,常常 需要大量的标记来进行辅助识别。比如注释,两个字符的运算符等等。(示例程序见lexer1)

###基于状态转换图(DFA) 这种方法解决了使用普通代码实现出现的大量标记,只使用一个状态作为标记,然后通过状态的改变,进行分析词法。(示例程序见lexer2)

###DFA+状态转换表 这种方法跟上一种方法机制是一样的。不过上一种方法通常需要大量且冗长的switch,本方法是对其进行的改进,去掉冗长的switch,转而以 状态转换表代替。只需要循环遍历当前状态下每个字符的状态,然后每次判断是否到了无后续状态即可,然后对其状态进行分析,即可分析到所要的token。(示例程序见lexer3)

###NFA 这种方法,通常是将NFA转换成对应的DFA,然后再进行判断。(示例程序见lexer4,示例程序正更新中)

###模拟NFA 与DFA类似,每次都循环遍历当前状态下所对应字符的状态,然后最终判断有没有存在接受状态。(NFA模拟判断一个简单的正则,见lexer5)

###编写正则表达式,转成成NFA (待更新)