boost spirit 예제

이 장에서는 부스트.정신 라이브러리를 소개합니다. Boost.Spirit는 텍스트 형식에 대한 구문 분석기를 개발하는 데 사용됩니다. 예를 들어 Boost.Spirit를 사용하여 구성 파일을 로드하는 파서를 개발할 수 있습니다. Boost.Spirit은 이진 형식에도 사용할 수 있지만 이 점에서의 유용성은 제한적입니다. 마이크 루이스는 `부스트 스피릿 최적화 – 부스트:정신을 사용하여 빠른 AST 세대를 타오르는`라는 놀라운 경험 보고서를 게시했습니다. 그는 에포크 프로그래밍 언어(Spirit.Classic을 기반으로 함)에 대한 오래된 컴파일러를 가져와 Spirit.Qi와 Spirit.Lex를 사용하여 성능을 조정한 방법을 설명합니다. 그의 결과는 예외적이다, 그는 이전 버전에 비해 약 천 배 속도 업을 얻었다. 컴파일러에 대한 전체 코드는 여기에서 다운로드 할 수 있습니다. 책 부스트 C ++ 라이브러리는 내가 개인적으로 꽤 유용 발견 정신에 대한 장이 있습니다.

그것은 온라인으로 사용할 수 있습니다, 여기에 직접 링크입니다: Boost.Spirit 추가 논리 적 구문 분석기를 제공합니다. 부스트:::qi:float_, 부스트::정신::qi::double_, 및 부스트::정신::qi::bool_ 부동 점 번호와 부울 값을 읽을 수 있는 숫자 구문 분석기입니다. 부스트::spirit::qi::eol을 사용하면 줄 끝 문자를 테스트할 수 있습니다. 부스트::정신:::qi:byte_ 및 부스트::정신::qi::word는 하나 또는 두 개의 바이트를 읽는 데 사용할 수 있습니다. 부스트::spirit:qi::word 및 기타 이진 구문 분석자는 플랫폼의 종말성을 인식하고 그에 따라 구문 분석합니다. 플랫폼에 관계없이 특정 endianness를 기반으로 구문 분석하려는 경우 boost:spirit::qi::little_word 및 부스트:::qi::qi::big_word와 같은 구문 분석기를 사용할 수 있습니다. Boost.Spirit는 PEG(구싱 표현 문법)를 사용하여 규칙을 설명할 것으로 예상합니다. PEG는 확장 백투스-나우르 형태(EBNF)와 관련이 있습니다.

이러한 언어에 익숙하지 않더라도 이 장의 예제는 시작하기에 충분해야 합니다. 파서가 둘 사이에 공백이 없는 경우에만 두 자리를 수락하려면 boost::spirit::qi:qi::parse() 또는 지시문 부스트:::qi::lexeme을 사용합니다. 이 예제에서는 의미 체계 작업과 함께 인라인 파서 표현식을 사용하는 방법을 보여 주며 있습니다. 이 장에서는 구문 분석기 개발에 중점을 둡니다. 예제는 주로 부스트에서 클래스와 기능을 사용::정신과 부스트::정신::제. 이러한 클래스 및 함수의 경우 헤더 파일 부스트/spirit/include/qi.hpp를 포함하는 것으로 충분합니다. 부스트 /spirit/include/qi.hpp와 같은 마스터 헤더 파일을 포함하지 않으려면 부스트 /spirit / 포함 / 포함 / 개별적으로 헤더 파일을 포함 할 수 있습니다. 이 디렉터리에서만 헤더 파일을 포함하는 것이 중요합니다. 부스트 / 정신 / 포함 / 사용자에 대한 인터페이스입니다. 다른 디렉터리에서 헤더 파일은 새 라이브러리 버전에서 변경할 수 있습니다. 예제 11.7은 하나 이상의 숫자를 예상하는 +ascii::digit을 가진 파서를 정의합니다.

이 구문, 특히 더하기 기호(+)는 정규식에서 사용되는 구문과 유사합니다. 더하기 기호는 문자열에서 적어도 한 번 발생할 것으로 예상되는 문자 또는 문자 그룹을 식별합니다. 예제를 시작하고 하나 이상의 숫자를 입력하면 true가 표시됩니다. 공백에 의해 자릿수가 구분되는지 여부는 중요하지 않습니다. 파서는 공백없이 숫자만 허용해야하는 경우 boost::spirit::qi:lexeme을 다시 사용합니다.