var parser = require('parsing').create({
ignore: 'N_WHITESPACE',
start: 'N_PROGRAM',
rules: {
'N_WHITESPACE': /\s+/,
'N_STATEMENT': {
oneOf: ['N_EXPRESSION_STATEMENT']
},
'N_EXPRESSION_STATEMENT': [
{name: 'expression', rule: 'N_EXPRESSION'},
/;/
],
'N_EXPRESSION': {
oneOf: ['N_BINARY_EXPRESSION']
},
'N_BINARY_EXPRESSION': [
{name: 'left', rule: 'N_NUMBER', captureOffsetAs: 'offset'},
{name: 'operator', what: /[+*\/-]/, captureOffsetAs: 'offset'},
{name: 'right', rule: 'N_NUMBER', captureOffsetAs: 'offset'}
],
'N_NUMBER': [
{name: 'number', what: /\d+/, captureOffsetAs: 'offset'}
],
'N_PROGRAM': [
{name: 'statements', zeroOrMoreOf: 'N_STATEMENT'}
]
}
});
var highlighter = require('highlighted').create({
offset: function (node) {
return node.offset.offset;
},
length: function (node) {
return node.offset.length;
},
type: 'name',
nodes: {
'N_NUMBER': function (node, replace) {
replace(node, '<span class="number">' + node.number + '</span>');
}
}
});
var code = '21 + 22; 23 + 24;';
var ast = parser.parse(code);
var highlightedResult = highlighter.highlight(code, ast);
highlightedResult;