我最近正在研究TypeScript解析器,以了解如何使漂亮的递归下降解析器递增。
如果您查看在TypeScript https://github.com/Microsoft/TypeScript/blob/master/src/compiler/parser.ts#L7213中对源文件进行增量重新解析的实现,则它似乎从头开始。所有语句都会重新解析。似乎在进行增量解析时:https://github.com/Microsoft/TypeScript/blob/master/src/compiler/parser.ts#L1714允许在旧树中查找现有节点以供重用。
如果我正确地读取了源代码,则增量解析仍会解析整个文件。它只是从旧树中查找节点,而不是在可能的情况下重新创建新节点。
我的问题:为什么增量解析器从头开始? 在增量上下文中走分析树直到“损坏”部分并从那里重新开始分析是否更合乎逻辑?即您找到该节点,从那里初始化扫描仪,然后使用适当的解析功能开始重新解析?