boost::Spirit Grammar for unsorted schema
-
24-09-2019 - |
Question
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.
Solution
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.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow