基于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://m.bishedaima.com/yuanma/36155.html

相关推荐

  • 基于Java的出租车计价器设计与实现

    基于Java的出租车计价器设计与实现 摘 要 在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生,但当时在全国没有一家企业能够生产
    2024年05月14日
    3 1 2
  • 多功能美颜 Web 应用

    多功能美颜 Web 应用 第一部分引言 一,编写目的 编写本说明书的目的是为了准确阐述项目概要设计结构,本概要设计说明的作者是【巧倩美颜】项目组
    2024年05月14日
    4 1 2
  • python 打造贪吃蛇超详细教程

    python 打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下 python,听说 pygame 挺好玩的,今天就在家研究一下, 弄了个贪吃蛇出来
    2024年05月14日
    2 1 1
  • 基于Python实现的新闻网络爬虫程序

    基于Python实现的新闻网络爬虫程序 1,简介 1,1 引用术语与缩写解释 缩写,术语 解 释 Python 一种简洁而强大的解释型脚本语言 pyodbc Python下的ODBC数据库访问组件 SQLAlchemy Python下的ORM数据访问组件 pywin32 Python下的Win32接口访问组件 requests Python下的Web访问组件 Pillow Python下的图像处理组件 解释型语言 无需编译源码可敏捷部署并执行的语言 IOC 控制反转
    2024年05月14日
    4 1 2
  • 基于Python的信息检索课程设计

    基于Python的信息检索课程设计 sdu视点新闻 全站爬虫爬取+索引构建+搜索引擎查询练习程序 爬虫功能使用Python的scrapy库实现
    2024年05月14日
    2 1 1
  • 利用 Python 实现 KNN 算法

    利用 Python 实现 KNN 算法 利用 Python 实现 KNN 算法,并采用所写程序解决如下问题【K值可根据经验规则确定】: 纸巾的品质好坏可由两个变量决定
    2024年05月14日
    1 1 1
  • 基于Python实现书店销售管理系统

    书店销售管理管理子系统 一,设 计 总 说 明 现在社会随着计算机技术迅速发展与技术的逐渐成熟,信息技术已经使人们的生活发生深刻的变化,生活中的各种服务系统也使人们在生活中的联系日常销售活动方式发生了很大的变化
    2024年05月14日
    6 1 1
  • java+jsp+servlet+mysql在线教学答疑系统

    这是一个🔥🔥jsp+servlet+mysql在线教学答疑系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 在线教学开发技术栈为JSP项目
    2024年05月23日
    4 1 1
  • 基于MFC实现的WEB浏览器

    基于MFC实现的WEB浏览器 一,系统设计 1,1 总体设计 本次课程设计所实现的 Web 浏览器首先要实现设计要求中的功能,要有友好的界面,能正常的浏览网页
    2024年05月14日
    2 1 1
  • 基于 Python 制作的炸弹人小游戏

    基于 Python 制作的炸弹人小游戏 导语 T_T 月末了才发现这个月就没写几篇文章,愧疚之下,决定更下正常而言每月都会出的 Python 制作小游戏系列
    2024年05月14日
    7 1 1

发表回复

登录后才能评论