공백으로 구분되고 선택적으로 태그가 지정된 키워드 문자열을 구문 분석하려고합니다. 예Boost.Spirit 구문 분석 선택적 접두사
결장 전 식 태그이며,이 선택적descr:expense type:receivable customer 27.3
경우 (즉, 기본 태그가 가정된다).
필자는 파서가 내가 원하는 것을 할 수 없다. 나는 canonical example에서 몇 가지 사소한 수정을했다. 그 목적은 키/값 쌍 (HTTP 쿼리 문자열과 비슷 함)을 구문 분석하는 것이다. 태그가 밖으로 남아 나는 그것을 구문 분석 그러나
typedef std::pair<boost::optional<std::string>, std::string> pair_type;
typedef std::vector<pair_type> pairs_type;
template <typename Iterator>
struct field_value_sequence_default_field
: qi::grammar<Iterator, pairs_type()>
{
field_value_sequence_default_field()
: field_value_sequence_default_field::base_type(query)
{
query = pair >> *(qi::lit(' ') >> pair);
pair = -(field >> ':') >> value;
field = +qi::char_("a-zA-Z0-9");
value = +qi::char_("a-zA-Z0-9+-\\.");
}
qi::rule<Iterator, pairs_type()> query;
qi::rule<Iterator, pair_type()> pair;
qi::rule<Iterator, std::string()> field, value;
};
,의 optional<string>
거짓/비어 있지 않습니다. 오히려 가치의 사본을 얻습니다. 쌍의 두 번째 부분에도 값이 있습니다.
태그없는 키워드가 태그 (구문 규칙, 예 : 소수점 포함)가 될 수 없다면 예상대로 작동합니다.
내가 뭘 잘못하고 있니? 이것은 PEG와의 개념적인 실수인가?