craftinginterpreters

2025-12-11 0 724

这是用于过程中的书“制作口译员”的存储库。它包含本书的降价文本,两个口译员的完整实现,以及将两者共同编织到最终站点的构建系统。

如果您发现错误或有建议,请在此处提出问题。谢谢你!

贡献

在网上写书并将其放在那里之前,绝对最好的事情之一是,像您这样的人非常友善,可以给我反馈,指出错别字,并找到其他错误或不清楚的文字。

如果您想这样做,太好了!您只需在存储库上的文件中提交错误,也可以在您倾向于发送拉动请求。如果您想发送拉动请求,但不想设置构建系统以重新生成HTML,请不要担心。当我将其拉进去时,我会做的。

端口和实现

参与的另一种方法是分享您自己的LOX实施。其他语言的端口特别有用,因为并非每个读者都喜欢Java和C.随时将LOX端口或实现添加到Wiki:

  • LOX实现

建造东西

我是一个非常健忘,容易出错的哺乳动物,所以我尽可能多地自动化。

先决条件

我在OS X机器上开发,但是任何POSIX系统也应该使用。稍作额外的努力,您也应该能够在Windows上使用此功能,尽管我不能为您提供太多帮助。

大部分作品都是由Make精心策划的。构建脚本,测试跑步者和其他实用程序都是用DART编写的。安装飞镖的说明在这里。一旦安装了飞镖并在路径上,请运行:

$ make get

这将下载构建和测试脚本使用的所有软件包。

为了编译两个口译员,您还需要路径和javac上的C编译器。

建筑

设置后,请尝试:

$ make

如果一切正常,那将为书籍生成本网站,并编译两个口译员Clox和Jlox。您可以直接从回购的根部运行任何一个解释器:

$ ./clox
$ ./jlox

黑客入侵

源代码的降价和片段使用手写的静态站点生成器将其编织到最终的HTML中,该静态站点生成器最初是我的第一本书的单个小python脚本,并以某种方式成长为近似真实程序的东西。

生成的HTML在site/下的存储库中进行。它是由散文的Markdown的组合建造的,该散文居住在book/ ,以及由java/ and c/中的Java和C实现编织的代码片段。 (源代码中所有这些有趣的评论都是它如何知道哪个片段去的地方。)

所有魔术的脚本是tool/bin/build.dart 。您可以直接运行或运行:

$ make book

这会在一批中生成整个网站。如果您正在逐步处理它,则需要运行开发服务器:

$ make serve

这将在植根于site/目录的Localhost上运行一些HTTP服务器。每当您请求页面时,它都会重新生成任何已更改源的文件,包括Markdown文件,解释器源文件,模板和资产。只需让它继续运行,本地编辑文件,并刷新您的浏览器以查看更改。

建立口译员

您可以这样构建每个解释器:

$ make clox
$ make jlox

这构建了每个解释器的最终版本,因为它出现在书中的末尾。

您还可以在每章结尾处看到口译员的样子。 (我用它来确保它们甚至在书的中间也可以工作。)这是由脚本, tool/bin/split_chapters.dart驱动的,该脚本使用相同的评论标记来确定代码段来确定每章中存在哪些代码块。它仅需在每章结尾处看到的片段,并在gen/中生成新的源副本,这是每个章节代码的一个目录。 (这些也是查看源代码的一种更简单的方法,因为它们都将所有分散注意力的标记评论都删除了。)

然后,每个都可以单独构建。跑步:

$ make c_chapters

build/目录中,您将获得每章的可执行文件,例如chap14_chunks等。同样:

$ make java_chapters

这将Java代码编译为每章中的子目录中的build/gen/ classfiles。

测试

我有一个完整的LOX测试套件,可以用来确保书中的口译员按照他们应该做的事情。测试用例生活在test/中。 DART程序tool/bin/test.dart是一个测试跑步者,在LOX解释器上运行每个测试文件,解析结果并验证测试是否可以执行预期。

您可以在各种口译员上进行测试:

$ make test       # The final versions of clox and jlox.
$ make test_clox  # The final version of clox.
$ make test_jlox  # The final version of jlox.
$ make test_c     # Every chapter\'s version of clox.
$ make test_java  # Every chapter\'s version of jlox.
$ make test_all   # All of the above.

测试您的实现

欢迎您使用测试套件和测试跑步者测试自己的LOX实现。测试跑者在tool/bin/test.dart上,可以给出一个自定义解释器,可执行使用--interpreter 。例如,如果您在my_code/boblox上具有解释器可执行文件,则可以像以下方式测试:

$ dart tool/bin/test.dart clox --interpreter my_code/boblox

您仍然需要告诉它要运行哪种测试套件,因为这决定了测试期望。如果您的口译员应该像Jlox一样行事,请使用“ Jlox”作为套件名称。如果其表现为Clox,请使用“ Clox”。如果您的解释器仅到本书中的一章的结尾完成,则可以将该章节用作套件,例如“ Chap10_functions”。有关所有章节的名称,请参见Makefile。

如果您的解释器需要使用其他命令行参数,请使用--arguments将其传递给测试跑者,并且它将转发给您的解释器。

存储库布局

  • asset/ – 用于生成网站的SASS文件和JINJA2模板。
  • 每章文本的book/降价文件。
  • build/ – 中间文件和其他构建输出(网站本身除外)转到此处。不致力于git。
  • c/ – Clox的源代码,Clox用C中写的解释器也包含一个Xcode项目,如果您是您的事。
  • gen/ – generateast.java生成的Java源文件请转到此处。不承诺。
  • java/ – Jlox的源代码,用Java编写的解释器。
  • note/ – 各种研究,注释,毒品和其他杂项。
  • note/answers – 挑战的示例答案。没有作弊!
  • site/ – 最终生成的网站。该目录的内容直接映射craftinginterpreters .com。这里的大多数内容都是由build.py生成的,但是字体,图像和JS仅在这里生成。一切都是奉献的,甚至是生成的内容。
  • test/ – LOX实现的测试用例。
  • tool/ – 包含构建,测试和其他脚本的DART软件包。

下载源码

通过命令行克隆项目:

git clone https://github.com/munificent/craftinginterpreters.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 craftinginterpreters https://www.zuozi.net/34124.html

Tai
上一篇: Tai
RVC Studio
下一篇: RVC Studio
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务