You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
849 B
51 lines
849 B
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
|
|
|