21 lines
569 B
TypeScript
21 lines
569 B
TypeScript
import { Line, Spec } from '../primitives.js';
|
|
import { seedSpec } from '../util.js';
|
|
import { Tokenizer } from './tokenizers/index.js';
|
|
|
|
export type Parser = (source: Line[]) => Spec;
|
|
|
|
export interface Options {
|
|
tokenizers: Tokenizer[];
|
|
}
|
|
|
|
export default function getParser({ tokenizers }: Options): Parser {
|
|
return function parseSpec(source: Line[]): Spec {
|
|
let spec = seedSpec({ source });
|
|
for (const tokenize of tokenizers) {
|
|
spec = tokenize(spec);
|
|
if (spec.problems[spec.problems.length - 1]?.critical) break;
|
|
}
|
|
return spec;
|
|
};
|
|
}
|