代码统计程序的设计与实现
1. 统计结果输出函数
统计结果会在两个位置输出,一是每行开头,二是文件末尾。为此定义了两个函数来输出这些统计信息:
static void bc_line_start(void) {
printf("{%-2d ", bc_cur_level);
}
static void bc_eof(void) {
printf("Maximum nesting of {} : %d\n", bc_max_level);
}
2. 各子模块介绍
- 括号计数器子模块(pc) :该子模块与花括号计数器子模块非常相似,实际上是通过复制花括号计数器子模块并进行一些简单编辑创建的。或许可以将括号计数器子模块和花括号计数器子模块合并为一个使用参数来指定统计内容的子模块。
- 注释计数器子模块(cc) :在这些函数中,会跟踪包含注释的行、包含代码的行、同时包含两者的行以及不包含任何内容的行。结果会在文件末尾输出。
3. do_file 过程
do_file 过程会逐个读取文件中的每个标记,并将每个标记发送给每个统计类的 take_token 例程:
while (1) {
cur_token = next_token();
lc_take_token(cur_token);
pc_take_token(cur_t