일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pythongui
- pyqt5
- 파워포인트
- windows
- Android
- 파이썬
- python
- 파이썬GUI
- python3
- 깃
- office
- VBA
- 비주얼베이직
- 안드로이드
- Excel
- matlab
- 윈도우11
- win32com
- 아웃룩
- 윈도우10
- Outlook
- 오피스
- Windows11
- git
- pandas
- 파이썬3
- 엑셀
- Windows10
- html
- 문자열
Appia의 IT세상
파이썬[Python] 정규표현식을 이용한 C 소스 코드에 선언된 함수 출력하기 본문
파이썬[Python] 정규표현식을 이용한 C 소스 코드에 선언된 함수 출력하기
최근에 C소스 코드를 가지고 다양한 작업들을 하고 있습니다. 그 중 이번 포스팅에서는 C 소스 코드 또는 헤더에 선언되어 있는 함수를 출력하는 부분들에 대해서 이야기를 해보고자 합니다.
먼저, 참고로 하는 소스코드는 다음 링크에 있는 코드를 활용하여 별도의 파일로 만들어서 활용하였습니다.
https://c.happycodings.com/sorting-searching/code12.html
이번 작업을 하기 위해서, 약간의 정규식 작업을 진행하였습니다. 함수를 도출하기 위해서, 약간의 꼼수를 사용했습니다.
'(void|int|float)[ ]{1,}[\w]{1,}[(].{0,}[)][;]'
정규식에서 위에 보이는 부분들을 활용하였습니다. 가장 앞선 부분에서 리턴타입으로 올수 있는 부분들에 대해서(void|int|float)형태로 선별하였고, 그 다음 공백에 대해서 표현하고, 그 다음 함수 이름이 들어 올 수 있게, [\w]{1,}부분을 입력하였습니다. 그럼 코드를 한번 살펴보겠습니다.
import re
def reading_source(path):
sourcecode = open(path,"r")
data = sourcecode.readlines()
number = 0
notWord = re.compile('(void|int|float)[ ]{1,}[\w]{1,}[(].{0,}[)][;]')
for i in data:
val_i = notWord.search(i)
if val_i != None :
print(i)
return number
if __name__ == '__main__':
file = "D:\Example\Example_C.C"
countline = reading_source(file)
위의 코드를 실행하면 다음과 같은 화면이 나타납니다.
void llist_add_begin(struct lnode **n, int val);
void llist_reverse(struct lnode **n);
void llist_display(struct lnode *n);
이와 같이 코드에 선언된 함수들이 표시가 됩니다. 그럼 여기에서 함수의 이름만 출력해보도록 하겠습니다. 위에서 부분을 활용하여 다음과 같은 코드 부분을 작성하였습니다. 가장 먼저, 위에서 '(void|int|float)[ ]{1,}|[(].{0,}[)][;]'부분과 re.sub 부분을 이용하여 함수의 앞 뒤 부분을 정리하였습니다. 그럼 코드에서 살펴보도록 하겠습니다.
import re
def reading_source(path):
sourcecode = open(path,"r")
data = sourcecode.readlines()
number = 0
notWord = re.compile('(void|int|float)[ ]{1,}[\w]{1,}[(].{0,}[)][;]')
for i in data:
val_i = notWord.search(i)
if val_i != None :
functionName = re.sub('(void|int|float)[ ]{1,}|[(].{0,}[)][;]', "",i)
print(functionName)
return number
if __name__ == '__main__':
file = "D:\Example\Example_C.C"
countline = reading_source(file)
위의 코드를 실행하면 다음과 같은 결과가 나타납니다.
llist_add_begin
llist_reverse
llist_display
이와 같은 방법으로 함수의 이름만 별도로 출력할 수 있습니다.
파이썬[Python] C 소스 코드 공백포함, 공백 미포함 코드라인 수 확인하기
이번 포스팅에서는 파이썬[Python] 정규표현식을 이용한 C 소스 코드에 선언된 함수 출력하기라는 주제로 포스팅을 해봤습니다. 이러한 부분들은 향후 소스코드에 정적 분석등에 활용할 수 있습니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다.
'Python > Python 응용' 카테고리의 다른 글
파이썬[Python] 추출된 카톡 대화에서 사람마다 말한횟수 카운팅 하기 (0) | 2021.08.21 |
---|---|
파이썬[Python] C 소스 코드에 선언된 함수 정보 입력 인자, 리턴인자 정보 출력하기 (0) | 2021.07.28 |
파이썬[Python] C 소스 코드 공백포함, 공백 미포함 코드라인 수 확인하기 (0) | 2021.07.23 |
엑셀[Excel] Win32com을 입력받은 데이터 양(행,열)가 불규칙할 때 사용하기 좋은 팁 (0) | 2021.07.05 |
파이썬[Python] 딕셔너리(Dictionary)의 키(Key)가 다른 딕셔너리에 존재여부 확인하기 (0) | 2021.06.30 |