타입스크립트 컴파일러 구조
The TypeScript compiler source is located under the src/compiler folder.
It is split into the follow key parts:
Scanner (
scanner.ts)Parser (
parser.ts)Binder (
binder.ts)Checker (
checker.ts)Emitter (
emitter.ts)
Each of these get their own unique files in the source. These parts will be explained later on in this chapter.
Syntax vs. Semantics
Just because something is syntactically correct doesn't mean it is semantically correct. Consider the following piece of TypeScript code which although syntactically valid is semantically wrong
var foo: number = "not a number";Semantic means "meaning" in English. This concept is useful to have in your head.
Processing Overview
The following is a quick review of how these key parts of the TypeScript compiler compose:
SourceCode ~~ scanner ~~> Token StreamToken Stream ~~ parser ~~> ASTAST ~~ binder ~~> SymbolsSymbol is the primary building block of the TypeScript semantic system. As shown the symbols are created as a result of binding. Symbols connect declaration nodes in the AST to other declarations contributing to the same entity.
Symbols + AST are what is used by the checker to semantically validate the source code
AST + Symbols ~~ checker ~~> Type ValidationFinally When a JS output is requested:
AST + Checker ~~ emitter ~~> JSThere are a few additional files in the TypeScript compiler that provide utilities to many of these key portions which we cover next.
File: Utilities
core.ts : core utilities used by the TypeScript compiler. A few important ones:
let objectAllocator: ObjectAllocator: is a variable defined as a singleton global. It provides the definitions forgetNodeConstructor(Nodes are covered when we look atparser/AST),getSymbolConstructor(Symbols are covered inbinder),getTypeConstructor(Types are covered inchecker),getSignatureConstructor(Signatures are the index, call and construct signatures).
File: Key Data Structures
types.ts contains key data structures and interfaces uses throughout the compiler. Here is a sampling of a few key ones:
SyntaxKindThe AST node type is identified by the
SyntaxKindenum.TypeCheckerThis is the interface provided by the TypeChecker.
CompilerHostThis is used by the
Programto interact with theSystem.NodeAn AST node.
File: System
system.ts. All interaction of the TypeScript compiler with the operating system goes through a System interface. Both the interface and its implementations (WScript and Node) are defined in system.ts. You can think of it as the Operating Environment (OE).
Now that you have an overview of the major files, we can look at the concept of Program
Last updated
Was this helpful?