修正したい次のコードがありますが、ブーストスピリットはまったく初めてです。私はREを知っていますが、精神的に正確に行う方法は知りません.
これがパーサーです。
Parser() : Parser::base_type(root)
{
braces = lit('{') >> *(iso8859_1::space) >> lit('}');
str = lexeme[lit('"') >> raw[*(~iso8859_1::char_('"'))] >> lit('"')];
tolleaf = raw[+(~iso8859_1::char_("\"{}= \t\r\n"))];
leaf = raw[+(iso8859_1::alnum | iso8859_1::char_("-._:"))];
taglist = lit('{') >> omit[*(iso8859_1::space)] >> lexeme[( ( str | skip[tolleaf] ) % *(iso8859_1::space) )] >> omit[*(iso8859_1::space)] >> lit('}');
object = raw[lit('{') >> *(root) >> *(iso8859_1::space) >> lit('}')];
objlist = raw[lit('{') >> *( *(iso8859_1::space) >> object[&pushObj] ) >> *(iso8859_1::space) >> lit('}')];
assign = raw[(*(iso8859_1::space) >> ( leaf[&setLHS] | str[&setLHS]) >> *(iso8859_1::space) >> lit('=')
>> *(iso8859_1::space)
>> ( leaf[&setRHSleaf] | str[&setRHSleaf] | taglist[&setRHStaglist] | objlist[&setRHSobjlist] | object[&setRHSobject] )
>> *(iso8859_1::space))];
root = +(assign | braces);
str.name("str");
leaf.name("leaf");
taglist.name("taglist");
object.name("object");
objlist.name("objlist");
assign.name("assign");
braces.name("braces");
root.name("root");
}
そして、これは私が解析しようとしている形式です:
employees=
{
{
province_pop_id=
{
province_id=1
index=0
type=9
}
count=1750
}
{
province_pop_id=
{
province_id=1
index=1
type=9
}
count=34
}
}
問題は二重 {{ です。もし私が持っているなら
blahblah=
{
value=
{
2
}
}
それは正常に動作します。
私はこれを知っています
objlist = raw[lit('{') >> *( *(iso8859_1::space) >> object[&pushObj] ) >> *(iso8859_1::space) >> lit('}')];
変更する必要がありますが、方法がわかりません。