Skip to content

Latest commit

 

History

History
84 lines (54 loc) · 4.86 KB

overview.md

File metadata and controls

84 lines (54 loc) · 4.86 KB

Компилятор

Исходный код компилятора TypeScript находится в папке src/compiler.

Он разделен на следующие ключевые части:

  • Scanner (scanner.ts)
  • Parser (parser.ts)
  • Binder (binder.ts)
  • Checker (checker.ts)
  • Emitter (emitter.ts)

Каждый из них получает свои уникальные файлы в исходном коде.. Эти части будут объяснены позже в этой главе.

BYOTS

У нас есть проект Bring Your Own TypeScript (BYOTS), который упрощает работу с API компилятора например раскрывая внутренние API. Вы можете использовать его в вашем локальном приложении для доступа к глобальной версии TypeScript

Синтаксис против семантики

Просто потому, что что-то синтаксически правильно, не означает, что это семантически правильно. CРассмотрим следующий фрагмент кода TypeScript, который хотя и синтаксически корректен, но семантически неверен.

var foo: number = "not a number";

Semantic означает «смысл» на английском языке. Эту концепцию полезно иметь в голове.

Processing Overview

Ниже приводится краткий обзор того, как составляются эти ключевые части компилятора TypeScript:

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

Символ это основной строительный блок семантической системы TypeScript. Как показано символы создаются в результате связывания. Символы соединяют узлы объявлений в AST с другими объявлениями, относящимися к тому же объекту.

Символы + AST — это то, что используется программой проверки для семантической проверки исходного кода.

AST + Symbols ~~ checker ~~> Type Validation

Наконец, когда запрашивается вывод JS:

AST + Checker ~~ emitter ~~> JS

В компиляторе TypeScript есть несколько дополнительных файлов, которые предоставляют утилиты для многих из этих ключевых частей, которые мы рассмотрим далее.

Файл: Утилита

core.ts : основные утилиты используемые компилятором в TypeScript. Несколько важных:

  • let objectAllocator: ObjectAllocator : это переменная обьявленная как одноэлементная глобальная. Он предоставляет определения для getNodeConstructor (Узлы рассматриваются, когда мы смотрим на parser / AST), getSymbolConstructor (Символы обернуты в binder), getTypeConstructor (Типы описаны в checker), getSignatureConstructor (Signatures — это индекс, вызов и построение signatures).

Файл: Ключевые структуры данных

types.ts содержит ключевые структуры данных и интерфейсы, используемые компилятором. Вот выборка из нескольких ключевых:

  • SyntaxKind Тип узла AST определяется перечислением SyntaxKind.
  • TypeChecker Это интерфейс, предоставляемый TypeChecker.
  • CompilerHost Это используется Program для взаимодействия с System.
  • Node Узел AST.

Файл: Система

system.ts. Все взаимодействие компилятора TypeScript с операционной системой происходит через System интерфейс.И интерфейс, и его реализации (WScript и Node) определеныsystem.ts. Вы можете думать об этом как об Операционной Среде (OС).

Теперь, когда у вас есть обзор основных файлов, мы можем рассмотреть концепцию Program.