本系列源自笔者希望开发一套完整的编程语言工具链的想法,包括编译器(解释器)、语言服务器和调试器等。选择 AWK 是出于如下几点考虑:

  • AWK 是一门在现实世界中被广泛使用的语言,有丰富的资料、参考实现和测试用例

  • AWK 足够简单,减少了工程量,可以聚焦到核心的概念

  • AWK 作为一门动态语言,可以为其实现即时编译(Just-in-Time,JIT)

文章会按照如下的顺序组织:

  1. 编译器和虚拟机

    1. 词法和语法分析

    2. 字节码设计和生成

    3. 虚拟机的设计与实现

    4. C 接口的设计与实现

  2. 语言服务器

  3. 调试器