<?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[Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt)]]></title><description><![CDATA[<p>Edit pumuckl: Uralt-Originalthread: <a href="http://www.c-plusplus.net/forum/162904" rel="nofollow">http://www.c-plusplus.net/forum/162904</a></p>
<p>DocJunioR schrieb:</p>
<blockquote>
<p>du kannst beispielsweise prüfen, ob das Folgetoken ein = ist. Ist dem so, dann nimmst du das vorhergehende Token als Name und die nächsten bis zum Semikolon als Wert, getrennt mit Leerzeichen.</p>
</blockquote>
<p>Kann mir jemand sagen wie ich sowas prüfe?<br />
Ich mach das im Moment so:</p>
<pre><code class="language-cpp">void Scanner::start(){
  getNextToken();
  if(TokenType(TT_FUNC)){
    std::cout &lt;&lt; &quot;prototype&quot;;
  }
  if(TokenType(TT_DOT)){
    std::cout &lt;&lt; &quot;.&quot;;
  }
  if(TokenType(TT_PUBLIC)){
    std::cout &lt;&lt; &quot;function&quot; &lt;&lt; &quot;\n&quot;;
  }
}
</code></pre>
<p>Allerdings macht der das ja nur für ein Token, also nur einmal und die Reihenfolge muss ich ja dann vorgeben. Vielleicht erklärt mir das oben beschriebene noch einmal jemand. Oder sagt mir wonach ich suchen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309854/threadnecromantie-von-quot-liste-von-tokens-analysieren-quot-geteilt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 06:13:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309854.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Oct 2012 11:32:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt) on Mon, 29 Oct 2012 10:27:56 GMT]]></title><description><![CDATA[<p>Edit pumuckl: Uralt-Originalthread: <a href="http://www.c-plusplus.net/forum/162904" rel="nofollow">http://www.c-plusplus.net/forum/162904</a></p>
<p>DocJunioR schrieb:</p>
<blockquote>
<p>du kannst beispielsweise prüfen, ob das Folgetoken ein = ist. Ist dem so, dann nimmst du das vorhergehende Token als Name und die nächsten bis zum Semikolon als Wert, getrennt mit Leerzeichen.</p>
</blockquote>
<p>Kann mir jemand sagen wie ich sowas prüfe?<br />
Ich mach das im Moment so:</p>
<pre><code class="language-cpp">void Scanner::start(){
  getNextToken();
  if(TokenType(TT_FUNC)){
    std::cout &lt;&lt; &quot;prototype&quot;;
  }
  if(TokenType(TT_DOT)){
    std::cout &lt;&lt; &quot;.&quot;;
  }
  if(TokenType(TT_PUBLIC)){
    std::cout &lt;&lt; &quot;function&quot; &lt;&lt; &quot;\n&quot;;
  }
}
</code></pre>
<p>Allerdings macht der das ja nur für ein Token, also nur einmal und die Reihenfolge muss ich ja dann vorgeben. Vielleicht erklärt mir das oben beschriebene noch einmal jemand. Oder sagt mir wonach ich suchen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2264383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2264383</guid><dc:creator><![CDATA[Enno]]></dc:creator><pubDate>Mon, 29 Oct 2012 10:27:56 GMT</pubDate></item><item><title><![CDATA[Reply to Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt) on Fri, 26 Oct 2012 13:02:25 GMT]]></title><description><![CDATA[<p>Ich würde Leerzeichen vor und nach = beim Scannen komplett ignorieren (beim Interpretieren sowieso). Du iterierst also durch den ganzen Vektor, und bei jedem Element n schaust du, ob das nächste Element (also <code>n+1</code> ) ein &quot;=&quot; ist. Wenn ja, dann ist <code>n</code> ein Schlüssel. Das bedeutet automatisch, dass <code>n+2</code> der Wert ist. Zum Speichern von interpretierten Tokens eignen sich std::maps ganz gut.</p>
<p>Spoiler:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; tokens;
std::map&lt;std::string, std::string&gt; keysAndValues;

for (int i = 0; i &lt; tokens.size(); ++i)
{
    if (tokens.at(i+1) == '=')
        keyAndValues.insert (std::pair&lt;std::string, std::string&gt;(tokens[i], tokens[i+2]))
    i +=2;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2264413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2264413</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Fri, 26 Oct 2012 13:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt) on Fri, 26 Oct 2012 13:26:22 GMT]]></title><description><![CDATA[<p>[Rewind] schrieb:</p>
<blockquote>
<p>Ich würde Leerzeichen vor und nach = beim Scannen komplett ignorieren (beim Interpretieren sowieso). Du iterierst also durch den ganzen Vektor, und bei jedem Element n schaust du, ob das nächste Element (also <code>n+1</code> ) ein &quot;=&quot; ist. Wenn ja, dann ist <code>n</code> ein Schlüssel. Das bedeutet automatisch, dass <code>n+2</code> der Wert ist. Zum Speichern von interpretierten Tokens eignen sich std::maps ganz gut.</p>
<p>Spoiler:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; tokens;
std::map&lt;std::string, std::string&gt; keysAndValues;

for (int i = 0; i &lt; tokens.size(); ++i)
{
    if (tokens.at(i+1) == '=')
        keyAndValues.insert (std::pair&lt;std::string, std::string&gt;(tokens[i], tokens[i+2]))
    i +=2;
}
</code></pre>
</blockquote>
<p>Das sieht doch schon mal gut aus. <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="🙂"
    /> Hab zwar noch nicht mit maps gearbeitet aber das kann man ja nun änder. <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="😉"
    /><br />
BTW: Du hast ein Fehler drin. <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="🙂"
    /> Nichts mit copy und paste bei dir. <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="😃"
    /> <strong>keysAndValues</strong> <strong>keyAndValues</strong> Nur ein kleiner vertipper. <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>Danke jedenfalls. Das hat mir schon mal viel geholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2264418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2264418</guid><dc:creator><![CDATA[Enno]]></dc:creator><pubDate>Fri, 26 Oct 2012 13:26:22 GMT</pubDate></item><item><title><![CDATA[Reply to Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt) on Sat, 27 Oct 2012 12:44:04 GMT]]></title><description><![CDATA[<p>Enno schrieb:</p>
<blockquote>
<p>DocJunioR schrieb:</p>
<blockquote>
<p>du kannst beispielsweise prüfen, ob das Folgetoken ein = ist. Ist dem so, dann nimmst du das vorhergehende Token als Name und die nächsten bis zum Semikolon als Wert, getrennt mit Leerzeichen.</p>
</blockquote>
<p>Kann mir jemand sagen wie ich sowas prüfe?<br />
Ich mach das im Moment so:</p>
<pre><code class="language-cpp">void Scanner::start(){
  getNextToken();
  if(TokenType(TT_FUNC)){
    std::cout &lt;&lt; &quot;prototype&quot;;
  }
  if(TokenType(TT_DOT)){
    std::cout &lt;&lt; &quot;.&quot;;
  }
  if(TokenType(TT_PUBLIC)){
    std::cout &lt;&lt; &quot;function&quot; &lt;&lt; &quot;\n&quot;;
  }
}
</code></pre>
<p>Allerdings macht der das ja nur für ein Token, also nur einmal und die Reihenfolge muss ich ja dann vorgeben. Vielleicht erklärt mir das oben beschriebene noch einmal jemand. Oder sagt mir wonach ich suchen soll.</p>
</blockquote>
<p>Das was du da postest ist nicht mehr Aufgabe des Scanners, sondern des Parsers!</p>
<p>Der Scanner zerlegt nur die Eingabe in ihre Tokens (das hast du ja schon). Du brauchst also jetzt eine Klasse Parser. Dieser Parser hat dann z.B. eine Funktion bool CheckToken(TokenType type); und diese Funktion überprüft dann, ob das Token korrekt ist und holt anschließend das nächste ab.</p>
<p>Du hast dir ja den Artikel als Basis genommen, warum gehst du nicht danach vor? Es steht dort alles genau so beschrieben.</p>
<p>Und der Code den [Rewind] gepostet hat, war nicht an dich gerichtet Enno, sondern an den Threadersteller...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2264632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2264632</guid><dc:creator><![CDATA[ghjghj]]></dc:creator><pubDate>Sat, 27 Oct 2012 12:44:04 GMT</pubDate></item><item><title><![CDATA[Reply to Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt) on Mon, 29 Oct 2012 09:26:18 GMT]]></title><description><![CDATA[<p>ghjghj schrieb:</p>
<blockquote>
<p>Das was du da postest ist nicht mehr Aufgabe des Scanners, sondern des Parsers!</p>
<p>Der Scanner zerlegt nur die Eingabe in ihre Tokens (das hast du ja schon). Du brauchst also jetzt eine Klasse Parser. Dieser Parser hat dann z.B. eine Funktion bool CheckToken(TokenType type); und diese Funktion überprüft dann, ob das Token korrekt ist und holt anschließend das nächste ab.</p>
<p>Du hast dir ja den Artikel als Basis genommen, warum gehst du nicht danach vor? Es steht dort alles genau so beschrieben.</p>
</blockquote>
<p>Hmm... Ich versteh dadran allerdings nicht ganz warum ich prüfen muss ob die korrekt sind? Mir geht es ja dadrum sie zu übersetzen.</p>
<p>ghjghj schrieb:</p>
<blockquote>
<p>Und der Code den [Rewind] gepostet hat, war nicht an dich gerichtet Enno, sondern an den Threadersteller...</p>
</blockquote>
<p>Ok allerdings wird der das nicht mehr brauchen. Ich hab den Thread ja wieder ausgegraben. Ich mein der ist von 2006 ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265232</guid><dc:creator><![CDATA[Enno]]></dc:creator><pubDate>Mon, 29 Oct 2012 09:26:18 GMT</pubDate></item><item><title><![CDATA[Reply to Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt) on Mon, 29 Oct 2012 10:26:08 GMT]]></title><description><![CDATA[<p>Enno schrieb:</p>
<blockquote>
<p>Ich hab den Thread ja wieder ausgegraben. Ich mein der ist von 2006 ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Sowas tut man auch nicht. Neue Frage, neuer Thread. So einfach ist das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265249</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 29 Oct 2012 10:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to Threadnecromantie von: &amp;quot;liste von tokens analysieren&amp;quot; (geteilt) on Mon, 29 Oct 2012 10:53:40 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Sowas tut man auch nicht. Neue Frage, neuer Thread. So einfach ist das.</p>
</blockquote>
<p>Wusste ich nicht. <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 />
Danke fürs ändern. <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/2265255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265255</guid><dc:creator><![CDATA[Enno]]></dc:creator><pubDate>Mon, 29 Oct 2012 10:53:40 GMT</pubDate></item></channel></rss>