扫描器

    为避免重复创建扫描器造成的开销,parser.ts 中创建了一个扫描器的单例。解析器根据需要使用 initializeState 函数准备该扫描器。

    下面是解析器中的实际代码的简化版,你可以运行它演示以上概念

    该段代码输出以下内容:

    调用 scan 后,扫描器更新其局部状态(扫描位置,当前 token 详情等)。扫描器提供了一组工具函数获取当前扫描器状态。下例中,我们创建一个扫描器并用它识别 token 以及 token 在代码中的位置。

    该代码输出以下内容:

    即便 TypeScript 解析器有单例扫描器,你仍可以使用 创建独立的扫描器,然后可以用 setText/setTextPos 随意扫描文件的不同位置。