<?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 und rules mit context]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe eine recht spezielle Frage:</p>
<p>Ist es möglich (ja vermutlich, aber wie) eine rule in einer Grammatik zu definieren, in der ich wie in einem parser weitere rules übergeben kann?</p>
<p>Okay, das war jetzt vllt wenig zu verstehen. Hier ein Beispiel:</p>
<blockquote>
<p>//sowas hier kann man mit vorgefertigeten parsern machen<br />
lexeme[*( (char_ - char_(&quot;!&quot;)) )]</p>
<p>//kann ich mir auch eine rule definieren die sowas kann. wie etwa:<br />
myRule[*( (char_ - char_(&quot;!&quot;)) )]<br />
//wenn ja, wie komme ich an den zusammen gesetzten Parser-ausdruck von den eckigen Klammern?</p>
<p>/<em>Sinn des ganzen soll sein eine XML struktur lesen zu können.<br />
Einerseits soll der Name des jeweiligen XML-ELements als inherited attribute übergeben werden,<br />
und in den eckigen klammern wie es in dem element weiter gehen soll.<br />
Also vom prinzip sowas hier:</em>/</p>
<p>//aufruf<br />
mein_dokument<br />
= xml_tag_(val(&quot;gml:MuliPoint&quot;))[<br />
*xml_tag_(val(&quot;gml:PointMember&quot;))[/*u.s.w.*/]<br />
]<br />
;</p>
<p>//def<br />
xml_tag_<br />
= lit('&lt;') &gt; lit(_r1) &gt; eps[&amp;CreateElement] &gt; *omit[xml_attribute_[&amp;CreateAttr&rsqb;&rsqb; &gt; lit('&gt;')<br />
&gt; //hier jetzt das was in den eckigen klammern steht<br />
&gt; lit(&quot;&lt;/&quot;)&gt; lit(_r1) &gt; lit('&gt;')</p>
<p>//dec<br />
qi::rule&lt;Iterator, void(std::string), Skipper&gt; xml_tag_;</p>
</blockquote>
<p>Macht das überhaupt Sinn sich hier mit dem rule-Konstrukt zu versuchen (die Syntax sieht ja den der semantic-actions für rules sehr ähnlich), oder läuft es auf eine schreiben eines eigenen parser hinaus?</p>
<p>Grüße,<br />
Jan.</p>
<p>PS: Hätte den pseudocode gerne in <code>cpp</code> -Klammern gesetzt, doch das wollter der forum-parser nicht umsetzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Hoffe es ist dennoch lesbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274057/boost-spirit-und-rules-mit-context</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 19:47:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274057.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Sep 2010 15:55:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost.spirit und rules mit context on Sat, 18 Sep 2010 15:55:21 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe eine recht spezielle Frage:</p>
<p>Ist es möglich (ja vermutlich, aber wie) eine rule in einer Grammatik zu definieren, in der ich wie in einem parser weitere rules übergeben kann?</p>
<p>Okay, das war jetzt vllt wenig zu verstehen. Hier ein Beispiel:</p>
<blockquote>
<p>//sowas hier kann man mit vorgefertigeten parsern machen<br />
lexeme[*( (char_ - char_(&quot;!&quot;)) )]</p>
<p>//kann ich mir auch eine rule definieren die sowas kann. wie etwa:<br />
myRule[*( (char_ - char_(&quot;!&quot;)) )]<br />
//wenn ja, wie komme ich an den zusammen gesetzten Parser-ausdruck von den eckigen Klammern?</p>
<p>/<em>Sinn des ganzen soll sein eine XML struktur lesen zu können.<br />
Einerseits soll der Name des jeweiligen XML-ELements als inherited attribute übergeben werden,<br />
und in den eckigen klammern wie es in dem element weiter gehen soll.<br />
Also vom prinzip sowas hier:</em>/</p>
<p>//aufruf<br />
mein_dokument<br />
= xml_tag_(val(&quot;gml:MuliPoint&quot;))[<br />
*xml_tag_(val(&quot;gml:PointMember&quot;))[/*u.s.w.*/]<br />
]<br />
;</p>
<p>//def<br />
xml_tag_<br />
= lit('&lt;') &gt; lit(_r1) &gt; eps[&amp;CreateElement] &gt; *omit[xml_attribute_[&amp;CreateAttr&rsqb;&rsqb; &gt; lit('&gt;')<br />
&gt; //hier jetzt das was in den eckigen klammern steht<br />
&gt; lit(&quot;&lt;/&quot;)&gt; lit(_r1) &gt; lit('&gt;')</p>
<p>//dec<br />
qi::rule&lt;Iterator, void(std::string), Skipper&gt; xml_tag_;</p>
</blockquote>
<p>Macht das überhaupt Sinn sich hier mit dem rule-Konstrukt zu versuchen (die Syntax sieht ja den der semantic-actions für rules sehr ähnlich), oder läuft es auf eine schreiben eines eigenen parser hinaus?</p>
<p>Grüße,<br />
Jan.</p>
<p>PS: Hätte den pseudocode gerne in <code>cpp</code> -Klammern gesetzt, doch das wollter der forum-parser nicht umsetzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Hoffe es ist dennoch lesbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1954165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1954165</guid><dc:creator><![CDATA[Ka55i0peia]]></dc:creator><pubDate>Sat, 18 Sep 2010 15:55:21 GMT</pubDate></item></channel></rss>