Skip to content

Swift library for working with Extended Backus–Naur Form (EBNF) notation and grammars.

License

Notifications You must be signed in to change notification settings

ChimeHQ/Gramophone

Build Status Platforms Matrix

Gramophone

Swift library for working with Extended Backus–Naur Form (EBNF) notation and the resulting grammars.

Features:

  • Accepts a variety of BNF syntaxes
  • Computes FIRST and FOLLOW sets

Warning

This library is still a work-in-progress. It definitely still has some issues.

Integration

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/ChimeHQ/Gramophone")
]

Supported Syntax

single_quote_terminal = 'value';
angled_quote_terminal = `value´;
double_quote_terminal = "value";
unicode_scalar = U+0000;
bnf_nonterminal = <value>;

concatenation = a, b, c;
implicit_concatenation = a b c;
alternation = a | b | c;
optional = [a, b];
tailing_optional = a?;
repetition = {a};
tailing_plus_repetition = a+;
tailing_star_repetition = a+;
grouping = (a, b, c);
exception = a - b;

arrow_assigment → a;
colon_colon_equals_assigment ::= a;

Usage

let grammar = try parser.parseGrammar("test = 'a' | 'b';")

let firstMap = grammar.computeFirstMap()
let followMap = grammar.computeFollowMap()

Contributing and Collaboration

I would love to hear from you! Issues or pull requests work great. Both a Matrix space and Discord are available for live help, but I have a strong bias towards answering in the form of documentation. You can also find me on mastodon.

I prefer collaboration, and would love to find ways to work together if you have a similar project.

I prefer indentation with tabs for improved accessibility. But, I'd rather you use the system you want and make a PR than hesitate because of whitespace.

By participating in this project you agree to abide by the Contributor Code of Conduct.

About

Swift library for working with Extended Backus–Naur Form (EBNF) notation and grammars.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Languages