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