Skip to content

bablr-lang/bablr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.