프로그래밍 - 해당되는 글 1건
C++에는 IO Stream library와 STL이 표준 라이브러리로 있습니다.
둘은 모두 std라는 namespace를 사용합니다.
그 외에 C Standard Library도 사용할 수 있죠.
IO Stream은 입출력에 관련된 것이고,
STL은 자료구조와 알고리즘에 대한 것입니다.

C++을 주로 사용하는 프로그래머라면, 이제 Boost 라이브러리도 알아둘 필요가 있습니다.

STL을 사용해보신 분은 아시겠지만, MFC나 C standard library처럼, 클래스 정의나 함수 정의만 보고 "아 이것은 이렇게 사용하면 되겠구나.." 라고 하기 힘듭니다.

Boost는 한 발 더 나아갑니다. 완전 모르겠습니다.

우선 Boost 라이브러리에 대해 말씀드리지요.
Boost 라이브러리는 C++ 라이브러리입니다. 대부분이 STL처럼 템플릿 라이브러리입니다. 그리고, Boost 라이브러리는 여러 하위 라이브러리들의 집합입니다. 하위 라이브러리들은 모두 70개가 조금 안됩니다. 휴우~ 이것들을 다 공부할 필요는 없습니다. 필요한 것만 하면 되지요.
Boost 라이브러리는 뭐다라고 단정지어 말하기 힘듭니다. STL과 굳이 구분을 하자면, 저는 보통 이렇게 이야기합니다.

"STL은 알고리즘이고, Boost는 유틸리티야."

완전히 옳은 것은 아닙니다. 하지만, 이렇게 생각하는 것이 속 편합니다. 하지만, 이러한 경향이 매우 강하지요.
하위 라이브러리는 매우 다양합니다.
graph와 같이 알고리즘을 구현한 것도 있고, functional이나 lambda와 같이 functional programming을 지원하는 것도 있습니다. 그런가 하면, regex++과 같이 정규표현식을 파싱하는 것도 있고, iostreams와 같이 iostream 라이브러리를 확장한 것도 있습니다.
ref와 같이 크기가 매우 작은 (작은 헤더 파일 하나) 라이브러리도 있는가 하면, Spirit과 같이 엄청 큰 규모의 라이브러리도 있습니다.

한 마디로, Boost는 C++을 위한 종합 선물 세트!!!

그 중, 제가 요즘 공부했던 Spirit이라는 라이브러리는 문자열 파싱에 관심있는 분이라면 꼭 한 번 보시는 것도 좋습니다.
가장 유명한 Parser generator로는 Lex/Yacc과 그 후손들인 Flex/Bison과 같은 LALR(1) 파서 생성기가 있고, ANTLR과 같은 LL(k) 파서 생성기가 있습니다.
비록 성능은 이들에 미치지 못하지만, 매우 많은 장점을 지닌 파서 생성기가 바로 Spirit입니다.
장점만 나열해보지요.
  • 완전한 C++ 코드이다. 따라서 C++에서 사용하는 디버깅 등이 모두 사용 가능하다.
  • Debugging과 Exception(Error) handling을 위한 많은 기능이 제공된다.
  • C++ 컴파일러 외에 다른 툴이 필요하지 않다.
  • <중요> Symbol table과 Parser Tree, Abstract Syntax Tree를 알아서 만들어주거나 매우 만들기 쉽다.
  • 동적 파서를 쓸 수 있다. (이거 참 유용할 듯합니다.)
제가 네 번에 걸쳐 세미나를 했을 때, Lex/Yacc에 비해 좋은 점을 모르겠다고 합니다. 그 분은 Lex/Yacc에 익숙하니까 그렇죠. Yacc에 symantic action을 넣으려면, C 코드로 난잡하게 집어넣고, 순서도 맞춰야 하고... 좀 복잡하죠. 그런데, Spirit은 symantic action이 들어갈 곳이 매우 직관적입니다.
그리고, 구문 분석기와 어휘 분석기가 따로 존재하지 않습니다. 그냥 알아서 합니다. 하하하

Spirit을 이해하기 위해서는 C++ 템플릿을 가지고 똥도 닦을 수 있어야 합니다. Spirit은 템플릿 라이브러리입니다. 게다가, Expression Template이라는 것을 사용합니다. (이전 글에서 잠깐 언급했는데, 이해하기 상당히 난해합니다. -_-;) STL에서도 나오는 Function object 혹은 Functor라는 것은 땅바닥에 눌러붙은 껌처럼 생각할 수 있어야 합니다.

그러한 과정을 거친 끝에, 겨우 온라인 문서를 다 봤습니다. 아.. 대충 이해는 가는데, 써먹으려니 또 막막하네요. 호호 그래도 많이많이 써먹어야죠.

아직까지는 C++과 같은 복잡한 문법 컴파일러는 못만든다고 합니다. C 파서는 Spirit으로 누가 만들어놨더군요. 저는 C++코드를 파싱하여 Visual Studio 등과 같은 툴에 있는 'Class view'와 같은 것을 만드려고 합니다. 어짜피 타입 이름과, 식별자들만 파악할 거니까 그리 어렵지 않게 할 수 있겠죠?

C++을 쓰시는 분들.. Boost 라이브러리 한 번 거들떠 보자.
Trackbacks  1 | Comments 

풀리비’s Blog is powered by Daum & Tattertools.com