This is the primary API package for BABLR. Use it in combination with a BABLR language definition to perform parsing.
import { i, spam } from '@bablr/boot';
import { buildTag } from 'bablr';
import { printPrettyCSTML, printSource } from '@bablr/agast-helpers/tree';
import { buildCovers } from '@bablr/helpers/decorators';
const language = {
canonicalURL:
'https://bablr.org/languages/example/digits',
grammar: class {
*Number() {
while (yield i`eatMatch(<*Digit /> 'digits[]')`);
}
*Digit() {
yield i`eat(/\d/)`;
}
},
};
const matcher = spam`<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.