前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笨办法学 Python · 续 练习 47:`bc`

笨办法学 Python · 续 练习 47:`bc`

作者头像
ApacheCN_飞龙
发布2022-12-01 18:42:43
4030
发布2022-12-01 18:42:43
举报
文章被收录于专栏:信数据得永生信数据得永生

练习 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的工具。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 练习 47:bc
    • 挑战练习
      • 研究性学习
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档