热门标签 | 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的设计上去考察。


推荐阅读
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 本文探讨了Python 3.6中引入的`secrets`模块,该模块专为生成高质量的加密随机数而设计,旨在提升应用程序中的机密管理和安全性。通过使用`secrets`模块,开发者可以有效防止常见的安全漏洞,确保敏感数据的保护。 ... [详细]
  • 创建一个水平滚动的表格视图
    本文介绍了如何创建一个水平滚动的表格视图,通过使用 `UITableView` 的变换属性 `transform` 和 `CGAffineTransformMakeRotation` 方法,实现视图的水平滚动效果。此外,还详细探讨了相关布局调整和性能优化技巧,确保在不同设备上都能获得流畅的用户体验。 ... [详细]
  • C#微信开发入门教程第二篇:新手快速上手指南,含详细视频讲解
    在距离上次课程一个多星期后,我们终于带来了第二讲的内容。虽然原计划是一周一次更新,但由于工作繁忙有所延迟。近期在交流群中发现,一些初学者已经能够熟练调用微信接口,但对微信公众平台的消息接收处理机制还不够了解。因此,本次课程将详细介绍如何高效处理微信公众平台的消息接收,并提供详细的视频讲解,帮助大家快速上手。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • 池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析
    池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析 ... [详细]
  • 通过在 Vue Router 中使用 `beforeEach` 导航守卫,可以实现对未登录用户的自动重定向至登录页面的功能。具体实现方法是在导航守卫中检查目标路由的 `meta` 属性,如果该属性中的 `requireAuth` 值为 `true`,则进一步验证用户的登录状态。若用户未登录,则将其重定向到登录页面,确保系统的安全性和用户体验。此外,还可以结合 Vuex 状态管理来存储和验证用户的登录状态,提高代码的可维护性和扩展性。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 大多数网站为了降低用户注册门槛并提升使用体验,通常会集成第三方登录功能。本文重点探讨了在使用PHP实现QQ登录OAuth2.0过程中遇到的常见问题及其解决方案。具体步骤包括:首先申请成为开发者,接着创建应用以获取AppId和AppKey,最后通过这些凭据获取access token。文章还详细介绍了在实际开发中可能遇到的问题及相应的解决方法,为开发者提供实用的参考。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 在探讨SpringCloud环境中实现跨标签页或新窗口的单点登录机制时,重点分析了localStorage与sessionStorage的应用。通过使用localStorage存储token,可以确保其在浏览器关闭后仍有效,但需手动设置过期时间以增强安全性。相比之下,sessionStorage仅在当前会话期间有效,适用于临时数据存储。文中详细讨论了两种存储方式的技术细节及其在实际开发中的应用策略。 ... [详细]
  • 在本文中,我们将探讨如何使用 UniApp 封装小程序 API 请求接口的最佳实践。通过创建 `request.js` 文件,定义基础 URL 并传入后端提供的 URL 作为请求参数。同时,配置请求方法(如 GET、POST)和请求头(例如包含 token 的认证信息),以实现高效、安全的 API 调用。此外,我们还将介绍如何处理请求和响应的错误,以及如何优化请求性能,确保应用在不同平台上的兼容性和稳定性。 ... [详细]
  • SSMS 启动故障:错误报告与解决求助 ... [详细]
  • Gear 月度进展报告:2023年7月最新动态与技术升级
    Gear 月度进展报告:2023年7月最新动态与技术升级 ... [详细]
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社区 版权所有