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 StreamToken Stream ~~ parser ~~> ASTAST ~~ 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