Pyparsing에는 기본적인 함수들 이외에 많은 함수들이 있다.
활용하면 더 다양한 구문들을 파싱할 수 있다.
그 중 몇가지 함수를 설명 하겠다.
White()
'\n', space 바 등 공백을 파싱하고 싶을 때 사용한다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from pyparsing import Word, alphas, nums, White text = ''' if(banana() == 0) { apple() } ''' ident = Word(alphas + "_") ident_2 = Word(nums) parsing = White() + ident("func") for fn,s,e in parsing.scanString(text): print(fn.func) | cs |
결과
if
apple
LineStart()
만약 줄 바뀌자마자 바로 오는 단어만 파싱하고 싶을 때 사용 한다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from pyparsing import Word, alphas, nums, White, LineStart text = ''' if(banana() == 0) { apple() } Orange() ''' ident = Word(alphas + "_") ident_2 = Word(nums) parsing = LineStart() + ident("func") for fn,s,e in parsing.scanString(text): print(fn.func) | cs |
결과
if
Orange
Optional()
파싱 하고 싶은 구문의 구성 요소가 가변적일때 사용하면 된다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from pyparsing import Word, alphas, nums, White, LineStart text = ''' banana is sweet apple is very sweet carrot is bitter ''' ident = Word(alphas + "_") ident_2 = Word(nums) parsing = ident("name") + Keyword("is") + Optional("very") + ident("taste") for fn,s,e in parsing.scanString(text): print(fn.name, " : ", fn.taste) | cs |
결과
banana : sweet
apple : sweet
carrot : bitter
SkipTo()
원하는 단어 이전의 문자열 까지 스킵한다. 말은 스킵이지만 지나치는건 아니고 원하는 단어나 구문이 나오기 전까지의 문자열을 하나의 리스트에 저장한다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from pyparsing import Word, alphas, nums, SkipTo, Keyword text = ''' if(banana is sweet) { apple is very sweet carrot is bitter } ''' ident = Word(alphas + "_") ident_2 = Word(nums) parsing = Keyword("if") + "("+ SkipTo("carrot") + ident("name") + Keyword("is") + Optional("very") + ident("taste") for fn,s,e in parsing.scanString(text): print(fn.name, " : ", fn.taste) | cs |
결과
carrot : bitter
* text의 밑줄 친 부분이 SkipTo()함수로 파싱되었다.
1 2 3 4 5 6 7 8 9 10 | ''' if(banana is sweet) { apple is very sweet carrot is bitter } ''' | cs |
ignore()
파싱 하지 않을 요소를 정의해 파싱하지 않고 무시한다.
예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from pyparsing import Word, alphas, nums, White, LineStart text = ''' banana is sweet apple is very sweet // apple is very delicious carrot is bitter ''' ident = Word(alphas + "_") ident_2 = Word(nums) parsing = ident("name") + Keyword("is") + Optional("very") + ident("taste") parsing.ignore("//" + SkipTo("\n")) for fn,s,e in parsing.scanString(text): print(fn.name, " : ", fn.taste) | cs |
결과
'파이썬 > Pyparsing을 이용한 C코드 파싱' 카테고리의 다른 글
파이썬(Pyparsing)을 이용한 C코드 파싱 - 1. 기본 사용법 (0) | 2019.01.17 |
---|---|
파이썬(Pyparsing)을 이용한 C코드 파싱 (1) | 2019.01.17 |