부스트 :: 스피릿을 배우려고 시도하고 있으며 C 스타일 식별자의 간단한 예제를 다루고 싶습니다. 아래의 문법은 'incompatible_start_rule'이라고 주장하여 컴파일하지 않습니다. 목표는이 문법이 기본 속성 전달 규칙처럼 문자열의 벡터 대신 문자열을 반환하는 것입니다.부스트 스피릿 문법 사용자 정의 속성
template <typename IT>
struct cppIdentifier : qi::grammar<IT, std::string, space_type()>
{
cppIdentifier() : cppIdentifier::base_type(start)
{
start = char_("a-zA-Z_")[boost::phoenix::push_back(_val, _1)]
>> *(char_("a-zA-Z0-9_")[boost::phoenix::push_back(_val, _1)]);
}
qi::rule<IT, std::string, space_type> start;
};
이 작업을 수행하려면 어떻게해야합니까?
또한이 특정 문제에 대해 대안적이고 편리한 옵션이 많이 있음을 잘 알고 있지만 맞춤법 문법의 속성 유형을 조작하는 방법에 학문적으로 관심이 있으니 참고하시기 바랍니다. 대답 대신에 주석에 (있는 경우, 상속 속성 유형) 사전에
덕분에,
[tag : boost-spirit]의 [SO] 태그에 오신 것을 환영합니다. 귀하의 도움을 많이 주시면 감사하겠습니다! – sehe
정말 고마워요! 귀하의 답변을 포함하여 사이트에서 많은 것을 배웠습니다. 제가 조금만 도울 수 있다면 시도해 봅니다. 나는 또한 나 자신의 대답을 쓰는 것으로부터 꽤 많이 배운다. –
예! 그게 효과가있어, 고마워. 분명히 규칙과 문법 템플릿 인수를 더 깊이 파고들 필요가 있습니다. –