问题
I have a section of a schema for a model that I need to parse. Lets say it looks like the following.
{
type = "Standard";
hostname="x.y.z";
port="123";
}
The properties are:
- The elements may appear unordered.
- All elements that are part of the schema must appear, and no other.
- All of the elements' synthesised attributes go into a struct.
- (optional) The schema might in the future depend on the type field -- i.e., different fields based on type -- however I am not concerned about this at the moment.
回答1:
According to the Spirit forums, the following is the answer.
You might want to have a look at the permutation parser:
a ^ b ^ c
Which matches a or b or c (or a combination thereof) in any sequence.
If the objective is to parse into a struct, than the best way to test weather all essential members have been initialized, the struct members should be wrapped with boost::optional<>
The attribute presence may then be easily tested post-parsing during run-time.
来源:https://stackoverflow.com/questions/2183067/boostspirit-grammar-for-unsorted-schema