학부 커리큘럼의 최종테크인 컴파일러는 꼭 들어야 하지 않겠나 하는 생각으로 넣있지만 영 근성이 발휘가 안된다. 첫번째 숙제 lexical analyzer를 아예 제출을 안 하기도 했지만, 이번에 두번째 숙제가 나와서 한꺼번에 하는 중이다.
일단 스캐너를 다 짰는데 시간이 약 3시간 정도 소요되었다.
오래간만에 c++코딩을 하면서 느낀점이 있는데, STL 이나 각종 stream 관련 클래스를 사용할때는 잘 살펴보고 사용해야 한다는 점이다.
1. stringstream 인스턴스를 하나 만들고 기존에 들어있던 원소를 싹 비워버리는 메쏘드라 생각되어 clear()라는
메쏘드를 사용했다. 그런데 계속 결과값이 이상해서 추적해보니 clear() 라는 메쏘드는 ios의 상위 클래스에서 에러플래그를
초기화 하는 메쏘드다. 내가 원하는 결과를 얻으려면 instance.str(""); 으로 해야 한다고 해서 그렇게 했지만 뭔가 좀 맘에 안든다.
2. set< string >의 find 메쏘드는 원소를 찾는 메쏘드가 아니다. 어이없게도 find("string") 이라고 하면 bool 값으로 true, false가 나오는 것으로 알고 있었는데, count를 해서 0 이상의 값이 나오는지를 검사해야 내가 원하는 결과를 얻는 것이었다. multiset 이라면 같은 내용의 항목이 여러 개 들어갈수 있겠지만, set은 반드시 한 항목만 들어가는데 흠..
저러한 소모적인 시행착오를 거치고 나니 ctrl+click 이나 F2만 누르면 해당 메쏘드가 무슨 일을 하고 인자값, 결과값이 깔금하게 정리되어있는 java+eclipse 환경이 그렇게 그리울수가 없다. 원인으로는 c++의 기본 라이브러리에 대한 경험이 비교적 적다는 점이고, 익숙했던 환경에서 했던것처럼 빨리 진행할수 없었던 답답함 때문에 더 부각된것 같다.