과제가 임의의 파이썬 소스 코드를 입력하면 괄호 검사가 되도록 하는 코드를 만드는 건데요.

'파이썬으로 쉽게 풀어쓴 자료구조'라는 책에 있는 문제입니다




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;

되어 있습니다