과제가 임의의 파이썬 소스 코드를 입력하면 괄호 검사가 되도록 하는 코드를 만드는 건데요.
'파이썬으로 쉽게 풀어쓴 자료구조'라는 책에 있는 문제입니다
top = [ ]
def isEmpty():
return len(top) == 0
def push(item):
top.append(item)
def pop():
if not isEmpty():
return top.pop(-1)
def peek():
if not isEmpty():
return top[-1]
def size(): return len(top)
def clear():
global top
top = []
class Stack :
def __init__( self ):
self.top = []
def isEmpty( self ): return len(self.top) == 0
def size( self ): return len(self.top)
def clear( self ): self.top = []
def push( self, item ):
self.top.append(item)
def pop( self ):
if not self.isEmpty():
return self.top.pop(-1)
def peek( self ):
if not self.isEmpty():
return self.top[-1]
def __str__(self ):
return str(self.top[::-1])
def checkBrackets(statement):
stack = Stack()
con = 0
for i in range(len(statement)):
if statement[i] in ('{', '[', '('):
stack.push(statement[i])
con += 1
elif statement[i] in ('}', ']', ')'):
con -= 1
if stack.isEmpty():
return '조건 2 위반', filename.index(statement), i+1
elif statement[i] == '}' and stack.peek()=='{':
stack.pop()
elif statement[i] == ')' and stack.peek()=='(':
stack.pop()
elif statement[i] == ']' and stack.peek()=='[':
stack.pop()
else:
return '조건 3 위반', filename.index(statement), i+1
if con == 0:
return '조건 1 위반', filename.index(statement)
else:
return '0'
filename = "ArrayStack.py"
infile = open(filename , "r")
lines = infile.readlines();
infile.close()
result = checkBrackets(lines)
print(filename, "--->", result)
ArrayStack.py의 내용은
{A[(i+1)] = 0; }
if( (i==0) && (j==0)
a[ (i+1] ) = 0;
되어 있습니다