<?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[Parser erstellen, nur wie?]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich muss einen Parser erstellen um einen Rechner zu erstellen.<br />
Seit mir bitte nicht böse, aber ich habe wirklich keinen einzigen Schimmer wo ich damit anfangen soll. Ich hoffe,dass ihr mir vielleicht auf die Sprünge helfen könnt.Ich habe einen Rechner schon mit WinApi erstellt, doch ich wollte es jetzt lieber erstmall in der Konsole lernen und danach mein wissen darauf übertragen.<br />
Also mein kleines(sehr klein) Programm:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
int main()
{
	std::string ha;
	std::cin&gt;&gt;ha;
	getchar();
	return 0;
}
</code></pre>
<p>Wie ihr seht, seht ihr fast nichts <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 />
Ich wollte einfach das man z.b 5+5*2 oder 5 + 5 * 2 eingeben muss. Dann dies 'geparst' wird und dann ausgerechnet wird. Natürlich möchte ich noch viel längere Rechnungen als diese ausführen sonst könnte man ja einfach abfragen was Rechenzeichen 1 und was Rechenzeichen 2 ist.<br />
Ich habe auch schon viele Tutorials, Websites abgeklappert hab es trotzdem nie wirklich geschafft.<br />
MFG NameIstMeinerr</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325579/parser-erstellen-nur-wie</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 11:47:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325579.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 May 2014 17:19:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 17:19:51 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich muss einen Parser erstellen um einen Rechner zu erstellen.<br />
Seit mir bitte nicht böse, aber ich habe wirklich keinen einzigen Schimmer wo ich damit anfangen soll. Ich hoffe,dass ihr mir vielleicht auf die Sprünge helfen könnt.Ich habe einen Rechner schon mit WinApi erstellt, doch ich wollte es jetzt lieber erstmall in der Konsole lernen und danach mein wissen darauf übertragen.<br />
Also mein kleines(sehr klein) Programm:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
int main()
{
	std::string ha;
	std::cin&gt;&gt;ha;
	getchar();
	return 0;
}
</code></pre>
<p>Wie ihr seht, seht ihr fast nichts <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 />
Ich wollte einfach das man z.b 5+5*2 oder 5 + 5 * 2 eingeben muss. Dann dies 'geparst' wird und dann ausgerechnet wird. Natürlich möchte ich noch viel längere Rechnungen als diese ausführen sonst könnte man ja einfach abfragen was Rechenzeichen 1 und was Rechenzeichen 2 ist.<br />
Ich habe auch schon viele Tutorials, Websites abgeklappert hab es trotzdem nie wirklich geschafft.<br />
MFG NameIstMeinerr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398157</guid><dc:creator><![CDATA[NameIstMeinerr]]></dc:creator><pubDate>Thu, 08 May 2014 17:19:51 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 17:46:35 GMT]]></title><description><![CDATA[<p>Hier im Forum gibt es einen Artikel darüber: <a href="http://www.c-plusplus.net/forum/268247-full" rel="nofollow">http://www.c-plusplus.net/forum/268247-full</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398162</guid><dc:creator><![CDATA[patrick246]]></dc:creator><pubDate>Thu, 08 May 2014 17:46:35 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 17:50:07 GMT]]></title><description><![CDATA[<p>patrick246 schrieb:</p>
<blockquote>
<p>Hier im Forum gibt es einen Artikel darüber: <a href="http://www.c-plusplus.net/forum/268247-full" rel="nofollow">http://www.c-plusplus.net/forum/268247-full</a></p>
</blockquote>
<p>Danke, werde ich mir mal anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398165</guid><dc:creator><![CDATA[NameIstMeinerr]]></dc:creator><pubDate>Thu, 08 May 2014 17:50:07 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 17:51:36 GMT]]></title><description><![CDATA[<p>Lies dir einfach mal die Artikel <a href="http://www.c-plusplus.net/forum/268247" rel="nofollow">Interpreterbau - Ein Anfang</a> und <a href="http://www.c-plusplus.net/forum/201764" rel="nofollow">Compilerbau</a> durch (beide behandeln einen Rechner als Beispiel).<br />
Ein Parser ist schon etwas Fortschrittlicheres (insb. da man auch die Theorie z.B. (E)BNF verstehen sollte).</p>
<p>Wenn du das C++ Buch &quot;Die C++ Programmiersprache&quot; (v. Stroustrup) hast, auch dort ist ein Taschenrechner als Beispiel angegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398166</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 08 May 2014 17:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 17:58:07 GMT]]></title><description><![CDATA[<p>Soll das auch noch Punkt vor Strich können? Oder Klammern? Das wäre zwar nicht extrem schwierig, aber dennoch vermutlich mehr, als du derzeit schaffen kannst. Wenn du auch noch die Korrektheit der Eingabe prüfen möchtest, wird es sogar halbwegs kompliziert.</p>
<p>Wenn du bloß ein Token nach dem anderen Lesen und Verarbeiten möchtest, dann geht die ungefähre Idee so:<br />
Die formatierten Leseoperationen (sprich: operator&gt;&gt;) versuchen immer, möglichst viel einzulesen, was zu dem gewünschten Datentyp passt. Wenn ein Zeichen nicht mehr passt, hören sie auf. Leerzeichen (und anderer Whitespace) werden am Anfang standardmäßig übersprungen. Das heißt, du kannst immer abwechselnd Zahl und Rechenzeichen lesen und dieses dann verarbeiten.</p>
<p>Ganz einfaches Beispiel (welches dein Vorhaben möglicherweise bereits komplett löst <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>
<pre><code>#include &lt;iostream&gt;

int main()
{
  double lhs, rhs;
  char operand;
  std::cin &gt;&gt; lhs;
  while (std::cin &gt;&gt; operand &gt;&gt; rhs)
    {
      switch(operand)
        {
        case '+': lhs += rhs; break;
        case '-': lhs -= rhs; break;
        case '*': lhs *= rhs; break;
        case '/': lhs /= rhs; break;
        }
      std::cout &lt;&lt; &quot;Zwischenergebnis: &quot; &lt;&lt; lhs &lt;&lt; '\n';
    }
}
</code></pre>
<p><a href="http://ideone.com/w6PMXH" rel="nofollow">http://ideone.com/w6PMXH</a></p>
<p>P.S: Da war ich etwas langsamer als die Kollegen, weil das Programmieren des Beispiels doch ein paar Minuten benötigt hat <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="🙂"
    /> . Aber nun hast du auch ein paar Links, wie man das etwas fortschrittlicher angehen kann, wenn man mehr als nur simple binäre Operatoren von links nach rechts verarbeiten möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398168</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 08 May 2014 17:58:07 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 17:58:59 GMT]]></title><description><![CDATA[<p>Mach einen Rechner mit <a href="https://de.wikipedia.org/wiki/Polnische_Notation" rel="nofollow">polnischer Notation</a>, das macht es gleichzeitig einfacher und interessanter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398171</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Thu, 08 May 2014 17:58:59 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 18:27:01 GMT]]></title><description><![CDATA[<p>zu Reverse Polish:</p>
<p>Shunting Yard: Infix -&gt; Polish<br />
auf der Wikipediaseite kann man einen Pseudocode finden (auf der englischen Seite ist der simpler beschrieben (der Pseudocode))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398175</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Thu, 08 May 2014 18:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Thu, 08 May 2014 18:29:32 GMT]]></title><description><![CDATA[<p>Und <a href="http://www.c-plusplus.net/forum/p1642138" rel="nofollow">hier</a> findest Du ein fertiges Beispiel für einen <a href="http://en.wikipedia.org/wiki/Recursive_descent_parser" rel="nofollow">Recursive Descent Parser</a>, der solche arithmetische Ausdrücke parst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398176</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 08 May 2014 18:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Sun, 11 May 2014 16:46:13 GMT]]></title><description><![CDATA[<p>Danke für die zahlreichen Antworten,<br />
ich bin fertig mit meinem Code und habe den Parser erstellt.<br />
Es kann (noch) keine Klammern aber die es kann punkt vor strich und beliebig lange Rechnungen durchführen( Naja bis zum Ende des Bildschirms ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398649</guid><dc:creator><![CDATA[NameIstMeinerr]]></dc:creator><pubDate>Sun, 11 May 2014 16:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Sun, 11 May 2014 20:52:30 GMT]]></title><description><![CDATA[<p>NameIstMeinerr schrieb:</p>
<blockquote>
<p>beliebig lange Rechnungen durchführen( Naja bis zum Ende des Bildschirms ).</p>
</blockquote>
<p>Wie schafft man es denn, zu solch einer eigenartigen Begrenzung zu kommen? Ich wüsste ja spontan nicht einmal, wie ich diesen Effekt gezielt erreichen könnte, geschweige denn, wie ich ihn zufällig herbei führen könnte.</p>
<p>P.S.: Falls die eigentlichen Botschaft meines Beitrags nicht klar geworden sein solle: Versuch mal einfach, eine längere Rechnung zu tippen und schau, was passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398693</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 11 May 2014 20:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Parser erstellen, nur wie? on Mon, 12 May 2014 15:01:16 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>NameIstMeinerr schrieb:</p>
<blockquote>
<p>beliebig lange Rechnungen durchführen( Naja bis zum Ende des Bildschirms ).</p>
</blockquote>
<p>Wie schafft man es denn, zu solch einer eigenartigen Begrenzung zu kommen? Ich wüsste ja spontan nicht einmal, wie ich diesen Effekt gezielt erreichen könnte, geschweige denn, wie ich ihn zufällig herbei führen könnte.</p>
<p>P.S.: Falls die eigentlichen Botschaft meines Beitrags nicht klar geworden sein solle: Versuch mal einfach, eine längere Rechnung zu tippen und schau, was passiert.</p>
</blockquote>
<p>Eigentlich hast du Recht, ist aber egal, Thema kann auch geschlossen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398831</guid><dc:creator><![CDATA[NameIstMeinerr]]></dc:creator><pubDate>Mon, 12 May 2014 15:01:16 GMT</pubDate></item></channel></rss>