这是一个使用 JFlex 构建的简单的词法分析器(Scanner),用于识别一个小型、特定的 Java 语言子集。该项目的主要目的是演示如何定义词法规则、生成扫描器以及如何处理正确的 Token 和词法错误。
- Token 化:能够识别关键字 (
if
,for
,int
等)、标识符、整数字面量、字符串、操作符和分隔符。 - 错误处理:能够检测并报告在词法规则中未定义的非法字符,并指出其所在的行号和列号。
- 批量处理:程序会自动分析
src
目录下的多个预设测试文件。 - 清晰的输出:为每个 Token 生成一个包含词素、Token 类型等信息的格式化表格。
下面是项目关键文件和目录的说明:
felx-java/
│
├── src/ # 所有源代码和测试文件
│ ├── Main.java # 程序主入口,负责读取文件和驱动扫描器
│ ├── MyScanner.flex # 核心!JFlex的词法规范文件
│ ├── Scanner.java # <-- 由JFlex根据.flex文件自动生成,请勿手动修改!
│ ├── Token.java # 用于封装Token信息的数据类
│ ├── TokenType.java # 定义所有Token类型的枚举
│ ├── test_correct_1.txt # 正确语法的测试用例1
│ ├── test_correct_2.txt # 正确语法的测试用例2
│ ├── test_error_1.txt # 包含词法错误的测试用例1
│ └── test_error_2.txt # 包含词法错误的测试用例2
│
├── jflex.jar # JFlex库文件,用于生成Scanner
├── felx-java.iml # IntelliJ IDEA 项目文件
└── README.md # 本说明文件
- Java Development Kit (JDK) 11 或更高版本。
您有两种方式来运行此项目,具体取决于您的目标。
如果您只是想运行程序并查看分析结果,请按以下步骤操作。
-
打开终端 (命令行工具)。
-
进入项目根目录,即
felx-java
文件夹。cd path/to/your/project/felx-java
-
编译所有 Java 源文件。此命令会告诉编译器在
src
目录中寻找.java
文件并进行编译。javac src/*.java
编译成功后,
.class
文件会出现在src
目录中。 -
运行 Main 程序。此命令会告诉 Java 虚拟机 (
java
) 从src
目录加载类文件 (-cp src
) 并执行Main
类。java -cp src Main
之后,您将在控制台看到对所有 test_*.txt
文件的分析结果。
如果您修改了 MyScanner.flex
文件(例如,添加了新的关键字或操作符),则需要重新生成 Scanner.java
。
-
修改
MyScanner.flex
文件以更新您的词法规则。 -
打开终端并进入项目根目录 (
felx-java
)。 -
运行 JFlex 命令来生成新的
Scanner.java
文件。java -jar jflex.jar src/MyScanner.flex
注意: 此命令会覆盖
src/Scanner.java
文件。 -
重新编译并运行您的程序,步骤同 选项 A 的第 3 和第 4 步。
# 重新编译 javac src/*.java # 运行 java -cp src Main
下面是项目从准备到执行的完整流程。
下图展示了程序运行时主要对象之间的交互。
该 README 文件旨在为用户提供清晰的指导以便于使用和理解本项目。