<?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[Interpreter-Pattern aus Backus-Naur erstellen]]></title><description><![CDATA[<p>Also ich bin ja manchmal ein wenig Begriffsstutzig- trotzdem glaub ich, hab ich das Interpreter-Pattern jetzt verstanden. Ich ging von falschen Voraussetzungen aus- wodurch ich jeden erdenklichen Schluß ziehen konnte- nur nicht den Richtigen.</p>
<p>Der Interpreterbaum beschreibt ja die komplette Grammatik und man jagt seine Token da durch, um am Ende hoffentlich sein Ergebnis zu bekommen.</p>
<p>Hier mal ein Beispiel für eine Grammatik:</p>
<pre><code>ausdruck ::= literal | and | or | not | '(' ausdruck ')' .
and      ::= ausdruck '&amp;' ausdruck .
or       ::= ausdruck '|' ausdruck .
not      ::= '!' ausdruck .

literal ::= ('A' | 'B' | ... | 'Z' | zahl)* .
zahl    ::= ['-'] (ziffer)* ['.' (ziffer)*] .
ziffer  ::=  '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '0' .
</code></pre>
<p>Die Frage ist mehr eine Verständnisfrage- und ich möchte nichts von Rindviechern, wie Bison's oder Yacc's hören.. <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="😃"
    /><br />
Wie generiere ich jetzt meinen Parserbaum daraus?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185601/interpreter-pattern-aus-backus-naur-erstellen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 23:57:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185601.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Jun 2007 06:12:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 06:12:20 GMT]]></title><description><![CDATA[<p>Also ich bin ja manchmal ein wenig Begriffsstutzig- trotzdem glaub ich, hab ich das Interpreter-Pattern jetzt verstanden. Ich ging von falschen Voraussetzungen aus- wodurch ich jeden erdenklichen Schluß ziehen konnte- nur nicht den Richtigen.</p>
<p>Der Interpreterbaum beschreibt ja die komplette Grammatik und man jagt seine Token da durch, um am Ende hoffentlich sein Ergebnis zu bekommen.</p>
<p>Hier mal ein Beispiel für eine Grammatik:</p>
<pre><code>ausdruck ::= literal | and | or | not | '(' ausdruck ')' .
and      ::= ausdruck '&amp;' ausdruck .
or       ::= ausdruck '|' ausdruck .
not      ::= '!' ausdruck .

literal ::= ('A' | 'B' | ... | 'Z' | zahl)* .
zahl    ::= ['-'] (ziffer)* ['.' (ziffer)*] .
ziffer  ::=  '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '0' .
</code></pre>
<p>Die Frage ist mehr eine Verständnisfrage- und ich möchte nichts von Rindviechern, wie Bison's oder Yacc's hören.. <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="😃"
    /><br />
Wie generiere ich jetzt meinen Parserbaum daraus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314632</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 29 Jun 2007 06:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 07:06:53 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>das Interopreter Pattern sagt mir vom Namen nichts.<br />
Ich denke aber, dass du einen Syntaxtree aufbauen möchtest?</p>
<p>Dann kannst du &quot;im Prinzip&quot; die EBNF Regeln in Quellcode übersetzen. Mit viel Rekursion, Stacks und halt einer Baumstruktur ist das gar nicht mal so unmöglich wie es sich vielleicht anhört. Such mal nach ein paar Folien über Compilerbau, da wirst du geholfen. Weitere Stichwörter: Bottom-Up Parsing, Top-Down Parsing.</p>
<p>Übrigens: Ich hoffe deine Grammar ist nur ein Beispiel, normalerweise würdest du so keine Sprache bauen (schau dir mal die Definition von &quot;ausdruck&quot; an).</p>
<p>Oh ja und... juhu, das Forum geht wieder <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/1314650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314650</guid><dc:creator><![CDATA[Headhunter]]></dc:creator><pubDate>Fri, 29 Jun 2007 07:06:53 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 07:49:32 GMT]]></title><description><![CDATA[<p>Ist meine erste bnf ^^ aber nein, ich wollte dies nur beispielhaft darstellen.<br />
Das Interpreter-Pattern ist ein Pattern der GoF, Ein Verhaltensmuster das Gramatikbäume beschreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314677</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 29 Jun 2007 07:49:32 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 08:17:28 GMT]]></title><description><![CDATA[<p>DocJunioR schrieb:</p>
<blockquote>
<p>Das Interpreter-Pattern ist ein Pattern der GoF, Ein Verhaltensmuster das Gramatikbäume beschreibt.</p>
</blockquote>
<p>Hehe, das ist eine gewaltige Ladung GoFSpeak <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>Das &quot;Interpreter Pattern&quot; ist, analog zum &quot;Function Pattern&quot; u.ä., im Prinzip lediglich der Ratschlag eine DSL zu nutzen wenn dies sinnvoll ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314706</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 29 Jun 2007 08:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 08:56:18 GMT]]></title><description><![CDATA[<p>Achso <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="🙂"
    /> Also auf Wikipedia (<a href="http://en.wikipedia.org/wiki/Interpreter_pattern" rel="nofollow">hier</a>) steht ein imo ziemlich gutes Beispiel für einen objektorientierten Parser. Das Beispiel lässt zwar viel Freiraum für Interpretation, aber das tun ja viele gute Beispiele.</p>
<p>Wenn's dir wirklich um ne eigene Minisprache geht, hol dir was fertiges. Der Aufwand sowas selber zu schreiben, rechtfertigt in den seltensten Fällen den Aufwand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314740</guid><dc:creator><![CDATA[Headhunter]]></dc:creator><pubDate>Fri, 29 Jun 2007 08:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 09:03:15 GMT]]></title><description><![CDATA[<p>DSL = Digital Subscripter Line?<br />
DSL = Definitive Software Library?</p>
<p>oder wie oder was oder warum oder wie jetz?<br />
*gg* und was hat das mit meiner Aussage über das Interpreter Pattern zu tun?</p>
<p>@ Headhunter Danke, aber ich hab den GAmma hier zu liegen <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/1314747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314747</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 29 Jun 2007 09:03:15 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 09:16:24 GMT]]></title><description><![CDATA[<p>DocJunioR schrieb:</p>
<blockquote>
<p>DSL = Digital Subscripter Line?<br />
DSL = Definitive Software Library?</p>
</blockquote>
<p>Domain-Specific Language</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314758</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 29 Jun 2007 09:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 09:23:17 GMT]]></title><description><![CDATA[<p>Ich bin dafür, Abkürzungen abzuschaffen oder wenigstens noch einen Kontext, Subkontext, Metakontext und Sub-Subkontext hinzuzufügen..</p>
<p>Edit: Wo ich schon vom Gamma rede- der beschreibt ja das Erbauer Pattern zum Bauen von Kompositae/en/ums (?) so nen Interpreter ist ja mehr oder weniger genau das.. Werd mich mal dran probieren..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314762</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 29 Jun 2007 09:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 10:10:30 GMT]]></title><description><![CDATA[<p>Schau dir mal spirit2 an.<br />
Bei den Beispielen ist schon ein Parser mit Interpreter für ein Mini C dabei:<br />
<a href="https://svn.sourceforge.net/svnroot/spirit/trunk/final/libs/spirit/example/qi/mini_c/" rel="nofollow">https://svn.sourceforge.net/svnroot/spirit/trunk/final/libs/spirit/example/qi/mini_c/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314808</guid><dc:creator><![CDATA[spirit2]]></dc:creator><pubDate>Fri, 29 Jun 2007 10:10:30 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 15:48:00 GMT]]></title><description><![CDATA[<p>DocJunioR schrieb:</p>
<blockquote>
<p>Ich bin dafür, Abkürzungen abzuschaffen oder wenigstens noch einen Kontext, Subkontext, Metakontext und Sub-Subkontext hinzuzufügen..</p>
</blockquote>
<p>&lt;a href= schrieb:</p>
<blockquote>
<p>Google: dsl programming, 1. Treffer&quot;&gt;<br />
Domain-specific programming language - Wikipedia, the free ...</p>
<p>A domain-specific programming language (domain-specific language, DSL) is a programming language designed for, and intended to be useful for, ...<br />
<a href="http://en.wikipedia.org/wiki/Domain-specific_programming_language" rel="nofollow">en.wikipedia.org/wiki/Domain-specific_programming_language</a> - 43k -</p>
</blockquote>
<p>Würdest du kurz über meine Aussage - die nur zum Teil als Erklärung für Headhunter gedacht war - nachdenken, könntest du den Kontext vielleicht sogar noch ein wenig weiter eingrenzen.</p>
<p>DocJunioR schrieb:</p>
<blockquote>
<p>Edit: Wo ich schon vom Gamma rede- der beschreibt ja das Erbauer Pattern zum Bauen von Kompositae/en/ums (?) so nen Interpreter ist ja mehr oder weniger genau das.. Werd mich mal dran probieren..</p>
</blockquote>
<p>Nein, ganz und gar nicht, ein Builder ist kein Interpreter.</p>
<p>Vielleicht solltest du dich nicht ganz so engstirnig auf GoF pur fixieren, und dabei alles andere ausblenden. Es geht nicht um &quot;so nen Interpreter [Pattern?]&quot; - selbst wenn du dem Buch treu bleibst und direkt den ( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Kontextwarnung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ) AST interpretierst, ist es ganz schlicht ein Interpreter, etwas das auch und vor allem unabhängig vom <em>GoF Interpreter Pattern</em> existiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315121</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 29 Jun 2007 15:48:00 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 17:57:12 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Es geht nicht um &quot;so nen Interpreter [Pattern?]&quot; - selbst wenn du dem Buch treu bleibst und direkt den ( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Kontextwarnung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ) AST interpretierst, ist es ganz schlicht ein Interpreter, etwas das auch und vor allem unabhängig vom <em>GoF Interpreter Pattern</em> existiert.</p>
</blockquote>
<p>Äh, ohne GoF gelesen zu haben: Was hat ein Interpreter mit nem Parser zu tun?! Ein Parser baut den AST *auf*, ein Interpreter baut ihn *ab* (wenn man so will … er traversiert ihn halt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315224</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 29 Jun 2007 17:57:12 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 18:08:14 GMT]]></title><description><![CDATA[<p>@ finix - zu den Abkürzungen: diese war mir tatsächlich nicht geläufig. Wollte damit auch nur sagen, dass es meines erachtens zuviele Abk. gibt.</p>
<p>Zum Erbauer Pattern. Ich hab nicht gesagt, dass der Erbauer ein Interpreter ist, sondern dass man mit dem Erbauer ein Kompositum erstellt und der Interpreter ist mit dem Kompositum verwandt. Dieser Teilsatz bezog sich auf das Objekt, nicht aufs Subjekt. Macht man manchmal in der deutschen Sprache <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>
<p>Ich hab garnicht vor, mich engstirnig an die GoF zu halten- es gab auch bei mir ein Leben vor der GoF, ja sogar ein Leben vor der oop oder strukturierten Programmierung ^^ und es wird auch eines danach geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315227</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Fri, 29 Jun 2007 18:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 18:40:32 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Äh, ohne GoF gelesen zu haben: Was hat ein Interpreter mit nem Parser zu tun?! Ein Parser baut den AST *auf*, ein Interpreter baut ihn *ab* (wenn man so will … er traversiert ihn halt).</p>
</blockquote>
<p>Naja, wenn man mit Interpreter Softwareprogramm/-modul meint, dann beinhaltet ein Interpreter zumeist einen Parser.</p>
<p>Und es ist auch nicht gesagt dass die VM, die Runtime, den AST &quot;abbaut&quot;, ihn ausführt - empirisch gesehen (lies: das sagt mein aus dem Stegreif Bauchgefühl <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="😉"
    /> ) bekommen die wenigsten überhaupt einen AST zu Gesicht. So spontan fiele mir nur Ruby ein als Implementation die (derzeit noch) den AST direkt ausführt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315238</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 29 Jun 2007 18:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 18:46:17 GMT]]></title><description><![CDATA[<p>DocJunioR schrieb:</p>
<blockquote>
<p>@ finix - zu den Abkürzungen: diese war mir tatsächlich nicht geläufig. Wollte damit auch nur sagen, dass es meines erachtens zuviele Abk. gibt.</p>
</blockquote>
<p>Hatte ich anders gelesen. Im Prinzip hast du ja Recht, aber DSL ist relativ geläufig, vor allem in diesem Kontext, und da sind Abkürzungen schon durchaus sinnvoll. Aber solange es nicht so schlimm wird wie Englisch, das wohl bald nur noch aus Abkürzungen und Akronymen bestehen wird...</p>
<p>DocJunioR schrieb:</p>
<blockquote>
<p>Zum Erbauer Pattern. Ich hab nicht gesagt, dass der Erbauer ein Interpreter ist, sondern dass man mit dem Erbauer ein Kompositum erstellt und der Interpreter ist mit dem Kompositum verwandt. Dieser Teilsatz bezog sich auf das Objekt, nicht aufs Subjekt. Macht man manchmal in der deutschen Sprache <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>
</blockquote>
<p>Ich versteh's immer noch nicht, aber du wirst schon wissen was du meinst <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>DocJunioR schrieb:</p>
<blockquote>
<p>Ich hab garnicht vor, mich engstirnig an die GoF zu halten- es gab auch bei mir ein Leben vor der GoF, ja sogar ein Leben vor der oop oder strukturierten Programmierung ^^ und es wird auch eines danach geben.</p>
</blockquote>
<p>Das wichtigste ist das daneben <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/1315243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315243</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 29 Jun 2007 18:46:17 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 18:49:34 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Naja, wenn man mit Interpreter Softwareprogramm/-modul meint, dann beinhaltet ein Interpreter zumeist einen Parser.</p>
</blockquote>
<p>Hm, ich würde genau das Gegenteil sagen, nämlich, dass ein Interpreter überhaupt keinen Parser beinhalten muss. Das sind getrennte Module. Ein Interpreter kann den AST z.B. auch schon vorgekaut in Form von Bytecode bekommen, den er dann interpretiert (=&gt; Java-VM. Ja, das *ist* eine Weiterverarbeitung des AST). Für mich ist der Parser halt genau das, was einen AST erstellt und mehr nicht. Wohingegen der Interpreter das ist, was als Eingabe die Ausgabe des Parsers oder eines Zwischencodegenerators bekommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315245</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 29 Jun 2007 18:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 19:04:50 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>finix schrieb:</p>
<blockquote>
<p>Naja, wenn man mit Interpreter Softwareprogramm/-modul meint, dann beinhaltet ein Interpreter zumeist einen Parser.</p>
</blockquote>
<p>Hm, ich würde genau das Gegenteil sagen, nämlich, dass ein Interpreter überhaupt keinen Parser beinhalten muss. Das sind getrennte Module. Ein Interpreter kann den AST z.B. auch schon vorgekaut in Form von Bytecode bekommen, den er dann interpretiert (=&gt; Java-VM. Ja, das *ist* eine Weiterverarbeitung des AST). Für mich ist der Parser halt genau das, was einen AST erstellt und mehr nicht. Wohingegen der Interpreter das ist, was als Eingabe die Ausgabe des Parsers oder eines Zwischencodegenerators bekommt.</p>
</blockquote>
<p>So sehe ich das im Endeffekt auch. Bloß ist ein Interpreter tendenziell eher das Gesamtprogramm oder -modul (welches auch zumeist Quellcode interpretiert), was du als Interpreter bezeichnest würde ich eher VM oder Runtime o.ä. nennen.</p>
<p>edit:</p>
<p>&lt;a href= schrieb:</p>
<blockquote>
<p><a href="http://de.wikipedia.org/wiki/Interpreter" rel="nofollow">http://de.wikipedia.org/wiki/Interpreter</a>&quot;&gt;Ein Interpreter (im Sinne der Softwaretechnik) ist ein Software-Programm, das einen Programm-Quellcode im Gegensatz zu Assemblern oder Compilern nicht in eine auf dem System direkt ausführbare Datei umwandelt, sondern den Quellcode einliest, analysiert und ausführt. Die Analyse des Quellcodes erfolgt also zur Laufzeit des Programms</p>
</blockquote>
<p>Wie auch immer, im ursprünglichen Kommentar ging es darum das sämtliche Beispiele etc. zum Interpreter Pattern die ich bisher gesehen habe einen AST aufbauen und diesen direkt interpretieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315253</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 29 Jun 2007 19:04:50 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 19:18:57 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Wie auch immer, im ursprünglichen Kommentar ging es darum das sämtliche Beispiele etc. zum Interpreter Pattern die ich bisher gesehen habe einen AST aufbauen und diesen direkt interpretieren.</p>
</blockquote>
<p>Ah. Dann kennst Du einen anderen Interpreter Pattern als ich. Aber wie gesagt: Ich habe GoF nie gelesen, das, was ich kenne, stammt aus Wikipedia und einigen anderen Quellen bzw. Codes. Daher wäre ich natürlich mal interessiert, wie &quot;dein&quot; Interpreter-Pattern aussieht, wenn er den AST aufbaut.</p>
<p>Um Missverständnisse zu vermeiden: Das, was ich als Interpreter pattern kenne, sähe in C++ einfach so aus:</p>
<pre><code class="language-cpp">class expression {
public:
    virtual object* eval(context&amp;) = 0;
    virtual ~expression() {}
};

// Beispiel-Implementierung:
class number_literal : public expression {
public:
     number_literal(int value) : m_value(value) {}
     object* eval(context&amp; ctx) { return ctx.make_int_literal(m_value); }

private:
     int m_value;
}
</code></pre>
<p>Und wenn man sich noch ein paar Klassen bauen würde, könnte man den AST in C++ folgendermaßen aufbauen. Dabei ist aber zu beachten, dass das C++-Code ist! Den AST definiere ich also in C++, der Interpreter pattern bekommt ihn fertig übergeben.</p>
<pre><code class="language-cpp">method_call(
    &quot;printf&quot;,
    method_call(
        &quot;+&quot;, number_literal(23), reference(&quot;the_answer&quot;)
    )
).eval(context());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1315262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315262</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 29 Jun 2007 19:18:57 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Fri, 29 Jun 2007 19:40:44 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Um Missverständnisse zu vermeiden:</p>
</blockquote>
<p>Scheinbar zu spät dafür: <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1314706.html#1314706" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1314706.html#1314706</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315269</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 29 Jun 2007 19:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 06:24:27 GMT]]></title><description><![CDATA[<p>and now for something completely different:</p>
<p>ich bin also inzwischen so weit, dass ich weiß, dass mein Interpreter zwar interpretieren kann, aber den entsprechenden Parserbaum muss ich von hand bauen. Der Erbauer als Pattern dient zum Erstellen von Kompositae (oder wie auch immer man den Plural davon bildet.) Wenn ich den Expressionbaum aus dem Interpreter Pattern als Kompositum sehe, könnte ich also meinen Ausdruck (sagte ich schon, dass es sich um Aussagenlogik handelt?) in einen Parsebaum umwandeln und anschließend laufen lassen..</p>
<p>Alledings erscheint es mir ein wenig aufwändig..<br />
Gibts da nicht einfachere Möglichkeiten?<br />
Zu stackbasierten Interpretern, manchmal auch VM genannt, hab ich bisher leider nicht sehr viel sinnvolles gefunden und mein Buchetat ist für meinen Urlaub draufgegangen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316574</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Mon, 02 Jul 2007 06:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 07:03:19 GMT]]></title><description><![CDATA[<p>Hi DocJunioR,</p>
<p>treib's mal mit der Verwendung der GoF-Patterns nicht so weit, dass Du das Ziel aus den Augen verlierst. Wenn Du Boost.Spirit verwendest, dann hast Du den notwendigen Parser in wenigen Minuten zusammen und musst ihn nur noch wenig anpassen, damit er einen Parsebaum in dem von Dir gewünschten Format liefert. Aufwendig sollte das eigentlich nicht sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316581</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 02 Jul 2007 07:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 08:08:36 GMT]]></title><description><![CDATA[<p>Tja, nur bringt mir spirit nichts, wenn ich java nutzen möchte.<br />
Eigentlich suche ich einen Ansatz der erstmal nur das Design angeht, nicht die Programmiersprache. Muss dann zwar alles selbst machen, aber kann es dann einfach in einer anderen generieren..<br />
Die Pattern sind auch nur Gedankenstützen. Trotzdem weiß ich immernoch nicht, wie ich jetzt aus meinem String</p>
<p>(a &amp; b) | (c &amp; ! d)</p>
<p>Den Baum</p>
<pre><code>OR
     /  \ 
    /    \
  AND    AND
  / \    / \
 a   b  c  NOT
            |
            d
</code></pre>
<p>mache. Ob ich jetzt ein Interpreter Pattern generiere oder einfach nur einen Baum von Structs ist ja vollkommen wurscht..<br />
Gibts da nicht nen 10-Zeiler, der mir die Funktionsweise näher bringt?<br />
Hab Entscheidungsbäume bisher immer von hand generiert und in XML abgebildet, aber das ist mir jetzt zu viel Datenoverhead..</p>
<p>Edit: Hab grad das hier gefunden <a href="http://www.codeproject.com/useritems/Parser_Expression.asp" rel="nofollow">http://www.codeproject.com/useritems/Parser_Expression.asp</a><br />
werd mich erstmal da durchgraben.. scheint ja mein Problem zu sein.</p>
<p>Edit2: Natürlich hab ich kein Problem damit, auch einfach nur nen Interpreter zu nutzen der direkt am Quellcode interpretiert, nur hab ich da auch keinen Plan, wie ich das parse..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316602</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Mon, 02 Jul 2007 08:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 08:53:46 GMT]]></title><description><![CDATA[<p>Die Funktionsweise von Spirit kannst du ja auch in java nachstellen.<br />
Du musst halt einfach dir eine Klassenhierarchie schreiben, welche die unterschiedlichen Regeln aneinander kettet.</p>
<p>Ist natürlich in Java etwas umständlicher, da es ja keine Operatorüberladung dort gibt...</p>
<p>Ansonsten, in nem 10 Zeiler ist das nicht generisch machbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316631</guid><dc:creator><![CDATA[spiritfan]]></dc:creator><pubDate>Mon, 02 Jul 2007 08:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 09:21:02 GMT]]></title><description><![CDATA[<p>war auch nur so gemeint, dass ich keine idee hab, wie ich da anfange.<br />
Wie gesagt, ich möchte gern das interpreter pattern nutzen, aber weiß nicht, wie ich den syntax baum aufbaue. hierfür brauche ich nur eine entsprechende Vorgehensweise...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316657</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 09:49:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class rule // evtl. noch ne komposition aus anderen rules einhängen
{
  virtual bool checkcontent(String content)=0;
}

class string_rule extends rule
{
  String muster;
  string_rule(String m){muster = m;}
  bool checkcontent(String content)
  {
    if(muster == content.substring(0,muster.length()))
      return true; //match
    return false;
}
</code></pre>
<p>Ist jetzt mal pseudocode. Fehlt natürlich auch viel. So würde es sinn machen, an die Regeln actions zu hängen, die z.B. dann die Erstellung des Baumes übernehmen.<br />
Und um whitespaces etc. zu ignorieren, musst du natürlich Zeichen für Zeichen vergleichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316682</guid><dc:creator><![CDATA[spiritfan]]></dc:creator><pubDate>Mon, 02 Jul 2007 09:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 10:09:51 GMT]]></title><description><![CDATA[<p>Ich schließe mich weiterhin den Tipps der anderen an. Wenn du nicht <a href="http://www.antlr.org/" rel="nofollow">ANTLR</a> o.ä. verwenden willst, lautet das richtige Suchwort &quot;Parser&quot;, nicht &quot;Interpreter Pattern&quot;.</p>
<p>DocJunioR schrieb:</p>
<blockquote>
<p>Zu stackbasierten Interpretern, manchmal auch VM genannt, hab ich bisher leider nicht sehr viel sinnvolles gefunden und mein Buchetat ist für meinen Urlaub draufgegangen..</p>
</blockquote>
<p>eine VM ist nicht zwangsläufig stackbasiert, siehe beispielsweise <a href="http://www.parrotcode.org/" rel="nofollow">Parrot</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316694</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Mon, 02 Jul 2007 10:09:51 GMT</pubDate></item><item><title><![CDATA[Reply to Interpreter-Pattern aus Backus-Naur erstellen on Mon, 02 Jul 2007 10:36:31 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Ich schließe mich weiterhin den Tipps der anderen an. Wenn du nicht <a href="http://www.antlr.org/" rel="nofollow">ANTLR</a> o.ä. verwenden willst, lautet das richtige Suchwort &quot;Parser&quot;, nicht &quot;Interpreter Pattern&quot;.</p>
</blockquote>
<p>Ist es nicht das, was ich die ganze Zeit impliziere?<br />
Wenn ich aber explizit sage, ich brauch nen Parser, kommt immer gleich &quot;nimm doch yacc, bison, etc. um dir einen zu bauen&quot;..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316729</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Mon, 02 Jul 2007 10:36:31 GMT</pubDate></item></channel></rss>