<?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[Frage zu boost::spirit]]></title><description><![CDATA[<p>Hiho,</p>
<p>ich habe folgenden Dateinamenaufbau</p>
<p>&quot;irgendwelche_zeichen_win32.dll&quot;</p>
<p>was immer gleich ist, ist das &quot;_win32.dll&quot; am Ende. Da ich noch mehr Sachen parsen muss, wollte ich auch das hier mit boost spirit machen.</p>
<p>Jetzt hab ich folgende Regel:</p>
<pre><code class="language-cpp">bool r = phrase_parse(
		it,
		end,

		*char_[ref(m_modelName) += _1]
		&gt;&gt; &quot;_win32.dll&quot;,
		space
		);
</code></pre>
<p>Problem: das *<em>char_</em> frisst das &quot;_win32.dll&quot; mit auf. Gibt es in spirit Möglichkeiten, sowas zu handlen? Mir würde nur einfallen, den String von hinten an zu parsen, aber das ist ja auch eher ein Workaround.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269081/frage-zu-boost-spirit</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 08:55:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269081.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jun 2010 12:36:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu boost::spirit on Fri, 18 Jun 2010 12:36:17 GMT]]></title><description><![CDATA[<p>Hiho,</p>
<p>ich habe folgenden Dateinamenaufbau</p>
<p>&quot;irgendwelche_zeichen_win32.dll&quot;</p>
<p>was immer gleich ist, ist das &quot;_win32.dll&quot; am Ende. Da ich noch mehr Sachen parsen muss, wollte ich auch das hier mit boost spirit machen.</p>
<p>Jetzt hab ich folgende Regel:</p>
<pre><code class="language-cpp">bool r = phrase_parse(
		it,
		end,

		*char_[ref(m_modelName) += _1]
		&gt;&gt; &quot;_win32.dll&quot;,
		space
		);
</code></pre>
<p>Problem: das *<em>char_</em> frisst das &quot;_win32.dll&quot; mit auf. Gibt es in spirit Möglichkeiten, sowas zu handlen? Mir würde nur einfallen, den String von hinten an zu parsen, aber das ist ja auch eher ein Workaround.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914396</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Fri, 18 Jun 2010 12:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::spirit on Fri, 18 Jun 2010 14:05:20 GMT]]></title><description><![CDATA[<p>Ich bin nciht 100%ig sicher, aber spirit müsste doch rekursive Definitionen erlauben. Dann würd ich das Ganze (in pseudo-EBNF notiert) quasi so schreiben:</p>
<pre><code>alnum := [a-z, A-Z, 0-9]

fnamecomp := '_' &gt;&gt; (
                     &quot;win32.dll&quot; 
                    | (alnum[ref(m_modelName) += ('-' + _1)] &gt;&gt; fnamecomp)
                    )

filename = alnum[ref(m_modelName) += _1] &gt;&gt; fnamecomp
</code></pre>
<p>Wies in spirit-ebnf dann richtig auszusehen hat muss ich dir überlassen <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/1914434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914434</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 18 Jun 2010 14:05:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::spirit on Fri, 18 Jun 2010 14:29:06 GMT]]></title><description><![CDATA[<p>Frage: Probierst du hier nicht gerade ein Ei mit einem Vorschlaghammer zu öffnen?</p>
<pre><code class="language-cpp">std::string name = &quot;irgendwelche_zeichen_win32.dll&quot;;

std::size_t pos = name.rfind('_');
std::string x = name.substr(0, pos);
</code></pre>
<p>Nur weil man Boost.Spirit einsetzt, muss man es ja nicht gleich für jede Kleinigkeit einsetzen.</p>
<p>Ansonsten wenn du bei Boost.Spirit bleiben möchtest, dann ist das Problem hier eben, dass sich Boost.Spirit &quot;greedy&quot; verhält. Eine Regel wird so lange angewandt, wie es eben möglich ist und erst wenn diese fehlschlägt, wird probiert die nächste anzuwenden. In der alten Classic Version wurde das in der Dokumentation angesprochen:<br />
<a href="http://www.boost.org/doc/libs/1_35_0/libs/spirit/doc/rationale.html#exhaustive_rd" rel="nofollow">http://www.boost.org/doc/libs/1_35_0/libs/spirit/doc/rationale.html#exhaustive_rd</a></p>
<p>Darin wird auch auf eine Technik verwiesen, wie man das Problem umgehen kann. Wie es in der neuen Version genau aussieht, weiss ich nicht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914443</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 18 Jun 2010 14:29:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::spirit on Sun, 20 Jun 2010 16:58:04 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>Hiho,</p>
<p>ich habe folgenden Dateinamenaufbau</p>
<p>&quot;irgendwelche_zeichen_win32.dll&quot;</p>
<p>was immer gleich ist, ist das &quot;_win32.dll&quot; am Ende. Da ich noch mehr Sachen parsen muss, wollte ich auch das hier mit boost spirit machen.</p>
<p>Jetzt hab ich folgende Regel:</p>
<pre><code class="language-cpp">bool r = phrase_parse(
		it,
		end,
		
		*char_[ref(m_modelName) += _1]
		&gt;&gt; &quot;_win32.dll&quot;,
		space
		);
</code></pre>
<p>Problem: das *<em>char_</em> frisst das &quot;_win32.dll&quot; mit auf. Gibt es in spirit Möglichkeiten, sowas zu handlen? Mir würde nur einfallen, den String von hinten an zu parsen, aber das ist ja auch eher ein Workaround.</p>
</blockquote>
<p>Da gibt es mehrere Möglichkeiten. Entweder man verwendet 'a - b', welches 'a' erkennt solange es nicht 'b' ist:</p>
<pre><code class="language-cpp">*((char_ - &quot;_win32&quot;)[ref(m_modelName) += _1])
</code></pre>
<p>oder man verwendet Predikate:</p>
<pre><code class="language-cpp">*(!lit(&quot;_win32&quot;) &gt;&gt; char_[ref(m_modelName) += _1])
</code></pre>
<p>wobei !... die Eingabe testet, ohne vorwärts zu gehen.</p>
<p>HTH<br />
Regards Hartmut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915230</guid><dc:creator><![CDATA[hkaiser]]></dc:creator><pubDate>Sun, 20 Jun 2010 16:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu boost::spirit on Tue, 22 Jun 2010 05:31:30 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Frage: Probierst du hier nicht gerade ein Ei mit einem Vorschlaghammer zu öffnen?</p>
</blockquote>
<p>Ja^^ Mich hat das Problem aber vom Prinzip her interessiert. Daher meine Frage. Und da ich später noch kompliziertere Sachen parsen muss als den Dateinamen, wollte ich es auch gerne für dieses einfache Beispiel wissen.</p>
<p>Thx an alle für die Antworten <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>MfG Pellaeon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1915504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1915504</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 22 Jun 2010 05:31:30 GMT</pubDate></item></channel></rss>