I am planning on doing a script transformation utility (for extended diagnostic information) using Boost.Spirit 2.
While there is support for line information etc.
As per the mailing list, Spirit.Classic positional iterators can also be used with Spirit 2.
There is also an article on an iter_pos-parser on the Spirit-blog.
I will update when i had time to test.
I realize I noticed the question late, but let me add this anyway. I wrote a sample of an INI file parser in another answer:
This uses a 'simple' semantic action with line_pos_iterator
.
Here is the fruit of my labour: https://gist.github.com/1425972
POSITIONINFO == 0
map<string, map<string, string> >
for the sections)When POSITIONINFO == 1
output is textnode_t
:
struct textnode_t {
int sline, eline, scol, ecol;
string_t text;
};
This means that the resulting map<textnode_t, map<textnode_t, textnode_t> >
is able to report exactly what (line,col) start and end points mark the individual text nodes.
Here is a reduced demo. For full description and extensive test cases see the original anser or the code at github
[Cat1]
name1=100 #skipped
name2=200 \#not \\skipped
name3= dhfj dhjgfd
Parse success!
[Cat1]
name1 = 100
name2 = 200 \#not \\skipped
name3 = dhfj dhjgfd
Parse success!
[[L:1,C2 .. L1,C6:Cat1]]
[L:2,C2 .. L2,C7:name1] = [L:2,C8 .. L2,C12:100 ]
[L:6,C2 .. L6,C7:name2] = [L:6,C8 .. L6,C27:200 \#not \\skipped]
[L:7,C2 .. L7,C7:name3] = [L:7,C11 .. L7,C22:dhfj dhjgfd]
Here is another useful article that explains how to use the exception that the phrase_parse
function throws.
The article describes how to get error messages like this:
Exception: parse error at file STDIN line 1 column 10
'123,42.0,a,1.4'
^- here