Skip to content

Latest commit

 

History

History
49 lines (37 loc) · 1.28 KB

README.md

File metadata and controls

49 lines (37 loc) · 1.28 KB

bablr

come chat on Discord

This is the priary API package for BABLR. Use it in combination with a BABLR language definition to perform parsing.

Usage

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`eatMatch(<*Digit> 'digits[]')`);
    }

    @Node
    *Digit() {
      yield i`eat(/\d/)`;
    }
  };
}

const digits = buildTag(language, 'Number');

digits`42`;

// <Number>
//   digits[]:
//   <*Digit>
//     '4'
//   </>
//   digits[]:
//   <*Digit>
//     '2'
//   </>
//  </>

Prior Art

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.