文法を解析するためにboost::spiritを学習しようとしていますが、ライブラリの使用方法を正確に理解するのに苦労しています.
基本的にパーサーが入力ストリームで「Test」をヒットした場合、戻り値として 5 を出力したいと考えています。(後で、実際には、文字列メンバー「Test」と値メンバー 5 のペアを発行したいと思います。
これが私がこれまでに持っているものです:
template <typename Iterator>
struct testgrammar
: public grammar<Iterator, unsigned int()>
{
public:
testgrammar() : testgrammar::base_type(start)
{
start = std::wstring(L"Test") [ _val = 5 ] ;
}
virtual ~testgrammar(){};
rule<Iterator, unsigned int()> start;
};
main() で:
std::wstring strIn = L"Test";
std::wstring::const_iterator itBegin = strIn.begin();
std::wstring::const_iterator itEnd = strIn.end();
unsigned int nData = 0;
bool bRes = parse(itBegin, itEnd, avxgrammar<std::wstring::const_iterator>(), nData);
ただし、コンパイラが次のエラーを出力するため、間違っています。
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const boost::spirit::_val_type' (or there is no acceptable conversion)
私の質問は、_val に代入できないのはなぜですか? セマンティックアクションからそのような構造体を発行するにはどうすればよいですか?
編集 最終目標を明確にする必要があるかもしれません。テキスト ファイルをトークン/リテラル値のペアに解析したいと考えています。
よろしくお願いします。