TypeScript Compiler Internals

Вихідні тексти компілятора TypeScript знаходяться в src/compiler.

Він складається з наступних ключових частин:

  • Сканер (scanner.ts)

  • Синтаксичний аналізатор (parser.ts)

  • Біндер (binder.ts)

  • Чекер (checker.ts)

  • Випромінювач (emitter.ts)

Кожен з них отримує власні унікальні файли у вихідному коді. Ці частини буде описано далі у цій главі.

Синтаксис vs. Семантика

Просто тому, що щось є синтаксично правильним, це не означає, що воно семантично правильне. Розгляньте наступний фрагмент коду на TypeScript, який, хоча синтаксично дійсний, але семантично неправильний.

var foo: number = "not a number";

Semantic означає "значення" англійською мовою. Цю концепцію корисно розуміти.

Огляд обробки даних

Нижче наведено короткий огляд того, як складають ці ключові частини компілятора TypeScript:

SourceCode ~~ scanner ~~> Token Stream
Token Stream ~~ parser ~~> AST
AST ~~ binder ~~> Symbols

Символ є основним будівельним блоком семантичної системи TypeScript. Як показано, символи створюються в результаті прив'язки. Символи з'єднують вузли оголошення (nodes declaration) в абстрактному синтаксичному дереві (AST) з іншими оголошеннями, які співпрацюють для тієї ж сутності.

Символи + AST використовуються перевірювачем для семантичної перевірки вихідного коду.

AST + Symbols ~~ checker ~~> Type Validation

Коли запитується вихідний код JavaScript:

AST + Checker ~~ emitter ~~> JS

У компіляторі 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