Myna is an easy to use recursive-descent parsing library for JavaScript (EcmaScript 5.1) written in TypeScript.
This web-site was made using Myna tools to:
Myna features:
Below is an example of how to use Myna from Node.JS in a single self-contained example:
// Load the Myna module and all grammars var m = require('myna-parser'); // Load the JSON grammar require('myna-parser/grammars/grammar_json')(m); // Get the JSON parser var parser = m.parsers.json; // Define some input var input = '{ "integer":42, "greeting":"hello", "truth":false, "array":[1,2,3] }'; // Output the generated AST console.log(parser(input).toString());
The following example shows how to use Myna with a custom Grammar:
// Reference the Myna module var m = require('myna-parser'); // Construct a grammar object var g = new function() { this.textdata = m.notChar('\n\r"' + delimiter); this.quoted = m.doubleQuoted(m.notChar('"').or('""').zeroOrMore); this.field = this.textdata.or(this.quoted).zeroOrMore.ast; this.record = this.field.delimited(delimiter).ast; this.file = this.record.delimited(m.newLine).ast; } // Let consumers of the Myna module access m.registerGrammar("csv", g, g.file); // Get the parser var parser = m.parsers.csv; var input = 'a,1,"hello"\nb,2,"goodbye"'; console.log(parser(input).toString());
Only rules that are defined with the .ast
property will create nodes in the output parse tree. This saves the work of having to convert from a Concrete Syntax Tree (CST) to an Abstract Syntax Tree (AST).