Skip to content

Jraaay/LexParser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LexParser

这是一个 C 语言的词法分析器,有 C++和 Lex 两个版本。

题目

词法分析程序的设计与实现

实验内容:设计并实现 C 语言的词法分析程序,要求实现如下功能。

  • 可以识别出用 C 语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。
  • 可以识别并跳过源程序中的注释。
  • 可以统计源程序中的语句行数、各类单词的个数、以及字符总数,并输出统计结果。
  • 检査源程序中存在的词法错误,并报告错误所在的位置。
  • 对源程序中岀现的错误进行适当的恢复,使词法分析可以继续进行,对源程序进行一次扫描,即可检査并报告源程序中存在的所有词法错误。

C++ 版本

使用 Visual Studio C++ 2019 开发,对应项目文件为 LexParser\LexParser.vcxproj

用法

.\LexParser.exe <file_to_parse_name> [outfile_name]

支持情况

  • 标识符
a-z A-Z 0-9 _ 关键词
  • 注释
单行注释 多行注释
  • 运算符
> >> >= >>=
> >> >= >>=
< << <= <<=
< << <= <<=
! != = ==
/ /= * *=
% %= ^ ^=
| || |= ?
& && &=
+ += ++
- -= --
  • 常量
浮点数 整数 字符串 字符 科学计数法
  • 分界符
; , : . #
[ ] ( ) { } < >

Lex 版本

使用 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 _ 关键词
  • 注释
单行注释 多行注释
  • 运算符
> >> >= >>=
> >> >= >>=
< << <= <<=
< << <= <<=
! != = ==
/ /= * *=
% %= ^ ^=
| || |= ?
& && &=
+ += ++
- -= --
  • 常量
浮点数 整数 字符串 字符 科学计数法
二进制数 八进制数 十进制数 十六进制数
  • 分界符
; , : .
[ ] ( ) { } < >