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