80 lines
1.6 KiB
JavaScript
80 lines
1.6 KiB
JavaScript
"use strict";
|
|
|
|
function last(array) {
|
|
return array[array.length - 1];
|
|
}
|
|
|
|
var brackets = {
|
|
/**
|
|
* Parse string to nodes tree
|
|
*/
|
|
parse: function parse(str) {
|
|
var current = [''];
|
|
var stack = [current];
|
|
|
|
for (var _iterator = str, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|
var _ref;
|
|
|
|
if (_isArray) {
|
|
if (_i >= _iterator.length) break;
|
|
_ref = _iterator[_i++];
|
|
} else {
|
|
_i = _iterator.next();
|
|
if (_i.done) break;
|
|
_ref = _i.value;
|
|
}
|
|
|
|
var sym = _ref;
|
|
|
|
if (sym === '(') {
|
|
current = [''];
|
|
last(stack).push(current);
|
|
stack.push(current);
|
|
continue;
|
|
}
|
|
|
|
if (sym === ')') {
|
|
stack.pop();
|
|
current = last(stack);
|
|
current.push('');
|
|
continue;
|
|
}
|
|
|
|
current[current.length - 1] += sym;
|
|
}
|
|
|
|
return stack[0];
|
|
},
|
|
|
|
/**
|
|
* Generate output string by nodes tree
|
|
*/
|
|
stringify: function stringify(ast) {
|
|
var result = '';
|
|
|
|
for (var _iterator2 = ast, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
|
var _ref2;
|
|
|
|
if (_isArray2) {
|
|
if (_i2 >= _iterator2.length) break;
|
|
_ref2 = _iterator2[_i2++];
|
|
} else {
|
|
_i2 = _iterator2.next();
|
|
if (_i2.done) break;
|
|
_ref2 = _i2.value;
|
|
}
|
|
|
|
var i = _ref2;
|
|
|
|
if (typeof i === 'object') {
|
|
result += "(" + brackets.stringify(i) + ")";
|
|
continue;
|
|
}
|
|
|
|
result += i;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
};
|
|
module.exports = brackets; |