52 lines
		
	
	
		
			849 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			849 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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
 |