<?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[Symboltable Deklararion Variablen Compilerbau]]></title><description><![CDATA[<p>Hallo,</p>
<p>bau mir grad nen Compiler. Variablen müssen ja deklariert sein, bevor sie verwendet werden. Sowas geht ja nicht.</p>
<pre><code>class X{

    funk()
   {
        member = 7;
        int member;
   }

}
</code></pre>
<p>Wenn ich mir jetzt die Symboltabelle aufbaue, dann nehme ich ja die Deklaration von member in die Symboltabelle auf. Wenn ich dann den nächsten Durchlauf mache und prüfe ob member deklariert ist, dann scheint das ja der Fall zu sein, weil es in der Symboltabelle ist. Wie mach ich das jetzt am besten ? Mein Ablauf ist eben so dass ich erst die Symboltabelle aufbau und dann nochmal durch das Programm gehe und prüfe ob die Variablen deklariert sind. Daran will ich auch nichts ändern. Natürlich könnt ich es so machen , dass ich bie jeder Variablen prüfe ob sie schon deklariert ist, aber dann hätt ich ja auch wieder das Problem mit den member denn die wiederum dürfen ja nach der Verwendung deklariert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334678/symboltable-deklararion-variablen-compilerbau</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 09:11:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334678.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Oct 2015 07:00:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Fri, 02 Oct 2015 07:00:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bau mir grad nen Compiler. Variablen müssen ja deklariert sein, bevor sie verwendet werden. Sowas geht ja nicht.</p>
<pre><code>class X{

    funk()
   {
        member = 7;
        int member;
   }

}
</code></pre>
<p>Wenn ich mir jetzt die Symboltabelle aufbaue, dann nehme ich ja die Deklaration von member in die Symboltabelle auf. Wenn ich dann den nächsten Durchlauf mache und prüfe ob member deklariert ist, dann scheint das ja der Fall zu sein, weil es in der Symboltabelle ist. Wie mach ich das jetzt am besten ? Mein Ablauf ist eben so dass ich erst die Symboltabelle aufbau und dann nochmal durch das Programm gehe und prüfe ob die Variablen deklariert sind. Daran will ich auch nichts ändern. Natürlich könnt ich es so machen , dass ich bie jeder Variablen prüfe ob sie schon deklariert ist, aber dann hätt ich ja auch wieder das Problem mit den member denn die wiederum dürfen ja nach der Verwendung deklariert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469591</guid><dc:creator><![CDATA[WarriorInC]]></dc:creator><pubDate>Fri, 02 Oct 2015 07:00:17 GMT</pubDate></item><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Fri, 02 Oct 2015 07:52:46 GMT]]></title><description><![CDATA[<p>dann muss du wohl zu jedem Symbol speichern, wo dessen Scope beginnt und endet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469607</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Fri, 02 Oct 2015 07:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Fri, 02 Oct 2015 08:21:10 GMT]]></title><description><![CDATA[<p>1. was soll der Sinn von</p>
<pre><code>member = 7;
int member;
</code></pre>
<p>sein?</p>
<p>was machst du wenn ich sowas schreibe</p>
<pre><code>member = &quot;hallo&quot;;
int member;
member = &quot;du&quot;
</code></pre>
<p>2. wenn du einen sauberen AST (<a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree" rel="nofollow">https://en.wikipedia.org/wiki/Abstract_syntax_tree</a>) hast kannst du doch problemlos alles machen wie du es willst - falls du den nicht hast wirst definitiv noch in andere Problem, die da kommen werden, laufen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469611</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Fri, 02 Oct 2015 08:21:10 GMT</pubDate></item><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Sat, 03 Oct 2015 09:50:15 GMT]]></title><description><![CDATA[<p>Gast3 schrieb:</p>
<blockquote>
<p>was machst du wenn ich sowas schreibe</p>
<pre><code>member = &quot;hallo&quot;;
int member;
member = &quot;du&quot;
</code></pre>
</blockquote>
<p>Nur das 1.member gibt einen fehler, das 2. nicht. Im ersten Schritt bau ich mir die Symboltabelle auf und trage member ein. Beim 2.Durchlauf prüfe ich ob member deklariert wurde. Jetzt sollte ich einen Fehler bekommen aber das ist nicht der Fall da member in der Symboltabelle steht und es den Anschein hat es wurde ordnungsgemäß deklariert. Meine Lösung dafür wäre jetzt.</p>
<p>Beim 1.Durchlauf prüfe ich falls ich auf eine Variable treffe ob sie in der aktuellen Symboltabelle ist. Falls nicht setz ich ein flag und prüfe beim 2.Durchlauf ob sie vielleicht ein member ist. Falls nicht gibts nen Fehler <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469675</guid><dc:creator><![CDATA[WeiserMann]]></dc:creator><pubDate>Sat, 03 Oct 2015 09:50:15 GMT</pubDate></item><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Sat, 03 Oct 2015 10:34:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>lies dir mal den Artikel <a href="https://www.c-plusplus.net/forum/201764">Compilerbau</a> durch, insbs. das Kapitel über Variablen. Dort wird auch erklärt, wie man mit Scopes richtig umgeht.<br />
Welche Sprache willst du denn umsetzen? Vollständiges C++ ist (bezogen auf Scopes) jedoch etwas umfangreicher, als dein naiver Ansatz.<br />
Was ist, wenn du zwei Klassen hast (oder Unterklassen)? Dann kannst du doch nicht einfach auf alle Variablen zugreifen...<br />
Du benötigst also verschiedene Symboltabellen (global, Klassen, lokal), welche du je nach Scope befüllst und darauf dann zugreifst.<br />
Folgendes wäre ja gültiger C++ Code:</p>
<pre><code class="language-cpp">class X
{
    int member;

    void funk()
    {
        member = 7;
        int member;
        member = 10;
   }
};
</code></pre>
<p>(in C# dagegen führt dies zu einem Fehler)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469680</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 03 Oct 2015 10:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Sat, 03 Oct 2015 10:38:49 GMT]]></title><description><![CDATA[<p>Eine Klasse hat ja seine eigene Symboltabelle. Beiden Klassen wären also auf derselben Hierarchie und eine Klasse ist ein Child einer Compilation Unit.</p>
<p>Also deine Code Beispiel funktioniert ? Hmm. Das 1.member bezieht sich wohl auf den Klassenmember und das 2. dann auf die lokale Variable. Schätz ich mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469685</guid><dc:creator><![CDATA[WeiserMann]]></dc:creator><pubDate>Sat, 03 Oct 2015 10:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Sat, 03 Oct 2015 11:39:21 GMT]]></title><description><![CDATA[<p>Ja: <a href="http://ideone.com/IXw2sL" rel="nofollow">ideone - code</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2469691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469691</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 03 Oct 2015 11:39:21 GMT</pubDate></item><item><title><![CDATA[Reply to Symboltable Deklararion Variablen Compilerbau on Sun, 04 Oct 2015 14:42:36 GMT]]></title><description><![CDATA[<p>WarriorInC schrieb:</p>
<blockquote>
<p>Wenn ich mir jetzt die Symboltabelle aufbaue, dann nehme ich ja die Deklaration von member in die Symboltabelle auf. Wenn ich dann den nächsten Durchlauf mache und prüfe ob member deklariert ist, dann scheint das ja der Fall zu sein, weil es in der Symboltabelle ist.</p>
</blockquote>
<p>Das funktiniert in C so nicht, weil die Gramatik nicht kontextfrei ist.</p>
<pre><code>int x = 0, y = 0;
x * y; // keine Deklaration
</code></pre>
<pre><code>typedef void x;
x * y: // Deklaration
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2469773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2469773</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 04 Oct 2015 14:42:36 GMT</pubDate></item></channel></rss>