练习 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.ysbc.yscan.l。这可能令人困惑,所以去研究一个名为lex的工具,和一个名为yacc的工具。

笨办法学 Python · 续 练习 47:`bc`相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 36:简单的计算器

    练习 36:简单的计算器 原文:Exercise 36: Simple Calculator 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这个挑战是创建一个简单的代数计算器, ...

  8. 笨办法学 Python · 续 练习 32:扫描器

    练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...

  9. 笨办法学 Python · 续 练习 31:正则表达式

    练习 31:正则表达式 原文:Exercise 31: Regular Expressions 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 正则表达式(RegEx)是一种简洁 ...

最新文章

  1. java 异常 理解_java中的异常理解
  2. Java Web——图像上传
  3. COJ 1163 乘法逆元的求解
  4. q7goodies事例_Java 8 Friday Goodies:轻松派本地缓存
  5. 前端学习(1190):事件修饰符
  6. 软件设计师1991下午试题1(流程图解析)
  7. (24)FPGA开发必备(FPGA不积跬步101)
  8. ctf本地包括_GitHub - SewellDinG/LFIboomCTF: 本地文件包含漏洞实践源码及相应协议利用指南...
  9. c语言开发arcgis,2017Esri开发竞赛GIS应用开发组一等奖作品
  10. 整理:周鸿祎谈如何写商业计划书
  11. CRM给B2B企业带来的影响
  12. windows电脑快捷键大全 - 高手总是很酷的
  13. vs2015 社区版 + Qt 5.13.2 安装
  14. 泛函分析复习笔记(二)线性算子与线性泛函
  15. Android系统音乐界面UI设计,40款音乐APP界面UI设计欣赏
  16. Unity3D 材质球学习
  17. 到底要不要继续坚持做硬件
  18. android电力监控平台,电力系统监控实验平台(网络型)
  19. 5G边缘云在营销领域的投资机遇
  20. 东方Project题目 1975 红魔馆爆炸了

热门文章

  1. uniapp 移动端上传文件_基于 uniapp 实现动态路由和动态 Tabbar
  2. 【飞控理论】四旋翼飞行器控制原理
  3. 魅族 linux 手机,魅族flyme开源,能否再现linux辉煌,为什么要开源
  4. S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
  5. reflect动画_3DSMAX制作超时空未来动画场景-3D建模场景模型教程
  6. 【LeetCode】剑指 Offer 44. 数字序列中某一位的数字
  7. 使用telnet进行Dubbo接口测试
  8. JQuery Mobile - 处理图片加载失败!
  9. AsyncSocket
  10. SpringCloud入门之Maven系统安装及配置