ometa-js

An object-oriented language for pattern matching

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
ometa-js
1.5.43 years ago11 years agoMinified + gzip package size for ometa-js in KB

Readme

```
____  __  ___     __            _______
/ \/ |/ / / / / / / / / / / /|/ / \/ / `/ / /\__ \ / // / / / / / // // / // // / \__// //\__/\__/\__,/\__/// ```

Description

OMetaJS is a JavaScript implementation of OMeta, an object-oriented language for pattern matching. This is a node.js module for developing and using such pattern matching grammars.

Installation

Installing ometajs

``` bash $ sudo
npm install ometa-js -g ``` Note: If you are using ometajs programatically you should not install it globally. ``` bash $ cd /path/to/your/project $ npm install ometa-js ```

Usage

Command line

```bash $ ometajs2js --help Usage: ometajs2js OPTIONS ARGS Options: -h, --help : Help -v, --version : Version -c, --commonjs : Output as commonjs module -i INPUT, --input=INPUT : Input file (default: stdin) -o OUTPUT, --output=OUTPUT : Output file (default: stdout) --root=ROOT : Path to root module (default: ometajs) ``` ometajs2js will take input *.ometajs file and produce a CommonJS0/AMD/Browser compatible javascript file. Also you may require('*.ometajs') files directly without compilation. (OmetaJS is patching require.extensions as CoffeeScript1 does).

Using as CommonJS module

```javascript var ometajs = require('ometa-js'); var ast = ometajs.BSJSParser.matchAll('var x = 1', 'topLevel'),
code = ometajs.BSJSTranslator.matchAll([ast], 'trans');
// Or: var code = ometajs.compile('var x = 1'); ``` Example

Example grammar

```javascript ometa Simple { top = #simple -> 'ok' } ``` More information5 about OmetaJS syntax.

Use cases

Fast prototyping and building your own parser/language. Processing/traversing complex AST2. Some projects that are using this: - XJST - ShmakoWiki - OmetaHighlighter

More information

To study OmetaJS or ask questions about it's core you can try to reach out original repository3 author Alessandro Warth4 or me. Here is documented code5.

Contributors