1. 需求分析
要求:阐述词法分析系统所要完成的功能
设计实现类高级语言的词法分析器,基本功能如下:
Lexical error at Line [行号]: [说明文字].
说明文字的内容没有具体要求(例如:非法字符),但是错误类型和出错的行号一定要正确,因为这是判断输出错误提示信息是否正确的唯一标准。
2. 文法设计
要求:对如下内容展开描述
- 给出各类单词的词法规则描述(正则文法或正则表达式)
标识符:
[_ | [a-z]][\w*]
关键字:
r'((auto){1}|(double){1}|(int){1}|(if){1}|' \r'(#include){1}|(return){1}|(char){1}|(stdio\.h){1}|(const){1})'
运算符:
r'(\+\+|\+=|\+|--|-=|-|\*=|/=|/|%=|%)'
界符:
r&#39;([,:\{}:)(<>])&#39;
常数&#xff1a;
r&#39;(\d&#43;[.]?\d&#43;)&#39;
其余的单词转换图较为简单
常数&#xff1a;
![在这里插入图片描述](https://img8.php1.cn/3cdc5/15bb8/9f3/90f597a77ff60fc0.png)
3. 系统设计
要求&#xff1a;分为系统概要设计和系统详细设计。
- 系统概要设计&#xff1a;给出必要的系统宏观层面设计图&#xff0c;如系统框架图、数据流图、功能模块图等以及相应的文字说明。
功能模块&#xff1a;
![在这里插入图片描述](https://img8.php1.cn/3cdc5/15bb8/9f3/abc987a4d98f4b94.png)
- 系统详细设计&#xff1a;对如下工作进行展开描述
核心数据结构的设计
使用 Python 的列表 list[]
主要功能函数说明
def is_blank(self, index):判断是否是空白字符
def skip_blank(self, index):跳过空白字符
def is_keyword(self, value):判断是否是关键字
def main(self):词法分析的主程序
程序核心部分的程序流程图
![在这里插入图片描述](https://img8.php1.cn/3cdc5/15bb8/9f3/3e7a76ce09725cbe.png#pic_center)
4. 系统实现及结果分析
要求&#xff1a;对如下内容展开描述。
系统对十六进制的数的识别没有考虑进去。
解决方法为在判断常数时如果判断该常数第一个数为 0 时&#xff0c;再判断其后的一个字母是否为 X&#xff0c;如果是&#xff0c;再判断后面的字符串是否为一连串的 0-9 或 A-F 组成&#xff0c;如果是&#xff0c;则认为该单词是常数。
测试样例如下&#xff1a;
![在这里插入图片描述](https://img8.php1.cn/3cdc5/15bb8/9f3/46ca717c8d4f2927.png#pic_center)
词法分析的结果大体上都是正确的&#xff0c;但对于&&并没有识别出来&#xff0c;而是识别成了两个&
![在这里插入图片描述](https://img8.php1.cn/3cdc5/15bb8/9f3/0ca90de8629bdbac.png#pic_center)