热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

  • 能识别以下几类单词:

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

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

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

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

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

    • 注释(/……/形式)

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

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

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

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

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


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;
在这里插入图片描述

3. 系统设计

要求&#xff1a;分为系统概要设计和系统详细设计。

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

功能模块&#xff1a;

在这里插入图片描述

  • 系统详细设计&#xff1a;对如下工作进行展开描述

核心数据结构的设计

使用 Python 的列表 list[]

主要功能函数说明

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

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

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

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

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

在这里插入图片描述

4. 系统实现及结果分析

要求&#xff1a;对如下内容展开描述。

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

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

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

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

测试样例如下&#xff1a;

在这里插入图片描述

  • 对实验结果进行分析。

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

在这里插入图片描述


推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
author-avatar
Jenny821010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有