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

python解释器实现及其嵌入式应用:1到6章总结

通过1到6部分的学习,实现了一个能进行四则运算,具有优先级,支持括号的计算器。能够满足一般计算需求的计算器。内容概要巴科斯范式表示grammar。基本知识,以及如何将优先级信息以BN

通过1到6部分的学习,实现了一个能进行四则运算,具有优先级,支持括号的计算器。能够满足一般计
算需求的计算器。

内容概要

  1. 巴科斯范式表示grammar。基本知识,以及如何将优先级信息以BNF形式表示。
  2. syntax diagram 展示识别流程。等效于BNF,BNF可以理解成文本化的syntax diagram。
  3. BNF到python代码的转换

体会

这六部分内容比较简单,基本上前一部分的练习做完后,下一部分内容就解决了大部分了。

截止目前为止,实现的这个计算器有一个bug:

host > (1+2)
3
host > (1+2))
3
host > (1+2))+3
3

也就是说当又括号数量大于左括号时,并不会检测到语法错误,相关代码实现如下。

...
elif self.current_token.type == LPAREN:
self.eat(LPAREN)
result = self.expr()
self.eat(RPAREN)
return result

这个问题应该算是BNF设计的问题,因为代码和BNF是完全对应的,从BNF中就能看到只是保证喂了足够
多的右括号而已。

提供一种代码修改方案如下:

self.paren_pairnum = 0
...
elif self.current_token.type == LPAREN:
self.eat(LPAREN)
self.paren_pairnum += 1
result = self.expr()
self.eat(RPAREN)
self.paren_pairnum -= 1
if self.paren_pairnum == 0 and self.current_token.type == RPAREN:
self.error()
return result

虽然修改代码能够解决,但是我觉得这不是一种state-of-art的解决方式,还是要从BNF的设计上去考察。


推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 标题: ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 单点登录(vue) 的实现及原理解析
    本文主要介绍了单点登录(vue) 的实现及原理解析。单点登录是指一个账号可以在多个系统中登录的功能,通过点击系统图标进入其他系统,无需重复登录流程。文章详细解释了如何获取返回的数据、前端如何处理token、后台如何实现登录功能以及重定向到前端页面的地址等流程。前端工作包括开发一个新页面来接收后台返回的地址并处理token。通过token进行通信,实现系统首页的重定向。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
author-avatar
骑单车追梦的小男孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有