<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Boost.Spirit Parser crasht mit Segfault -]]></title><description><![CDATA[<p>Hiho!</p>
<p>Ich versuche aus Spaß einen Parser mit Boost.Spirit.Qi für die <a href="http://s1.directupload.net/images/120818/54weiflc.jpg" rel="nofollow">verlinkte EBNF</a> zu erstellen.<br />
Ich bin gerade bei <em>Aussage</em> angekommen.</p>
<p>Das Problem sind wohl entweder die zyklischen Abhängigkeiten oder einfach ein Fehler in Boost.Any, denn <strong>bei bestimmten Ausdrücken crasht das Programm mit einem Segfault</strong> (unten aufgelistet).</p>
<p>Mein Code bisher:</p>
<pre><code class="language-cpp">#define BOOST_LCAST_NO_WCHAR_

#include &lt;boost/spirit/home/qi.hpp&gt;
#include &lt;boost/spirit/include/qi_char_class.hpp&gt;

#include &lt;string&gt;

inline void ensureUpperCase(std::string&amp; str)
{
        for(auto iter = str.begin();iter != str.end();++iter)
                *iter = std::toupper(*iter);
}

template &lt;typename Iterator&gt;
struct Programm : boost::spirit::qi::grammar&lt;Iterator, std::string()&gt;
{
        Programm() : Programm::base_type(expression)
        {
                using boost::spirit::ascii::char_;
//////////////! ACHTUNG, HIER FÄNGT DAS WESENTLICHE AN!
                logic_or = &quot;OR&quot;;
                logic_and = &quot;AND&quot;;
                logic_not = &quot;NOT&quot;;

                binary_logic = logic_and | logic_or;
                unary_logic = logic_not;

                binary_logic_expr = expression &gt;&gt; binary_logic &gt;&gt; expression;
                unary_logic_expr = unary_logic &gt;&gt; expression;

                boolean = char_('T') | 'F';
                character = boost::spirit::ascii::upper;
                index = char_('0') | '1' | '2' | '3' | '4' | '5' | '6' | '7';

                variable = +character;

                expression = boolean
                           | binary_logic_expr
                           | unary_logic_expr
                           | braced_expr
                           | variable &gt;&gt; !index;

                braced_expr = '(' &gt;&gt; expression &gt;&gt; ')';
        }

        typedef boost::spirit::qi::rule&lt;Iterator, std::string()&gt; str_rule;
        typedef boost::spirit::qi::rule&lt;Iterator, char()&gt; ch_rule;

        str_rule logic_or,
                 logic_and,
                 logic_not,

                 binary_logic,
                 unary_logic,

                 binary_logic_expr,
                 unary_logic_expr;

        ch_rule  boolean,
                 character,
                 index;

        str_rule variable;

        str_rule expression,
                 braced_expr;
};

#include &lt;iostream&gt;

int main()
{
        for(Programm&lt;std::string::const_iterator&gt; parser;;)
        {
                std::string str;
                std::getline(std::cin, str);
                ensureUpperCase(str);

                std::string result;
                std::string::const_iterator iter = str.begin(),
                                            end  = str.end();

                bool res = boost::spirit::qi::parse(iter, end, parser, result);

                if(res
                &amp;&amp; iter == end)
                        std::cout &lt;&lt; &quot;Valid!&quot;;
                else
                        std::cout &lt;&lt; &quot;Invalid! Stopped at &quot; &lt;&lt; std::string(iter, end) &lt;&lt; '\n';;

                std::cout &lt;&lt; '\n';
        }
}
</code></pre>
<p>Kompiliert sauber.<br />
<code>expression</code> ist äquivalent zum im EBNF definierten <em>Aussage</em>.</p>
<p>Folgende Ausdrücke bringen den Segfault (die sind eig. richtig):</p>
<ul>
<li><em>nott</em></li>
<li><em>(t)</em></li>
<li><em>var4</em></li>
</ul>
<p>Der Segfault tritt in einer Boost.Any Funktion auf, die Templates sind da stark verschachtelt (unter anderem mit Boost.Fusion und <code>qi::rule</code> ).</p>
<p>Folgende Ausdrücke bringen zwar nicht das Programm zum crashen, sind jedoch komischerweise als Falsch bewertet:</p>
<ul>
<li><em>tandt</em></li>
</ul>
<p>Ich hoffe, jemand kann mir weiterhelfen (da ich keinen Plan mehr hab was ich noch machen soll), bestimmt mache ich einen einfachen Fehler...</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307160/boost-spirit-parser-crasht-mit-segfault</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 18:05:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307160.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Aug 2012 14:24:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 14:24:30 GMT]]></title><description><![CDATA[<p>Hiho!</p>
<p>Ich versuche aus Spaß einen Parser mit Boost.Spirit.Qi für die <a href="http://s1.directupload.net/images/120818/54weiflc.jpg" rel="nofollow">verlinkte EBNF</a> zu erstellen.<br />
Ich bin gerade bei <em>Aussage</em> angekommen.</p>
<p>Das Problem sind wohl entweder die zyklischen Abhängigkeiten oder einfach ein Fehler in Boost.Any, denn <strong>bei bestimmten Ausdrücken crasht das Programm mit einem Segfault</strong> (unten aufgelistet).</p>
<p>Mein Code bisher:</p>
<pre><code class="language-cpp">#define BOOST_LCAST_NO_WCHAR_

#include &lt;boost/spirit/home/qi.hpp&gt;
#include &lt;boost/spirit/include/qi_char_class.hpp&gt;

#include &lt;string&gt;

inline void ensureUpperCase(std::string&amp; str)
{
        for(auto iter = str.begin();iter != str.end();++iter)
                *iter = std::toupper(*iter);
}

template &lt;typename Iterator&gt;
struct Programm : boost::spirit::qi::grammar&lt;Iterator, std::string()&gt;
{
        Programm() : Programm::base_type(expression)
        {
                using boost::spirit::ascii::char_;
//////////////! ACHTUNG, HIER FÄNGT DAS WESENTLICHE AN!
                logic_or = &quot;OR&quot;;
                logic_and = &quot;AND&quot;;
                logic_not = &quot;NOT&quot;;

                binary_logic = logic_and | logic_or;
                unary_logic = logic_not;

                binary_logic_expr = expression &gt;&gt; binary_logic &gt;&gt; expression;
                unary_logic_expr = unary_logic &gt;&gt; expression;

                boolean = char_('T') | 'F';
                character = boost::spirit::ascii::upper;
                index = char_('0') | '1' | '2' | '3' | '4' | '5' | '6' | '7';

                variable = +character;

                expression = boolean
                           | binary_logic_expr
                           | unary_logic_expr
                           | braced_expr
                           | variable &gt;&gt; !index;

                braced_expr = '(' &gt;&gt; expression &gt;&gt; ')';
        }

        typedef boost::spirit::qi::rule&lt;Iterator, std::string()&gt; str_rule;
        typedef boost::spirit::qi::rule&lt;Iterator, char()&gt; ch_rule;

        str_rule logic_or,
                 logic_and,
                 logic_not,

                 binary_logic,
                 unary_logic,

                 binary_logic_expr,
                 unary_logic_expr;

        ch_rule  boolean,
                 character,
                 index;

        str_rule variable;

        str_rule expression,
                 braced_expr;
};

#include &lt;iostream&gt;

int main()
{
        for(Programm&lt;std::string::const_iterator&gt; parser;;)
        {
                std::string str;
                std::getline(std::cin, str);
                ensureUpperCase(str);

                std::string result;
                std::string::const_iterator iter = str.begin(),
                                            end  = str.end();

                bool res = boost::spirit::qi::parse(iter, end, parser, result);

                if(res
                &amp;&amp; iter == end)
                        std::cout &lt;&lt; &quot;Valid!&quot;;
                else
                        std::cout &lt;&lt; &quot;Invalid! Stopped at &quot; &lt;&lt; std::string(iter, end) &lt;&lt; '\n';;

                std::cout &lt;&lt; '\n';
        }
}
</code></pre>
<p>Kompiliert sauber.<br />
<code>expression</code> ist äquivalent zum im EBNF definierten <em>Aussage</em>.</p>
<p>Folgende Ausdrücke bringen den Segfault (die sind eig. richtig):</p>
<ul>
<li><em>nott</em></li>
<li><em>(t)</em></li>
<li><em>var4</em></li>
</ul>
<p>Der Segfault tritt in einer Boost.Any Funktion auf, die Templates sind da stark verschachtelt (unter anderem mit Boost.Fusion und <code>qi::rule</code> ).</p>
<p>Folgende Ausdrücke bringen zwar nicht das Programm zum crashen, sind jedoch komischerweise als Falsch bewertet:</p>
<ul>
<li><em>tandt</em></li>
</ul>
<p>Ich hoffe, jemand kann mir weiterhelfen (da ich keinen Plan mehr hab was ich noch machen soll), bestimmt mache ich einen einfachen Fehler...</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243118</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 Aug 2012 14:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 14:38:18 GMT]]></title><description><![CDATA[<p>Nur eine superdünne Vermutung, aber sind Code Generation von Boost.Spirit und Deiner Software sowie Calling Conventions gleich? Und ist auch die Debug- und nicht Release-LIB inkludiert? Solchartige Fehler hatte ich wegen solchen Geschichten vor kurzem en masse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243127</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 18 Aug 2012 14:38:18 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 14:49:04 GMT]]></title><description><![CDATA[<p>Danke schonmal, jedoch gibt es AFAIR überhaupt keine LIB für Spirit, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243131</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 Aug 2012 14:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 16:22:54 GMT]]></title><description><![CDATA[<p>Du erzeugst einen Stackoverflow, wenn expression boolean nicht matchen kann, dann binary_logic_expr zu matchen versucht und gleich wieder in den expression-Parser geht. So, wie deine Grammatik da steht, ist es keine LL-Grammatik, und du wirst sie umformulieren müssen, um sie mit Spirit zu parsen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243148</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 18 Aug 2012 16:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 19:48:58 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Du erzeugst einen Stackoverflow, wenn expression boolean nicht matchen kann, dann binary_logic_expr zu matchen versucht und gleich wieder in den expression-Parser geht. So, wie deine Grammatik da steht, ist es keine LL-Grammatik, und du wirst sie umformulieren müssen, um sie mit Spirit zu parsen.</p>
</blockquote>
<p>Wahnsinn! Hast Recht. Also lag es an der Rekursion. Was würd' ich bloß ohne Seldon machen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Soll ich vielleicht einfach Boost.Regex nehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243194</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 Aug 2012 19:48:58 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 19:52:51 GMT]]></title><description><![CDATA[<p>Seldon, wie würdest du es denn machen? Also die ursprüngliche EBNF kann man mit Spirit nicht parsen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243195</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 Aug 2012 19:52:51 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 20:01:27 GMT]]></title><description><![CDATA[<p>Die Sprache, die du zu parsen versuchst, ist nicht regulär, also wird boost.regex dich nicht groß weiterbringen. Die ursprüngliche EBNF wird man wohl mit einem LR-Parsergenerator verarbeitet kriegen (wie bison oder yacc), aber Spirit baut ja im Grunde nichts anderes als einen Recdesc-Parser, also LL, und dort kann man halt keine linksrekursiven Regeln haben.</p>
<p><a href="http://www.zenspider.com/Languages/PCCTS/LR2LL.html" rel="nofollow">Das hier</a> könnte dir bei der Umstellung helfen, wie wahrscheinlich auch ein Blick in dein Vorlesungsskript. Du erwartest aber hoffentlich nicht, dass ich dir deine Hausaufgaben abnehme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243199</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 18 Aug 2012 20:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 20:03:29 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Du erwartest aber hoffentlich nicht, dass ich dir deine Hausaufgaben abnehme.</p>
</blockquote>
<p>Niemals, das wäre nicht nur eine peinliche Schande, sondern außerdem ist das keine Hausaufgabe.</p>
<p>Danke für den Link!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243201</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 Aug 2012 20:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 20:19:34 GMT]]></title><description><![CDATA[<p>Gut, was ich herausgefunden habe, ist dass die meisten LR-Parsergeneratoren Grammar-Files nutzen. Die sind komplex strukturiert; <em>basil</em> sieht gut aus. Sehe ich mir mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243206</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 Aug 2012 20:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 20:20:29 GMT]]></title><description><![CDATA[<p>@seldon: Du kennst nicht zufaellig eine Einfuehrung in Grammatiken und deren Grundbegriffe? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243207</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 18 Aug 2012 20:20:29 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sat, 18 Aug 2012 21:23:57 GMT]]></title><description><![CDATA[<p>UltraGram ist klasse, und perfekt für meine Zwecke geeignet. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243218</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 18 Aug 2012 21:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 16:20:34 GMT]]></title><description><![CDATA[<p>IIIIEEEEHH!!<br />
UltraGrams Codegenerator produziert Code mit malloc/realloc/free!<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Ich werde erstmal ein Viertelstündchen heulen. Darf sowas nicht jeden Tag machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243350</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 19 Aug 2012 16:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 16:21:57 GMT]]></title><description><![CDATA[<p>Und was ist das bitte für ein OOP-Modell, in dem Klassen nicht mal ihre eigenen Abhängigkeiten bereitstellen? Jetzt muss ich einen Haufen Header einbinden -.-</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243351</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 19 Aug 2012 16:21:57 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 17:07:05 GMT]]></title><description><![CDATA[<p>Ich habe heute eine sehr wichtige Lektion gelernt. Acuh wenn Ultragram einen schönen Editor hatte, usw.</p>
<p>War Whalecalf doch so geil und hatte richtiges C++ auf Lager (inkl. Templates, C++-Streams, schön generisch alles, usw.).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243357</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 19 Aug 2012 17:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 17:14:57 GMT]]></title><description><![CDATA[<p><strong>Und wieder Blödsinn.</strong><br />
Da wird <code>std</code> und ein anderer Namespace mitten im Header geöffnet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243359</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 19 Aug 2012 17:14:57 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 20:10:29 GMT]]></title><description><![CDATA[<p>wie wärs einfach, wenn du die Grammatik umformulierst, sodass sie LL ist? das ist nicht so schwer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243390</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 19 Aug 2012 20:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 20:18:15 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>wie wärs einfach, wenn du die Grammatik umformulierst, sodass sie LL ist? das ist nicht so schwer.</p>
</blockquote>
<p>Na ich weiß nicht, ich will lieber noch einige Dutzend Stunden mit WhaleCalf verbringen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ich versuch mich mal mit Umformulierung. Mal sehen, was bei rauskommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243392</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 19 Aug 2012 20:18:15 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 20:43:56 GMT]]></title><description><![CDATA[<p>Der Trick ist, dass du das so mformulieren kannst, dass du erst etwas liest, was keine Aussage ist und erst dann ein &quot;and&quot; oder &quot;or&quot; optional folgt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243395</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 19 Aug 2012 20:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 20:45:59 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>[...] ich will lieber noch einige Dutzend Stunden mit WhaleCalf verbringen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> ... dann hast wenigstens keine Zeit im Forum zu nerven <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243396</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 19 Aug 2012 20:45:59 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Sun, 19 Aug 2012 20:54:26 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Der Trick ist, dass du das so mformulieren kannst, dass du erst etwas liest, was keine Aussage ist und erst dann ein &quot;and&quot; oder &quot;or&quot; optional folgt.</p>
</blockquote>
<p>Und die Klammern und NOT. Also praktisch ein Baum:</p>
<pre><code class="language-cpp">NOT (T AND F)
</code></pre>
<p>Wird zu</p>
<pre><code class="language-cpp">NOT     //UND SCHLIEßLICH DAS
     /
BRACED_EXPR  //DANN DAS
   / 
 AND         // DANN DAS
 / \
T   F        //ZUERST LESEN (Oder Variable &gt;&gt; !Index)
</code></pre>
<p>Oder geh ich wieder in die falsche Richtung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243399</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 19 Aug 2012 20:54:26 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Mon, 20 Aug 2012 05:12:26 GMT]]></title><description><![CDATA[<p>das einzige was du verhindern musst, ist dass &quot;Aussage&quot; linksrekursiv ist (das heißt, der Parser darf nicht ohne irgendetwas zu lesen die Ableitung Aussage-&gt;Aussage-&gt;Aussage-&gt;Aussage anwenden können. Schreib die Regeln einfahc so um, dass immer mindestens 1 Zeichen gelesen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243464</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 20 Aug 2012 05:12:26 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Mon, 20 Aug 2012 06:40:51 GMT]]></title><description><![CDATA[<p>Bevor ich das jetzt angehe: Ist danach die Syntax die selbe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243475</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 20 Aug 2012 06:40:51 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Mon, 20 Aug 2012 06:57:36 GMT]]></title><description><![CDATA[<p>Also ich hatte nie Probleme mit <code>flex</code> und <code>bison</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243478</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 20 Aug 2012 06:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Mon, 20 Aug 2012 07:16:53 GMT]]></title><description><![CDATA[<p>Ich schaue mir gerade deinen Code an:</p>
<p>ich würde ja die Variablen als Kleinbuchstaben lassen. Das macht die Sache eindeutig zu parsen (in LL(1))</p>
<p>Alternative Formulierung für Aussage:</p>
<p>( !() ist 0 oder 1 mal)</p>
<pre><code>Aussage := (&quot;T&quot; | &quot;F&quot; | &quot;(&quot; Aussage &quot;)&quot; | &quot;NOT&quot; Aussage | Variable [Index])
           !( &quot;AND&quot; Aussage | &quot;OR&quot; Aussage )
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2243484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243484</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 20 Aug 2012 07:16:53 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Mon, 20 Aug 2012 16:00:56 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<pre><code>Aussage := (&quot;T&quot; | &quot;F&quot; | &quot;(&quot; Aussage &quot;)&quot; | &quot;NOT&quot; Aussage | Variable [Index])
           !( &quot;AND&quot; Aussage | &quot;OR&quot; Aussage )
</code></pre>
</blockquote>
<p>Teste ich gleich mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243775</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 20 Aug 2012 16:00:56 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Spirit Parser crasht mit Segfault - on Mon, 20 Aug 2012 16:21:32 GMT]]></title><description><![CDATA[<p>Verdammt Otze... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Wieso tust du so etwas? Jetzt hab ich NIX gelernt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Einzig und allein gibt es den Fehler, dass</p>
<p><em>asdf4</em></p>
<p>Als falsch ausgewertet wird. Aber das fix ich selber <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich werde aber auch noch einmal eine Version mit WhaleCalf machen (die API, die das Problem mit unsigned char hatte). Die ist zwar todeshässlich, doch ist es mal eine Erfahrung wert mit todeshässlichen APIs zu arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2243778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2243778</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Mon, 20 Aug 2012 16:21:32 GMT</pubDate></item></channel></rss>