I need to write reader class for a program config file, and I'm trying to determine the best way to approach this.
I have some experience with boost::spirit (actually, just enough to know that I am terrible at writing grammars), and a good bit of experience with regular-expressions.
Other than that, I can't think of much. So my options seem to be:
- boost::spirit
- std or boost regex
- ol' fashion string parsing
I am looking for suggestions or advice on how to proceed - or even pseudo-code should anyone feel inclined.
I realize this is a bit of an opinion-based question, but I'm really struggling with writers-block here. I'm worried I'll start down a path, and waste a lot of time before realizing it was a poor choice.
The config file format is already defined, and looks like this:
Group1 {
Scalar1 = 500
Scalar2 = 45.5
Scalar3 = My Value
List1 {
LS1 = 123
LS2 = hello world
}
List2 {
LS1 = 456
LS2 = goodbye world
}
Array1 [
300
200
25
]
Array2 [
true
false
true
false
]
};
- The config will always have at least one
Group
. - A
Group
will contain 0..nScalar
,List
, and/orArray
entries - A
scalar
is:label = value
- A
List
is a labeled container ofScalars
- An
Array
is a labeled container of values
The labels shown (eg. Scalar1
, Scalar2
, ...) are just examples. They can be called anything: maxrate = 500
, avg_val = 45.5
, would have been just as valid.