前言
本人并没有学过编译原理,只是在网上粗略的看了一下教程,所以这个分析器写得不是很好。现在只写了词法分析器。语法分析器可能后续会写。只建议学习使用,不建议其他用途。
词法分析器
词法分析器(Lexer,也称为扫描器)是编译器或解释器的一部分,用于将输入的源代码字符串分解成一个个称为词法单元(Tokens)的小块。每个词法单元通常代表了源代码中的一个基本语法单元,例如关键字、标识符、操作符、常量等。词法分析是编译过程的第一个阶段,它的主要任务是将复杂的源代码字符串转换为容易处理的标记流。
词法分析器的原理
词法分析器的原理如下:
- 词法分析器从源代码字符串中读取一个词法单元
- 词法分析器将词法单元转换为标记流
词法分析器的实现
用一个 Position 类来表示词法单元的位置,它包含了词法单元的行号和列号。通过它来步进词法单元。调用类中的 next() 方法来获取下一个词法单元。用 DFA(有限自动机)对不同的词法单元进行判断。最终将词法单元转换为标记流。