Boost Spirit을 사용하여 바이트 스트림 데이터를 구문 분석 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/285200

문제

Spirit (Boost C ++ 라이브러리의 일부)을 사용하여 스트림에서 나오는 이진 데이터를 구문 분석 할 수 있습니까? 예를 들어 소켓에서 구조, 바이트 및 개별 비트 플래그로 데이터를 구문 분석하는 데 사용할 수 있습니까? 감사!

도움이 되었습니까?

해결책

부스트 정신은 파서를 사용하여 정의 할 수 있습니다. 확장 된 backus – naur 양식 (EBNF) 구문 템플릿 메타 프로그래밍. 매우 유연하며 구문 분석 프로세스의 모든 단계에서 추상 클래스를 사용하여 사용자 정의 할 수 있습니다. 이진 데이터 스트림을 처리하려면 기본 유형이 텍스트 입력에 맞게 조정되므로 사용자 정의 스캐너 클래스를 구현해야합니다. 더 읽을 수 있습니다 스캐너와 구문 분석 섹션의 섹션 정신 사용자 가이드.

겸손한 견해로는 이진 데이터 스트림은 핸드 롤 직렬화 코드로 처리하는 것이 가장 좋습니다. 정신은 마크 업 또는 스크립팅 언어와 같은 잘 형성된 문법에 더 적합합니다. 예를 들어, LUA의 완전한 구문 EBNF에서 제공됩니다. 따라서 스피릿을 사용하여 맞춤형 파서를 구축하는 것이 합리적 일 수 있습니다. 반면에 동기화 바이트 및 CRC 브래킷 메시지와의 독점 직렬 데이터 링크는 EBNF를 A 인 경우 EBNF를 정의하기 위해 더 많은 작업이 필요합니다. 상황이없는 문법 심지어 존재합니다.

부록

Boost Spirit의 최신 버전에는 이진 데이터를 다루는 기능이 포함됩니다.

다른 팁

방금 출시 된 Spirit2에는 이진을 구문 분석 할 수있는 시설이 있습니다. 이것을 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top