TypeScript Compiler Internals
Last updated
Last updated
Вихідні тексти компілятора TypeScript знаходяться в .
Він складається з наступних ключових частин:
Сканер (scanner.ts
)
Синтаксичний аналізатор (parser.ts
)
Біндер (binder.ts
)
Чекер (checker.ts
)
Випромінювач (emitter.ts
)
Кожен з них отримує власні унікальні файли у вихідному коді. Ці частини буде описано далі у цій главі.
Просто тому, що щось є синтаксично правильним, це не означає, що воно семантично правильне. Розгляньте наступний фрагмент коду на TypeScript, який, хоча синтаксично дійсний, але семантично неправильний.
Semantic
означає "значення" англійською мовою. Цю концепцію корисно розуміти.
Нижче наведено короткий огляд того, як складають ці ключові частини компілятора TypeScript:
Символ
є основним будівельним блоком семантичної системи TypeScript. Як показано, символи створюються в результаті прив'язки. Символи з'єднують вузли оголошення (nodes declaration) в абстрактному синтаксичному дереві (AST) з іншими оголошеннями, які співпрацюють для тієї ж сутності.
Символи + AST використовуються перевірювачем для семантичної перевірки вихідного коду.
Коли запитується вихідний код JavaScript:
У компіляторі TypeScript є декілька додаткових файлів, які надають утиліти для багатьох з цих ключових частин, які ми розглянемо далі.
core.ts
: основні утиліти, що використовуються компілятором TypeScript. Кілька важливих з них:
let objectAllocator: ObjectAllocator
: змінна, визначена як глобальна змінна. Вона містить визначення для getNodeConstructor
(Вузли розглядаються у parser
/ AST
), getSymbolConstructor
(символи розглядаються у binder
), getTypeConstructor
(типи розглядаються у checker
), getSignatureConstructor
(сигнатури - це сигнатури індексів, викликів і конструкцій).
Файл types.ts
містить ключові структури даних та інтерфейси, що використовуються у компіляторі. Ось деякі ключові:
SyntaxKind
це тип вузла AST визначається зчисленням SyntaxKind
.
TypeChecker
(перевірка типу) - інтерфейс, що надається TypeChecker.
CompilerHost
(хост компілятора), використовується Програмою
для взаємодії з Системою
.
Node
(вузол) - вузол AST.
system.ts
. Вся взаємодія компілятора TypeScript з операційною системою відбувається через інтерфейс System
. Як сам інтерфейс, так і його реалізації (WScript
та Node
) визначені у файлі system.ts
. Ви можете думати про це як про Операційне середовище (OE).
Тепер, коли ви ознайомилися з основними файлами, ми можемо розглянути поняття Program
.