基于Python实现类高级语言的词法分析器

1, 需求分析 要求:阐述词法分析系统所要完成的功能 设计实现类高级语言的词法分析器,基本功能如下: 能识别以下几类单词: 标识符(由大小写字母

本文包含相关资料包-----> 点击直达获取<-------

1. 需求分析

要求:阐述词法分析系统所要完成的功能

设计实现类高级语言的词法分析器,基本功能如下:

  • 能识别以下几类单词:
  • 标识符(由大小写字母、数字以及下划线组成,但必须以字母或者下划线开头)

  • 关键字(① 类型关键字:整型、浮点型、布尔型、记录型;② 分支结构中的 if 和 else;③ 循环结构中的 do 和 while;④ 过程声明和调用中的关键字)

  • 运算符(① 算术运算符;② 关系运算符;③ 逻辑运算)

  • 界符(① 用于赋值语句的界符,如“=”;② 用于句子结尾的界符,如“;”;③ 用于数组表示的界符,如“[”和“]”;④ 用于浮点数表示的界符“.”)

  • 常数(无符号整数(含八进制和十六进制数)、浮点数(含科学计数法)、字符串常数等)

  • 注释(/ …… /形式)

  • 能够进行简单的错误处理,即识别出测试用例中的非法字符。程序在输出错误提示信息时,需要输出具体的错误类型(即词法错误)、出错的位置(源程序行号)以及相关的说明文字,其格式为:

Lexical error at Line [行号]: [说明文字].

说明文字的内容没有具体要求(例如:非法字符),但是错误类型和出错的行号一定要正确,因为这是判断输出错误提示信息是否正确的唯一标准。

  • 系统的输入形式:要求能够通过文件导入测试用例。测试用例要涵盖“实验内容”中列出的各类单词。

  • 系统的输出形式:打印输出测试用例对应的 token 序列 。

2. 文法设计

要求:对如下内容展开描述

  • 给出各类单词的词法规则描述(正则文法或正则表达式)

标识符:

[_ | [a-z]][\w*]

关键字:

c++ r'((auto){1}|(double){1}|(int){1}|(if){1}|' \ r'(#include){1}|(return){1}|(char){1}|(stdio\.h){1}|(const){1})'

运算符:

r'(\+\+|\+=|\+|--|-=|-|\*=|/=|/|%=|%)'

界符:

r'([,:\{}:)(<>])'

常数:

r'(\d+[.]?\d+)'

  • 各类单词的转换图

其余的单词转换图较为简单

常数:

3. 系统设计

要求:分为系统概要设计和系统详细设计。

  • 系统概要设计:给出必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块图等以及相应的文字说明。

功能模块:

  • 系统详细设计:对如下工作进行展开描述

核心数据结构的设计

使用 Python 的列表 list[]

主要功能函数说明

python def is_blank(self, index):判断是否是空白字符

python def skip_blank(self, index):跳过空白字符

python def is_keyword(self, value):判断是否是关键字

python def main(self):词法分析的主程序

程序核心部分的程序流程图

4. 系统实现及结果分析

要求:对如下内容展开描述。

  • 系统实现过程中遇到的问题;

系统对十六进制的数的识别没有考虑进去。

解决方法为在判断常数时如果判断该常数第一个数为 0 时,再判断其后的一个字母是否为 X,如果是,再判断后面的字符串是否为一连串的 0-9 或 A-F 组成,如果是,则认为该单词是常数。

  • 针对某测试程序输出其词法分析结果;

测试样例如下:

词法分析结果如下:

c++ <SHARP, #> <INCLUDE, include> <LT, <> <IDENTIFIER, studio.h> <GT, >> <STRUCT, struct> <IDENTIFIER, abc> <LP, {> <INT, int> <IDENTIFIER, a> <SEMICOLON, ;> <INT, int> <IDENTIFIER, b> <SEMICOLON, ;> <RP, }> <INT, int> <IDENTIFIER, c> <LM, [> <DIGIT_CONSTANT, 10> <RM, ]> <SEMICOLON, ;> <INT, int> <IDENTIFIER, main> <LL, (> <RL, )> <LP, {> <INT, int> <IDENTIFIER, a> <ASSIGN, => <DIGIT_CONSTANT, 1> <SEMICOLON, ;> <INT, int> <IDENTIFIER, b> <ASSIGN, => <DIGIT_CONSTANT, 0> <SEMICOLON, ;> <CHAR, char> <MUL, *> <IDENTIFIER, str> <ASSIGN, => <DOUBLE_QUOTE, "> <STRING_CONSTANT, String123> <DOUBLE_QUOTE, "> <SEMICOLON, ;> <INT, int> <IDENTIFIER, c> <LM, [> <DIGIT_CONSTANT, 0> <RM, ]> <ASSIGN, => <DIGIT_CONSTANT, 123> <SEMICOLON, ;> <INT, int> <IDENTIFIER, x> <ASSIGN, => <DIGIT_CONSTANT, 0x213> <SEMICOLON, ;> <FLOAT, float> <IDENTIFIER, floatnum> <ASSIGN, => <DIGIT_CONSTANT, 123.456> <SEMICOLON, ;> <FLOAT, float> <IDENTIFIER, floatnum_2> <ASSIGN, => <DIGIT_CONSTANT, 123> <SEMICOLON, ;> <INT, int> <IDENTIFIER, intnum> <ASSIGN, => <DIGIT_CONSTANT, 123> <SEMICOLON, ;> <IDENTIFIER, bool> <IDENTIFIER, f> <ASSIGN, => <IDENTIFIER, a> <ADDRESS, &> <ADDRESS, &> <IDENTIFIER, b> <SEMICOLON, ;> <IDENTIFIER, If> <LL, (> <DIGIT_CONSTANT, 6.4> <LET, <=> <DIGIT_CONSTANT, 1> <RL, )> <LP, {> <IDENTIFIER, printf> <LL, (> <DOUBLE_QUOTE, "> <STRING_CONSTANT, Yes\n> <DOUBLE_QUOTE, "> <RL, )> <SEMICOLON, ;> <RP, }> <RETURN, return> <DIGIT_CONSTANT, 0> <SEMICOLON, ;> <RP, }>

  • 输出针对此测试程序对应的词法错误报告;

该程序有一处错误,即

c++ float floatnum_2 = 123.;

此处的 float 型变量的格式有问题,小数点后面没有数字。

报错如下:

c++ float number error!

  • 对实验结果进行分析。

词法分析的结果大体上都是正确的,但对于&&并没有识别出来,而是识别成了两个&

参考文献

  • 基于领域本体和模板逻辑的中英双语问答系统的研究(广西师范大学·毛俊青)
  • 基于K-Means的分布式文本聚类系统的设计与实现(西安电子科技大学·马婵媛)
  • 基于词分布和深度残差网络的关系抽取方法研究(重庆邮电大学·王驰龙)
  • 基于领域文本大数据的快速分词系统的设计与实现(南京大学·陶德彬)
  • 基于领域本体和模板逻辑的中英双语问答系统的研究(广西师范大学·毛俊青)
  • 基于知识图谱的开放空间知识采集系统(中南民族大学·马荣香)
  • 基于语义聚类和加权TextRank的新闻关键词提取方法的研究与实现(北京邮电大学·刘德荣)
  • 基于知识图谱语义扩展的短文本主题建模研究(吉林大学·赵东伟)
  • 深度学习在社交网络文本分类中的应用研究(大连交通大学·方金朋)
  • 基于Spring Cloud的分布式语义分析挖掘平台中管理子系统的设计与实现(北京邮电大学·任聚才)
  • 面向中文产品评论的情感分析研究(西南大学·孙雪峰)
  • 面向中文产品评论的情感分析研究(西南大学·孙雪峰)
  • 深度学习在社交网络文本分类中的应用研究(大连交通大学·方金朋)
  • 基于K-Means的分布式文本聚类系统的设计与实现(西安电子科技大学·马婵媛)
  • 基于文本挖掘技术的人工智能领域文献统计分析(燕山大学·孟晓宇)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码工厂 ,原文地址:https://bishedaima.com/yuanma/36155.html

相关推荐

发表回复

登录后才能评论