2014-10-19 3 views
1

나는 머리를 감싸고있을 수없는 난처한 간단한 문제가 있습니다. 나는 부스트 문서 how to parse into structs을 읽고 있습니다. 그 장에 대한 sample code provided은 간단합니다 - 또는 그렇게 생각했습니다. 나는 아주 간단한 변화를 만들고 싶다. 다음과 같이 두 가지 (또는 그 이후 이상) 규칙에 ...부스트 Qi 파싱을 구조체로 이해하려고 시도합니다.

start %= 
    lit("employee") 
    >> '{' 
    >> int_ >> ',' 
    >> quoted_string >> ',' 
    >> quoted_string >> ',' 
    >> double_ 
    >> '}' 
    ; 

:

나는 시작 규칙을 분할하고 싶지

params %= 
    >> int_ >> ',' 
    >> quoted_string >> ',' 
    >> quoted_string >> ',' 
    >> double_; 

start %= 
    lit("employee") 
    >> '{' 
    >> params 
    >> '}' 
    ; 

을 아무리 I를 시도했다 직원 구조체에 올바르게 값을 구문 분석 할 수 없습니다. 입력을 인식하는 실행중인 프로그램이 있어도 속성은 구조체에 기록되지 않습니다. 모든 것이 "최상위"규칙에 지정된 경우 구문 분석이 올바르게 작동하는 것 같습니다. 확실하게, 나는 틀렸다?! 실제로 구현해야하는 파서에 대해보다 구조화 된 접근 방식이 필요합니다.

또한 올바른 유형의 params 규칙이 무엇인지 분명하지 않습니다. 당신이 정말 수,

은 내가이 상황에서 부스트 v1.46.1

답변

2

함께 일하고 있어요 언급해야 ... 나는 qi::rule<Iterator, fusion::vector<int, std::string, std::string, double>, ascii::space_type>을 생각하고 있어요,하지만 내 컴파일러는 아주 많이 좋아하는 것 같지 않았다

Live On Coliru

qi::rule<Iterator, employee(), ascii::space_type> params; 
+0

이름 : Jeez 오 ... 타 : params가 직접 employee 속성을 노출하기 너, 너! 나는 당신의 대답을 기대하고있다 :) 왜'fusion :: vector'가 그런 상황에서 타겟 구조체로 암시 적으로 변환 가능하지 않은지 당신은 알고 있는가? 문서의 관련 장 (들)을 가르쳐 주시겠습니까? – djf

+0

_synthesized_ 속성이 _exposed 속성 _으로 어떻게 변형되는지 속성 호환성 규칙이 관리한다고 생각합니다. 그러나 귀하의 상황에서는 이미 규칙 정의의 _exposed_ 속성 유형이므로 해당 호환성 규칙 ("?")에 "취약"하지 않습니다. 내가 말할 수있는 것은 실제로 합성 된 속성 유형으로 반환하여 "규칙 <>"을 위장하는 것이 전형적이라는 것입니다. 나는 우리가 가리킬 수있는 직접적인 문서가 없다고 생각한다. (사실 이것은 의도적으로 속성 compat. magic은 직관적이어야하고 구현 세부 사항이 이상적이다) – sehe