笨办法学 Python · 续 练习 47:`bc`
练习 47:bc
原文:Exercise 47: bc
译者:飞龙
协议:CC BY-NC-SA 4.0
自豪地采用谷歌翻译
你应该热身并准备处理这个新项目。我通常假设,你将在一两天内的 2~3 小时的会话中完成这些项目,但你通常可以尽可能多地实现这些项目。
这个项目是,使用第五部分学到的内容,来为bc
程序创建语言。我们已经在练习 36 中,为bc
实现了简单的数学运算,但现在你将尽可能多地实现bc
语言。bc
大量运算符、函数和控制结构。你的目标是使用你对递归下降解析器的了解,来逐步实现它。
我将重点关注你的扫描器的构建,从扫描、解析、分析开始,并使用bc
的样例代码进行测试。这个项目可能是巨大的,因为你手动实现语言,但尽可能多地完成语法。
挑战练习
bc
语言不仅仅拥有处理数学运算的能力。我从不仅仅使用基础数学运算,完整的语言相当强大。你有能力定义函数,使用if
语句,并实现许多其他常见的编程结构。在实现中,你无法实现整个bc
语言,因为它太大了。相反,你应该实现这些东西:
- 所有的数学运算符
- 变量
- 函数
if
语句
这实际上是你应该实现该语言的顺序。首先,让运算符工作和解析良好。随意借鉴你在练习 35 中创建的简约实现,来起步。一旦实现了它,实现变量,这将需要使分析器正确处理变量的存储和检索。最后,你可以实现函数,然后是if
语句。
你需要钻研 GNU 版本的bc
的任何文档,因为它拥有语言的相当不错的完整描述,以便你可以实现它。它没有什么神奇的,因为他们大多从 C 复制一切,许多其他语言都类似于它。
当你处理这个挑战时,你需要花时间和步骤。实现语言的美妙之处是,你实际上可以以逻辑上清晰的顺序进行,从扫描到解析到分析,而不会在三个阶段之间有大的反弹。
最后,请记住,你正在实现一个递归下降解析器,实际上只是计算机科学解析中的低级版本。如果你正在做正经的解析工作,那么请使用一个解析器生成器,而不是用手写。用手编写它们只是一个有趣的挑战,并且是一种方法,来学习如何在逻辑上构建文本处理。
研究性学习
为了研究bc
语言,你应该从 gnu.org 抓取源代码,并查找文件bc.y
,sbc.y
和scan.l
。这可能令人困惑,所以去研究一个名为lex
的工具,和一个名为yacc
的工具。
笨办法学 Python · 续 练习 47:`bc`相关推荐
- 笨办法学 Python · 续 中文版
笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...
- 笨办法学 Python · 续 练习 33:解析器
练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...
- 笨办法学 Python · 续 练习 0:起步
练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...
- 笨办法学 Python · 续 第二部分:简单的黑魔法
第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...
- 笨办法学 Python · 续 练习 52:`moreweb`
练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...
- 笨办法学 Python · 续 练习 24:URL 快速路由
练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...
- 笨办法学 Python · 续 练习 36:简单的计算器
练习 36:简单的计算器 原文:Exercise 36: Simple Calculator 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这个挑战是创建一个简单的代数计算器, ...
- 笨办法学 Python · 续 练习 32:扫描器
练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...
- 笨办法学 Python · 续 练习 31:正则表达式
练习 31:正则表达式 原文:Exercise 31: Regular Expressions 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 正则表达式(RegEx)是一种简洁 ...
最新文章
- java 异常 理解_java中的异常理解
- Java Web——图像上传
- COJ 1163 乘法逆元的求解
- q7goodies事例_Java 8 Friday Goodies:轻松派本地缓存
- 前端学习(1190):事件修饰符
- 软件设计师1991下午试题1(流程图解析)
- (24)FPGA开发必备(FPGA不积跬步101)
- ctf本地包括_GitHub - SewellDinG/LFIboomCTF: 本地文件包含漏洞实践源码及相应协议利用指南...
- c语言开发arcgis,2017Esri开发竞赛GIS应用开发组一等奖作品
- 整理:周鸿祎谈如何写商业计划书
- CRM给B2B企业带来的影响
- windows电脑快捷键大全 - 高手总是很酷的
- vs2015 社区版 + Qt 5.13.2 安装
- 泛函分析复习笔记(二)线性算子与线性泛函
- Android系统音乐界面UI设计,40款音乐APP界面UI设计欣赏
- Unity3D 材质球学习
- 到底要不要继续坚持做硬件
- android电力监控平台,电力系统监控实验平台(网络型)
- 5G边缘云在营销领域的投资机遇
- 东方Project题目 1975 红魔馆爆炸了
热门文章
- uniapp 移动端上传文件_基于 uniapp 实现动态路由和动态 Tabbar
- 【飞控理论】四旋翼飞行器控制原理
- 魅族 linux 手机,魅族flyme开源,能否再现linux辉煌,为什么要开源
- S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
- reflect动画_3DSMAX制作超时空未来动画场景-3D建模场景模型教程
- 【LeetCode】剑指 Offer 44. 数字序列中某一位的数字
- 使用telnet进行Dubbo接口测试
- JQuery Mobile - 处理图片加载失败!
- AsyncSocket
- SpringCloud入门之Maven系统安装及配置