파서는 복잡할 필요가 없다
Parsers don't have to be complicated

bgfx의 저자 Branimir Karadžić가 개발한 bx::Scanner는 파서 생성기나 PEG 라이브러리 없이도 반복적인 스캐닝 작업을 처리하는 작은 도구 모음이다. 제로 카피, 할당 없음, 디버거에서 읽기 쉬운 설계를 강조하며, URL 파싱, INI 파싱, 파일 경로 정규화, 스택 트레이스 심볼화 등 실제 사용 사례를 통해 복잡한 파서 없이도 충분히 간결하고 안전한 코드를 작성할 수 있음을 보여준다. 이 글은 기존의 임시 파서가 반복적으로 겪는 문제를 해결하는 실용적인 대안을 제시한다.
파서는 정말로 복잡할 필요가 없습니다.
- imoverclocked
파서를 작성할 때 가장 어려운 점은 무엇이 유효한 입력으로 간주될지 인지적으로 받아들이는 것이다. 빠르고 명세가 잘 정의된 최고의 파서를 만들 수 있지만, 예상치 못한 방식으로 (남용)하게 될 사람이 반드시 있다.
유명한 예: 처음에는 많은 좋은 의도가 있었음에도 불구하고, HTML 태그는 닫힐 필요가 없고, JSON 숫자는 너무 자주 문자열로 인코딩되며, YAML은 대부분의 사람들이 기대하는 모습일 수도 있고 점점 더 JSON처럼 보일 수도 있다... 그리고 계속해서.
- mrkeen
'임시방편 바이트 조작 쓰레기'에서 '파서 조합자'까지 선을 그으면, 이건 20%도 안 갈 것이다.
링크된 URL 파서를 보면, 왜 이렇게 생기지 않았는가?
url = do scheme
authority
path
query
fragment
where
scheme = ...
authority = ...
etc.
전혀 임시방편처럼 보인다.
- f311a
불행히도, 단순한 URL 파싱은 너무 많은 것들에서 문제가 발생한다. 모든 URL 파싱 라이브러리가 적어도 수천 줄의 코드인 데에는 이유가 있다.
흔한 테스트 방법 중 하나는 ipv6 URL을 전달하는 것이다: http://[f021:d981:b487:e57d:193e:550e::]/