function last (array) { return array[array.length - 1] } let brackets = { /** * Parse string to nodes tree */ parse (str) { let current = [''] let stack = [current] for (let sym of str) { 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 (ast) { let result = '' for (let i of ast) { if (typeof i === 'object') { result += `(${brackets.stringify(i)})` continue } result += i } return result } } module.exports = brackets