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