Инкрементальная реализация синтаксического анализатора TypeScript - PullRequest
0 голосов
/ 08 марта 2019

Недавно я изучал синтаксический анализатор 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 позволяет искать существующие узлы в старом дереве для повторного использования.

Если я правильно читаю источник, инкрементальный разбор все равно анализирует весь файл. Он просто ищет узлы из старого дерева, вместо того, чтобы создавать новые, когда это возможно.

Мой вопрос: почему инкрементный парсер запускается с самого начала? Разве не логичнее в инкрементальном контексте обходить парсетное дерево до тех пор, пока «испорченная» часть не перезапустится, и оттуда снова начать анализ? То есть Вы находите узел, оттуда инициализируете свой сканер и запускаете повторный анализ с помощью функции подходящего анализа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...