This is the primary API package for BABLR. Use it in combination with a BABLR language definition to perform parsing.
import { m, re } from '@bablr/boot';
import { buildTag } from 'bablr';
import { eat, eatMatch } from '@bablr/helpers/grammar';
import { printPrettyCSTML, printSource } from '@bablr/agast-helpers/tree';
const language = {
grammar: class {
*Number() {
while (yield eatMatch(m`digits[]: <*Digit />`));
}
*Digit() {
yield eat(re`/\d/`);
}
},
};
const matcher = m`<Number />`;
const digits = buildTag(language, matcher);
const tree = digits`42`;
printPrettyCSTML(tree) === `
<Number>
digits[]: <*Digit '4' />
digits[]: <*Digit '2' />
</>
`.trim(); // true
printSource(tree) === '42'; // trueBABLR is actually portmanteau of Babel and ANTLR. It would be reasonable to describe this project as being a mixture of the ideas from those two, with a bit of help from SrcML, Tree-sitter, and the fabulous Redux.
It is also designed with the needs of Prettier and ESLint in mind.