@composita/compiler
Version:
Composita language compiler.
26 lines (24 loc) • 1.07 kB
text/typescript
import { Lexer } from './lexer/lexer';
import { Parser } from './parser/parser';
import { ProgramNode } from './ast/ast';
import { IL } from '@composita/il';
import { SymbolTable } from './symbols/symbols';
import { CompilerDiagnosis, Diagnosis } from './diagnosis/diagnosis';
import { Checker } from './checker/checker';
import { Generator } from './generator/generator';
export class Compiler {
compile(uri: string, code: string): IL {
const diagnosis: Diagnosis = new CompilerDiagnosis();
const lexer: Lexer = new Lexer(diagnosis, uri, code);
const parser: Parser = new Parser(diagnosis, lexer);
const ast: ProgramNode = parser.parse();
if (diagnosis.hasErrors()) {
diagnosis.print(console.log);
throw new Error('Error during Lexing and/or Parsing. See console.log.');
}
const checker: Checker = new Checker();
const symbols: SymbolTable = checker.check(uri, ast);
const generator: Generator = new Generator();
return generator.generate(symbols);
}
}