Skip to main content

Publishing Grammars

One of the core ideas behind Ohm is that grammars are APIs. If you have developed a grammar for a particular language and would like to share it for other people to use and build upon, here's what we suggest:

Module Exports

By convention, modules should export an object with a grammar property, and optionally a semantics property. For example, see the ES5 module in the examples/ directory. If a single package contains multiple languages, each language should be exported as a separate object. E.g., a package supporting multiple versions of Python might be used like this:

const {python2} = require('./your-python-package');
const result = python2.grammar.match('print 3');
python2.createSemantics(result).eval();

To package a single primary language along with other variants, you can expose the primary language from the top-level module, and the other languages as separate modules within the same package:

const smalltalk = require('./your-smalltalk-package');
const smalltalk72 = require('./your-smalltalk-package/smalltalk72');

Package Naming

To help users find your package, we suggest using a name of the form "ohm-grammar-someLanguage". E.g., the ES5 grammar in the examples directory is published on NPM as ohm-grammar-ecmascript.