Re: [v3] Tiny project, state of v3 etc

Seth via Spirit-general <[email protected]> Sat, 29 Jun 2024 00:56:14 +0200
Newsgroups gmane.comp.parsers.spirit.general
Message-ID <[email protected]>
--===============4657539686924256696==
Content-Type: multipart/alternative;
 boundary=a0068ae12e974df1bcc03d7db59e13a2

--a0068ae12e974df1bcc03d7db59e13a2
Content-Type: text/plain

On Fri, Jun 28, 2024, at 5:56 PM, Michael Powell wrote:
> Hello,
> 
> [...] negative versions should also be supported: "1.2", ".2", "1.", "1".
> 
> This is very key, although C++ float is probably my only choice there, I do not know. Precision is an absolute must, floating point precision issues cannot be tolerated. 

The decimal being "very key" are no issue at all. Here's demo using decimal floats and all the input formats you specified and then some: https://coliru.stacked-crooked.com/a/8aef2c571995464b

#include <boost/fusion/adapted/std_tuple.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/spirit/home/x3.hpp>
#include <fmt/ostream.h>
#include <fmt/ranges.h>
#include <fmt/std.h>

using Num   = boost::multiprecision::cpp_dec_float_50;
using Coord = std::tuple<Num, Num, Num>;
template <> struct fmt::formatter<Num> : ostream_formatter {};

int main() {
    namespace x3 = boost::spirit::x3;
    auto num_    = x3::real_parser<Num>{};
    auto coord_  = num_ >> num_ >> num_;
    auto file_   = x3::skip(x3::blank)[coord_ % x3::eol];

    for (std::string_view input : {
             R"(1.1 2.2 3.3
                .1 .2 .3
                1. 2. 3.
                1 2 3)",
             R"(-1.1 -2.2 -3.3
                -.1 -.2 -.3
                -1. -2. -3.
                -1 -2 -3)",
             R"(1.1e1 2.2e2 3.3e3
                .1e1 .2e2 .3e3
                1.e1 2.e2 3.e3
                1e1 2e2 3e3)",
             R"(1.1e-1 2.2e-2 3.3e-3
                .1e-1 .2e-2 .3e-3
                1.e-1 2.e-2 3.e-3
                1e-1 2e-2 3e-3)",
             R"(inf -inf nan)",
         }) {

        std::vector<Coord> coords;
        if (parse(begin(input), end(input), file_, coords))
            fmt::print("Parsed:\n - {}\n", fmt::join(coords, "\n - "));
        else
            fmt::print("Failed to parse\n");
    }
}

This prints (live on coliru as well):

Parsed:
 - (1.1, 2.2, 3.3)
 - (0.1, 0.2, 0.3)
 - (1, 2, 3)
 - (1, 2, 3)
Parsed:
 - (-1.1, -2.2, -3.3)
 - (-0.1, -0.2, -0.3)
 - (-1, -2, -3)
 - (-1, -2, -3)
Parsed:
 - (11, 220, 3300)
 - (1, 20, 300)
 - (10, 200, 3000)
 - (10, 200, 3000)
Parsed:
 - (0.11, 0.022, 0.0033)
 - (0.01, 0.002, 0.0003)
 - (0.1, 0.02, 0.003)
 - (0.1, 0.02, 0.003)
Parsed:
 - (inf, -inf, nan)

> In summary, might Spirit, either v2 or v3, possibly work there? I do not expect the rules, synthesis, etc, to be that complex. It will be trickier, perhaps, to message a listener from the parser, but not insurmountable, I think.
> 
> Thoughts?
Note that X3 is not yet interface stable, so you might want to prefer Qi: https://coliru.stacked-crooked.com/a/1bdbbc130ffba345

Please don't use SWIG unless you are wrapping an API for use in other languages like Python or Matlab.

Regards, Seth

--a0068ae12e974df1bcc03d7db59e13a2
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Fri, Jun 28,=
 2024, at 5:56 PM, Michael Powell wrote:<br></div><blockquote type=3D"ci=
te" id=3D"qt" style=3D""><div dir=3D"ltr"><div>Hello,<br></div><div><br>=
</div><div>[...] negative versions should also be supported: "1.2", ".2"=
, "1.", "1".<br></div><div><br></div><div>This is very key, although C++=
 float is probably my only choice there, I do not know. Precision is an =
absolute must,&nbsp;floating point precision issues cannot be tolerated.=
 <br></div></div></blockquote><div><div><br></div><div>The decimal being=
 "very key" are no issue at all. Here's demo using decimal floats and al=
l the input formats you specified and then some: <a href=3D"https://coli=
ru.stacked-crooked.com/a/8aef2c571995464b">https://coliru.stacked-crooke=
d.com/a/8aef2c571995464b</a><br></div><div><br></div><div><span class=3D=
"font" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><sp=
an class=3D"size" style=3D"font-size:0.889em;">#include &lt;boost/fusion=
/adapted/std_tuple.hpp&gt;</span></span><br></div><div><span class=3D"fo=
nt" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span =
class=3D"size" style=3D"font-size:0.889em;">#include &lt;boost/multiprec=
ision/cpp_dec_float.hpp&gt;</span></span><br></div><div><span class=3D"f=
ont" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span=
 class=3D"size" style=3D"font-size:0.889em;">#include &lt;boost/spirit/h=
ome/x3.hpp&gt;</span></span><br></div><div><span class=3D"font" style=3D=
"font-family:menlo, consolas, monospace, sans-serif;"><span class=3D"siz=
e" style=3D"font-size:0.889em;">#include &lt;fmt/ostream.h&gt;</span></s=
pan><br></div><div><span class=3D"font" style=3D"font-family:menlo, cons=
olas, monospace, sans-serif;"><span class=3D"size" style=3D"font-size:0.=
889em;">#include &lt;fmt/ranges.h&gt;</span></span><br></div><div><span =
class=3D"font" style=3D"font-family:menlo, consolas, monospace, sans-ser=
if;"><span class=3D"size" style=3D"font-size:0.889em;">#include &lt;fmt/=
std.h&gt;</span></span><br></div><div><br></div><div><span class=3D"font=
" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span cl=
ass=3D"size" style=3D"font-size:0.889em;">using Num&nbsp;&nbsp; =3D boos=
t::multiprecision::cpp_dec_float_50;</span></span><br></div><div><span c=
lass=3D"font" style=3D"font-family:menlo, consolas, monospace, sans-seri=
f;"><span class=3D"size" style=3D"font-size:0.889em;">using Coord =3D st=
d::tuple&lt;Num, Num, Num&gt;;</span></span><br></div><div><span class=3D=
"font" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><sp=
an class=3D"size" style=3D"font-size:0.889em;">template &lt;&gt; struct =
fmt::formatter&lt;Num&gt; : ostream_formatter {};</span></span><br></div=
><div><br></div><div><span class=3D"font" style=3D"font-family:menlo, co=
nsolas, monospace, sans-serif;"><span class=3D"size" style=3D"font-size:=
0.889em;">int main() {</span></span><br></div><div><span class=3D"font" =
style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span clas=
s=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp; namespace x3 =
=3D boost::spirit::x3;</span></span><br></div><div><span class=3D"font" =
style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span clas=
s=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp; auto num_&nbs=
p;&nbsp;&nbsp; =3D x3::real_parser&lt;Num&gt;{};</span></span><br></div>=
<div><span class=3D"font" style=3D"font-family:menlo, consolas, monospac=
e, sans-serif;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;=
&nbsp;&nbsp; auto coord_&nbsp; =3D num_ &gt;&gt; num_ &gt;&gt; num_;</sp=
an></span><br></div><div><span class=3D"font" style=3D"font-family:menlo=
, consolas, monospace, sans-serif;"><span class=3D"size" style=3D"font-s=
ize:0.889em;">&nbsp;&nbsp;&nbsp; auto file_&nbsp;&nbsp; =3D x3::skip(x3:=
:blank)[coord_ % x3::eol];</span></span><br></div><div><br></div><div><s=
pan class=3D"font" style=3D"font-family:menlo, consolas, monospace, sans=
-serif;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&=
nbsp; for (std::string_view input : {</span></span><br></div><div><span =
class=3D"font" style=3D"font-family:menlo, consolas, monospace, sans-ser=
if;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R"(1.1 2.2 3.3</=
span></span><br></div><div><span class=3D"font" style=3D"font-family:men=
lo, consolas, monospace, sans-serif;"><span class=3D"size" style=3D"font=
-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .1 .2 .3</span></span><br></div><div>=
<span class=3D"font" style=3D"font-family:menlo, consolas, monospace, sa=
ns-serif;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp; 1. 2. 3.</span></span><br></div><div><span class=3D"font" style=3D=
"font-family:menlo, consolas, monospace, sans-serif;"><span class=3D"siz=
e" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2 3)",</span></span=
><br></div><div><span class=3D"font" style=3D"font-family:menlo, consola=
s, monospace, sans-serif;"><span class=3D"size" style=3D"font-size:0.889=
em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp; R"(-1.1 -2.2 -3.3</span></span><br></div><div><span class=3D"font"=
 style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span cla=
ss=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -.1 -.2 -.3<=
/span></span><br></div><div><span class=3D"font" style=3D"font-family:me=
nlo, consolas, monospace, sans-serif;"><span class=3D"size" style=3D"fon=
t-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1. -2. -3.</span></span><br></div><=
div><span class=3D"font" style=3D"font-family:menlo, consolas, monospace=
, sans-serif;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; -1 -2 -3)",</span></span><br></div><div><span class=3D"font"=
 style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span cla=
ss=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R"(1.1e1 2.2e2 3.3e3</span></s=
pan><br></div><div><span class=3D"font" style=3D"font-family:menlo, cons=
olas, monospace, sans-serif;"><span class=3D"size" style=3D"font-size:0.=
889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp; .1e1 .2e2 .3e3</span></span><br></div><div><s=
pan class=3D"font" style=3D"font-family:menlo, consolas, monospace, sans=
-serif;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp; 1.e1 2.e2 3.e3</span></span><br></div><div><span class=3D"font" st=
yle=3D"font-family:menlo, consolas, monospace, sans-serif;"><span class=3D=
"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1e1 2e2 3e3)",</s=
pan></span><br></div><div><span class=3D"font" style=3D"font-family:menl=
o, consolas, monospace, sans-serif;"><span class=3D"size" style=3D"font-=
size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp; R"(1.1e-1 2.2e-2 3.3e-3</span></span><br></div><div><spa=
n class=3D"font" style=3D"font-family:menlo, consolas, monospace, sans-s=
erif;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp; .1e-1 .2e-2 .3e-3</span></span><br></div><div><span class=3D"font" s=
tyle=3D"font-family:menlo, consolas, monospace, sans-serif;"><span class=
=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.e-1 2.e-2 3.=
e-3</span></span><br></div><div><span class=3D"font" style=3D"font-famil=
y:menlo, consolas, monospace, sans-serif;"><span class=3D"size" style=3D=
"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1e-1 2e-2 3e-3)",</span></span><=
br></div><div><span class=3D"font" style=3D"font-family:menlo, consolas,=
 monospace, sans-serif;"><span class=3D"size" style=3D"font-size:0.889em=
;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp; R"(inf -inf nan)",</span></span><br></div><div><span class=3D"font" =
style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span clas=
s=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; }) {</span></span><br></div><div><br></div><div><span c=
lass=3D"font" style=3D"font-family:menlo, consolas, monospace, sans-seri=
f;"><span class=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; std::vector&lt;Coord&gt; coords;</span></span><=
br></div><div><span class=3D"font" style=3D"font-family:menlo, consolas,=
 monospace, sans-serif;"><span class=3D"size" style=3D"font-size:0.889em=
;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (parse(begin(input), en=
d(input), file_, coords))</span></span><br></div><div><span class=3D"fon=
t" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span c=
lass=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmt::print("Parsed:\n - {}\n", fmt=
::join(coords, "\n - "));</span></span><br></div><div><span class=3D"fon=
t" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><span c=
lass=3D"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp; else</span></span><br></div><div><span class=3D"font" styl=
e=3D"font-family:menlo, consolas, monospace, sans-serif;"><span class=3D=
"size" style=3D"font-size:0.889em;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmt::print("Failed to parse\n");</span></=
span><br></div><div><span class=3D"font" style=3D"font-family:menlo, con=
solas, monospace, sans-serif;"><span class=3D"size" style=3D"font-size:0=
.889em;">&nbsp;&nbsp;&nbsp; }</span></span><br></div><div><span class=3D=
"font" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><sp=
an class=3D"size" style=3D"font-size:0.889em;">}</span></span><br></div>=
<div><br></div><div>This prints (live on coliru as well):<br></div><div>=
<br></div><div><pre class=3D"f0" style=3D"display:inline-block;margin-to=
p:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px=
;padding-right:0px;padding-bottom:0px;padding-left:0px;">Parsed:<br></pr=
e></div><div><pre class=3D"f0" style=3D"display:inline-block;margin-top:=
0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;p=
adding-right:0px;padding-bottom:0px;padding-left:0px;"> - (1.1, 2.2, 3.3=
)<br></pre></div><div><pre class=3D"f0" style=3D"display:inline-block;ma=
rgin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-=
top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"> - (0.1,=
 0.2, 0.3)<br></pre></div><div><pre class=3D"f0" style=3D"display:inline=
-block;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px=
;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"=
> - (1, 2, 3)<br></pre></div><div><pre class=3D"f0" style=3D"display:inl=
ine-block;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:=
0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0p=
x;"> - (1, 2, 3)<br></pre></div><div><pre class=3D"f0" style=3D"display:=
inline-block;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-le=
ft:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left=
:0px;">Parsed:<br></pre></div><div><pre class=3D"f0" style=3D"display:in=
line-block;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left=
:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0=
px;"> - (-1.1, -2.2, -3.3)<br></pre></div><div><pre class=3D"f0" style=3D=
"display:inline-block;margin-top:0px;margin-right:0px;margin-bottom:0px;=
margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;pad=
ding-left:0px;"> - (-0.1, -0.2, -0.3)<br></pre></div><div><pre class=3D"=
f0" style=3D"display:inline-block;margin-top:0px;margin-right:0px;margin=
-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bo=
ttom:0px;padding-left:0px;"> - (-1, -2, -3)<br></pre></div><div><pre cla=
ss=3D"f0" style=3D"display:inline-block;margin-top:0px;margin-right:0px;=
margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padd=
ing-bottom:0px;padding-left:0px;"> - (-1, -2, -3)<br></pre></div><div><p=
re class=3D"f0" style=3D"display:inline-block;margin-top:0px;margin-righ=
t:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0p=
x;padding-bottom:0px;padding-left:0px;">Parsed:<br></pre></div><div><pre=
 class=3D"f0" style=3D"display:inline-block;margin-top:0px;margin-right:=
0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;=
padding-bottom:0px;padding-left:0px;"> - (11, 220, 3300)<br></pre></div>=
<div><pre class=3D"f0" style=3D"display:inline-block;margin-top:0px;marg=
in-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-r=
ight:0px;padding-bottom:0px;padding-left:0px;"> - (1, 20, 300)<br></pre>=
</div><div><pre class=3D"f0" style=3D"display:inline-block;margin-top:0p=
x;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;pad=
ding-right:0px;padding-bottom:0px;padding-left:0px;"> - (10, 200, 3000)<=
br></pre></div><div><pre class=3D"f0" style=3D"display:inline-block;marg=
in-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-to=
p:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"> - (10, 20=
0, 3000)<br></pre></div><div><pre class=3D"f0" style=3D"display:inline-b=
lock;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;p=
adding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;">P=
arsed:<br></pre></div><div><pre class=3D"f0" style=3D"display:inline-blo=
ck;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;pad=
ding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"> - =
(0.11, 0.022, 0.0033)<br></pre></div><div><pre class=3D"f0" style=3D"dis=
play:inline-block;margin-top:0px;margin-right:0px;margin-bottom:0px;marg=
in-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding=
-left:0px;"> - (0.01, 0.002, 0.0003)<br></pre></div><div><pre class=3D"f=
0" style=3D"display:inline-block;margin-top:0px;margin-right:0px;margin-=
bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bot=
tom:0px;padding-left:0px;"> - (0.1, 0.02, 0.003)<br></pre></div><div><pr=
e class=3D"f0" style=3D"display:inline-block;margin-top:0px;margin-right=
:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px=
;padding-bottom:0px;padding-left:0px;"> - (0.1, 0.02, 0.003)<br></pre></=
div><div><pre class=3D"f0" style=3D"display:inline-block;margin-top:0px;=
margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;paddi=
ng-right:0px;padding-bottom:0px;padding-left:0px;">Parsed:<br></pre></di=
v><div><pre class=3D"f0" style=3D"display:inline-block;margin-top:0px;ma=
rgin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding=
-right:0px;padding-bottom:0px;padding-left:0px;"> - (inf, -inf, nan)<br>=
</pre></div><div><br></div></div><blockquote type=3D"cite" id=3D"qt" sty=
le=3D""><div dir=3D"ltr"><div>In summary, might Spirit, either v2 or v3,=
 possibly work there? I do not expect the rules, synthesis, etc, to be t=
hat complex. It will be trickier, perhaps, to message a listener from th=
e parser, but not insurmountable, I think.<br></div><div><br></div><div>=
Thoughts?<br></div></div></blockquote><div><div><div><div><span class=3D=
"font" style=3D"font-family:menlo, consolas, monospace, sans-serif;"><sp=
an class=3D"size" style=3D"font-size:0.889em;">Note that X3 is not yet i=
nterface stable, so you might want to prefer Qi: </span></span><a href=3D=
"https://coliru.stacked-crooked.com/a/1bdbbc130ffba345">https://coliru.s=
tacked-crooked.com/a/1bdbbc130ffba345</a><br></div><div><br></div><div><=
div>Please don't use SWIG unless you are wrapping an API for use in othe=
r languages like Python or Matlab.<br></div><div><br></div></div></div>R=
egards, Seth<br></div></div><div><br></div></body></html>
--a0068ae12e974df1bcc03d7db59e13a2--


--===============4657539686924256696==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============4657539686924256696==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Spirit-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spirit-general

--===============4657539686924256696==--