How to define a grammar - msv2017/gebf GitHub Wiki

Grammar definition

A text wrapped with < and > is considered as a token and terminal otherwise.

Tokens are expandable grammar expressions and terminals are not.

Terminals can be binded to actual javascript functions with bindings key.

var lang = {
	entry: '<entry>', // always must be defined
	'<entry>': ['<sub1>', ... ,'<subN>'], // token and its sub-tokens
	'<sub1>' : [...],
	...
	'<subN>' : [...],
	bindings: {
		sin: Math.sin,
		cos: Math.cos,
	}
};

Example

var lang = {
	entry: '<expr>',
	'<expr>: [
		'<expr> <op> <expr>',
		'x',
		'1'
	],
	'<op>': ['+', '-'],
};

Can produce infinite expressions as follows:

		1 + x
		x - 1
		x - 1 + x
		x + x + 1 + 1

and so on

⚠️ **GitHub.com Fallback** ⚠️