Parser
Вихідний код синтаксичного аналізатора TypeScript повністю знаходиться у файлі parser.ts
. Сканер керується зсередини Parser
для перетворення вихідного коду в AST. Нижче наведено огляд бажаного результату.
Парсер реалізований як сінглтон (аналогічні причини, як у scanner
, не хочемо перестворювати його, якщо можемо повторно ініціалізувати). Фактично він реалізований як namespace Parser
, який містить state (змінні стану) для парсера, а також сінглтон scanner
. Як зазначалося раніше, він містить const scanner
. Функції парсера керують цим сканером.
Використання програмою
Синтаксичний аналізатор опосередковано керується програмою (опосередковано, оскільки насправді він керується CompilerHost
, про який ми згадували раніше). По суті, це спрощений стек викликів:
Функція parseSourceFile
не лише встановлює стан для парсера, але й встановлює стан для сканера, викликаючи функцію initializeState
. Потім він продовжує розбір вихідного файлу за допомогою parseSourceFileWorker
.
Приклад використання
Перш ніж ми заглибимося у внутрішню роботу синтаксичного аналізатора, наведемо приклад коду, який використовує парсер TypeScript для отримання AST вихідного файлу (за допомогою ts.createSourceFile
), а потім виводить його на друк.
code/compiler/parser/runParser.ts
У результаті буде виведено наступне:
Це схоже на дерево, якщо ви нахиляєте голову вліво.
Last updated