这是一个 C 语言的词法分析器,有 C++和 Lex 两个版本。
词法分析程序的设计与实现
实验内容:设计并实现 C 语言的词法分析程序,要求实现如下功能。
- 可以识别出用 C 语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。
- 可以识别并跳过源程序中的注释。
- 可以统计源程序中的语句行数、各类单词的个数、以及字符总数,并输出统计结果。
- 检査源程序中存在的词法错误,并报告错误所在的位置。
- 对源程序中岀现的错误进行适当的恢复,使词法分析可以继续进行,对源程序进行一次扫描,即可检査并报告源程序中存在的所有词法错误。
使用 Visual Studio C++ 2019 开发,对应项目文件为
LexParser\LexParser.vcxproj
.\LexParser.exe <file_to_parse_name> [outfile_name]
- 标识符
a-z | A-Z | 0-9 | _ | 关键词 |
- 注释
单行注释 | 多行注释 |
- 运算符
> | >> | >= | >>= |
> | >> | >= | >>= |
< | << | <= | <<= |
< | << | <= | <<= |
! | != | = | == |
/ | /= | * | *= |
% | %= | ^ | ^= |
| | || | |= | ? |
& | && | &= | |
+ | += | ++ | |
- | -= | -- |
- 常量
浮点数 | 整数 | 字符串 | 字符 | 科学计数法 |
- 分界符
; | , | : | . | # |
[ ] | ( ) | { } | < > |
使用 Lex 语言开发,工具为 Flex,对应项目为
LexParser_By_Lex\LexParser.l
,生成的 C 文件为LexParser_By_Lex\lex.yy.c
.\LexParser.exe < <file_to_parse_name> > [outfile_name]
- 标识符
a-z | A-Z | 0-9 | _ | 关键词 |
- 注释
单行注释 | 多行注释 |
- 运算符
> | >> | >= | >>= |
> | >> | >= | >>= |
< | << | <= | <<= |
< | << | <= | <<= |
! | != | = | == |
/ | /= | * | *= |
% | %= | ^ | ^= |
| | || | |= | ? |
& | && | &= | |
+ | += | ++ | |
- | -= | -- |
- 常量
浮点数 | 整数 | 字符串 | 字符 | 科学计数法 |
二进制数 | 八进制数 | 十进制数 | 十六进制数 |
- 分界符
; | , | : | . |
[ ] | ( ) | { } | < > |