引言
Tree-sitter 是一个 Parse Generator,也就是用来生成 Parser 的。除此之外,它还提供了一些额外的功能,比如今天要聊到的 Tree-sitter Query ,Query 提供了一套基于 S 表达式的 DSL(Domain Specific Language),可以查询 AST,获得你想要的信息,在正式学习如何使用 Query 前,我们先讲一些相关的背景知识,好让这个文章尽量是 Self-contained 的
最近在学习 GitHub Actions,GitHub Actions 是 GitHub 提供的一个特性,可以用来自动化执行一些步骤。在软件开发中,最常见的需要自动化的场景可能就是构建了。对于编译型的编程语言(比如 C/C++)编写的软件,通常需要编写对应的构建的脚本,软件构建的过程涉及到:环境准备、依赖下载、启动构建等。不过,利用 GitHub Actions 来自动化软件构建过程并不是本文的主题。在我思考我可以将 GitHub Actions 用于何处的时候,我想到了:利用 GitHub Actions 来自动化 Hugo 博客的部署。因为 Hugo 博客的部署也涉及到不少一系列固定的步骤 :)
假设函数 A
调用了函数 B
,我们称函数 A
为 Caller,函数 B
为 Callee。
尾调用(Tail-call)指的是:Caller 最后只需要返回 Callee 这个函数调用的计算结果,其他运算都执行完成了1