基于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

相关推荐

  • 基于python实现的小区停车数据分析

    某小区停车数据分析 核心内容:处理大量excel表格数据,数据可视化 一,问题描述 现有2018年9月的某小区停车数据,如下图, 30共30天的excel表格
    2024年05月14日
    2 1 2
  • 基于Java Web的投票管理系统

    基于Java Web的投票管理系统 摘 要 相较于传统投票方式,在线投票是任何一-次商演(时间短,影响范围小),电视(投入大,效果不明显)或者户外广告(不能快速吸引消费者眼球)在投入产出效率上都难以企及的
    2024年05月14日
    3 1 1
  • 基于python的安全即时通讯系统

    Uchat——基于 python 的安全即时通讯系统 目的 设计完成简易的安全即时通讯系统,实现类似于 QQ 的聊天软件; 需求分析 功能需求 聊天客户端 注册:用户与集中服务器通信完成注册
    2024年05月14日
    27 1 2
  • 算法合成之Python

    1000 研究代码语言功能分类方式,探索代码推荐过程中的方法,近年来新出现的语言越来越友好,有越来越多新的特性减少开发时间与人力成本,但是代码仍然需要程序员用专门的语言手工精确地编写
    2024年05月14日
    2 1 1
  • 基于Python的Django框架实现的人物信息检索系统

    基于Python的Django框架实现的人物信息检索系统 1 简介 这是一个利用Django搭建的一个人物信息检索系统,大约从Wikipedia爬取了10000 个人物信息
    2024年05月14日
    8 1 2
  • 基于SSM和MySQL的新闻博客管理系统的设计与实现

    基于SSM和MySQL的新闻博客管理系统的设计与实现 摘 要 博客英文名称为BLOG,是web log的缩写,简单翻译成中文就是网络日志,它是1972年由美国的Jorn Barger提出的
    2024年05月14日
    17 1 4
  • 基于SpringBoot框架的网络海鲜市场系统

    这是一套采用Java语言构建的🔥🔥SpringBoot为核心的网上海鲜市场平台源代码,该项目运用了SpringBoot框架和Vue技术,开发工具为Idea或Eclipse
    2024年05月23日
    10 1 1
  • 基于JSP和Sql Server实现的美食网

    基于JSP和Sql Server实现的美食网 摘 要 本论文阐述了整个美食网的功能及实现,实现了从菜品管理,名店加盟,到后台管理实现,留言处理,再到系统管理
    2024年05月14日
    33 1 6
  • 基于jsp+servlet+mysql的图书管理系统

    Book-management-jsp 基于jsp+servlet+mysql的图书管理系统 参考文献 基于RBAC的SSH架构下的图书管理应用研究(大连理工大学·姜楠) 高校图书管理系统的设计与实现(东北大学·黄鑫) 复旦大学数字图书馆个人图书管理系统的设计与实现(电子科技大学·陆卫国) 图书综合管理系统(吉林大学·王宇) 宁波职业技术学院图书管理系统分析与设计(云南大学·赵顺勇) 大同实验小学图书馆借还系统的设计与实现(电子科技大学·王洪宇) 山西电大图书管理信息系统的设计与实现(北京工业大学·李莹) 山西电大图书管理信息系统的设计与实现(北京工业大学·李莹) 山西电大图书管理信息系统的设计与实现(北京工业大学·李莹) 医疗卫生图书网的设计与实现(电子科技大学·张占平) 基于Web的书刊进销存系统的设计与实现(大连理工大学·王宁) 基于JSP/Servlet的三层式网上书店的研究与实现(吉林大学·郭小雪) 基于RBAC的SSH架构下的图书管理应用研究(大连理工大学·姜楠) 基于B/S架构的网上书店系统的设计与实现(电子科技大学·陈云英) 基于
    2024年05月14日
    26 1 3
  • python爬取双色球数据更新及数据库使用

    python爬取双色球数据更新及数据库使用 解析网站并获取数据 python # 彩票数据所在的url url = 'http://datachart
    2024年05月14日
    3 1 2

发表回复

登录后才能评论