Pyparsing 모듈코드는 Git-hub에 올려져 있으니 궁금한 사항은 찾아보면 된다.
https://github.com/pyparsing/pyparsing/blob/master/pyparsing.py
그 중 내가 사용한 함수들을 설명해 보고자 한다.
word()
word 함수로 원하는 단어를 파싱 할 수 있다.
여기서 alphanums는 알파벳 + 숫자를 의미한다. 만약 다르게 사용하고 싶으면 아래 코드를 참조 하자
1 2 3 4 5 6 | from pyparsing import Word ident = Word(alphanums) # 알파벳 + 숫자 ident_2 = Word(alphas) # 알파벳 + 숫자 ident_3 = Word(nums) # Only 숫자 ident_4 = Word(alphanums + '_') # '_' 도 포함 | cs |
예제
1 2 3 4 5 6 7 8 9 10 11 12 | from pyparsing import Word, alphas, nums text = ''' I have 2 apples and 1 banana ''' ident = Word(alphas) ident_2 = Word(nums) parsing = ident_2("number") + ident("fruit") for fn,s,e in parsing.scanString(text): print('fruit :', fn.fruit, ' number : ', fn.number ) | cs |
결과
fruit : apples number : 2 fruit : banana number : 1
* PyParsing 코드에 정의된 부분을 보면 좀 더 이해가 잘될거다.
1 2 3 4 5 6 7 8 | # PyParsing 코드 일부 alphas = string.ascii_uppercase + string.ascii_lowercase nums = "0123456789" hexnums = nums + "ABCDEFabcdef" alphanums = alphas + nums _bslash = chr(92) printables = "".join(c for c in string.printable if c not in string.whitespace) | cs |
Keyword()
word를 이용해 원하는 자료형을 파싱할 수 있다면 KetWord는 특정 단어를 파싱하는 방법이다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from pyparsing import Word, Keyword, alphanums text = ''' #define prototype.h int a = 0 if(a == 1): print("done") ''' ident = Word(alphanums + "." + "_") parsing = Keyword("#define") + ident("name") for fn,s,e in parsing.scanString(text): print(fn.name) | cs |
결과
prototype.h
응용
만약 2개 이상의 특정 단어를 파싱하고 싶다면 Keyword로는 범용적으로 파싱이 불가능 하다.
이럴때는 Word를 이용하면 쉽게 파싱이 가능하다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from pyparsing import Word, Keyword, alphanums text = ''' I have many fruit banana = 3 carrot = 1 apple = 2 tomaoto = 5 ''' ident = Word(alphanums) fruit = Word("banana" + "apple") parsing = fruit("name") + "=" + ident("num") for fn,s,e in parsing.scanString(text): print(fn.name, "->", fn.num) | cs |
결과
banana -> 3
apple -> 2
'파이썬 > Pyparsing을 이용한 C코드 파싱' 카테고리의 다른 글
파이썬(Pyparsing)을 이용한 C코드 파싱 - 2. 다양한 함수 (0) | 2019.01.17 |
---|---|
파이썬(Pyparsing)을 이용한 C코드 파싱 (1) | 2019.01.17 |