| 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; |
| }; |
| } |