Appia의 IT세상

파이썬[Python] C 소스 코드에 선언된 함수 정보 입력 인자, 리턴인자 정보 출력하기 본문

Python/Python 응용

파이썬[Python] C 소스 코드에 선언된 함수 정보 입력 인자, 리턴인자 정보 출력하기

Appia 2021. 7. 28. 07:47
반응형

파이썬[Python] C 소스 코드에 선언된 함수 정보 입력 인자, 리턴인자 정보 출력하기

파이썬[Python] C 소스 코드에 선언된 함수 정보 입력 인자, 리턴인자 정보 출력하기

이전 포스팅에서는 C소스 코드를 바탕으로 선언된 함수에 대해서 출력하는 방법에 대해서 살펴봤습니다. 그 부분을 통해서, 선언된 원문, 그리고 함수의 이름등을 확인할 수 있었습니다. 그래서 이번 포스팅은 앞선 포스팅의 연장선상에서, 함수의 입력인자와 출력인자의 타입등의 정보와 함수이름을 출력하는 방법에 대해서 살펴보고자 합니다. 

 

앞선 포스팅과 동일하게 다음 링크에 있는 예시 코드를 활용하여 사용하였습니다. 

https://c.happycodings.com/sorting-searching/code12.html

 

C | No sort, but reversing a [linked list] Code Example

C Programming Code Examples C > Sorting Searching Code Examples No sort, but reversing a [linked list] No sort, but reversing a [linked list] #include #include #define MAX 10 /* max of 10 elements */ struct lnode { int number; struct lnode *next; }; /* add

c.happycodings.com

 

일단, 먼저 함수 정보를 앞선 정보와는 약간의 변화가 필요한 시점이라서 어떻게 하는 것이 효율적이고 향후에 정보 접근에 용이할 것인지에 대해서 고민해봤습니다. (물론 저는 주로 생각을 하지 않고 먼저 저지르고 보는 성향이긴 합니다.) 

 

함수이름
리턴 타입
입력 인자 및 타입

이와 같은 카테고리에 대한 정보를 나열할 예정입니다. 먼저, 관련된 정보를 취합하기 위해서 다음과 같이 클래스를 하나 만들어서 관련된 부분들을 지속적으로 저장할 예정입니다. 

class function:
    def __init__(self, Name, retype, args ):
        self.funName = Name
        self.retType = retype
        self.args = args

그럼, 코드 부분을 살펴보겠습니다. 


import re

class function:
    def __init__(self, Name, retype, args ):
        self.funName = Name
        self.retType = retype
        self.args = args


def reading_source(path):
    functionList = [] # 함수들의 정보를 저장하기 위한 리스트
    sourcecode = open(path,"r")
    data = sourcecode.readlines()
    number = 0
    notWord = re.compile('(void|int|float)[ ]{1,}[\w]{1,}[(].{0,}[)][;]')
    argMent = re.compile('[(].{0,}[)][;]')

    returntype = re.compile('(void|int|float)')

    for i in data:
        val_i = notWord.search(i)



        if val_i != None :

            functionName = re.sub('(void|int|float)[ ]{1,}|[(].{0,}[)][;]', "",i)
            rType = returntype.search(i).group()
            args = argMent.search(i).group()
            args = re.sub('[(]|[)]', "",args)
            vfun = function(functionName, rType, args)
            functionList.append(vfun)

    return functionList


if __name__ == '__main__':
    file = "D:\Example\Example_C.C"

    lof = reading_source(file)
    vNum = 0
    for i in lof :
        vNum = vNum + 1
        print("function no : "+str(vNum))
        print("function Name : "+ i.funName)
        print("retun type : " + i.retType)
        print("arguments type& info : " + i.args)

위의 코드를 실행하면 다음과 같은 결과가 나타납니다. 

function no : 1
function Name : llist_add_begin
retun type : void
arguments type& info : struct lnode **n, int val;
function no : 2
function Name : llist_reverse
retun type : void
arguments type& info : struct lnode **n;
function no : 3
function Name : llist_display
retun type : void
arguments type& info : struct lnode *n;

실제 이런 궁금증을 가질 수 있습니다. 이와 같이 간단한 형태로 되어 있는 부분에 대해서 왜 함수와 클래스를 사용할 것인지에 대해서 의문을 가질 수 있습니다. 실제 이 부분에 대해서는 향후 C code  생성등에 사용하기 위해서 다음 형태로 코드를 작성하였습니다. 

파이썬[Python] 정규표현식을 이용한 C 소스 코드에 선언된 함수 출력하기

 

파이썬[Python] 정규표현식을 이용한 C 소스 코드에 선언된 함수 출력하기

파이썬[Python]  정규표현식을 이용한 C 소스 코드에 선언된 함수 출력하기 최근에 C소스 코드를 가지고 다양한 작업들을 하고 있습니다. 그 중 이번 포스팅에서는 C 소스 코드 또는 헤더에

appia.tistory.com

이번 포스팅에서는 파이썬[Python] C 소스 코드에 선언된 함수 정보 입력 인자, 리턴인자 정보 출력하기라는 주제로 간단히 포스팅을 해봤습니다. 이와 같은 부분들을 응용하여 현재 본인의 코드 정보를 살펴 볼 수 있는 좋은 계기가 될 수 있을 것 같습니다. 혹 궁금하신 점이나 문의 사항이 있으면 댓글 및 방명록에 문의 부탁드립니다. 감사합니다. 

반응형
Comments