TypeScript Compiler Internals
Вихідні тексти компілятора TypeScript знаходяться в src/compiler
.
Він складається з наступних ключових частин:
Сканер (
scanner.ts
)Синтаксичний аналізатор (
parser.ts
)Біндер (
binder.ts
)Чекер (
checker.ts
)Випромінювач (
emitter.ts
)
Кожен з них отримує власні унікальні файли у вихідному коді. Ці частини буде описано далі у цій главі.
Синтаксис vs. Семантика
Просто тому, що щось є синтаксично правильним, це не означає, що воно семантично правильне. Розгляньте наступний фрагмент коду на 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
system.ts
. Вся взаємодія компілятора TypeScript з операційною системою відбувається через інтерфейс System
. Як сам інтерфейс, так і його реалізації (WScript
та Node
) визначені у файлі system.ts
. Ви можете думати про це як про Операційне середовище (OE).
Тепер, коли ви ознайомилися з основними файлами, ми можемо розглянути поняття Program
.
Last updated