<?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[Flex &#x2F; Bison - Problem bei den Operatoren * und &#x2F;]]></title><description><![CDATA[<p>Hallo liebe Forengemeinde,</p>
<p>das Problem liegt bei den Operatoren * und /. Wenn diese aufgerufen werden ist $3 immer 0. Bei den anderen Operatoren funktioniert es hingegen einwandfrei. Das Ergebnis wird richtig berechnet. Weiß jemand von euch wo das Problem liegt?</p>
<p>scanner.l</p>
<pre><code class="language-cpp">%{
#include &quot;parser.tab.h&quot;
%}

DIGIT           [0-9]

%%

username        printf(&quot;%s&quot;, getlogin());

&quot;\n&quot;            return END;

{DIGIT}+        {
                        yylval = atoi(yytext);
                        return NUMBER;
                }

&quot;+&quot;             return ADD;
&quot;-&quot;             return SUBTRACT;
&quot;*&quot;             return MULTIPLY;
&quot;/&quot;             return DIVIDE;
&quot;(&quot;             return LEFT_BRACKET;
&quot;)&quot;             return RIGHT_BRACKET;

.               printf(&quot;Unrecognized character: %s\n&quot;, yytext);

%%
</code></pre>
<p>parser.y</p>
<pre><code class="language-cpp">%{
#include &lt;stdio.h&gt;

#define YYSTYPE double

int yylex(void);
void yyerror(char const *);
%}

/* Bison declarations */
%token NUMBER
%token END
%token LEFT_BRACKET
%token RIGHT_BRACKET

%left ADD SUBTRACT
%left MULTIPLY DIVIDE

%% /* The grammar follows */

input:  /* empty */
        | input line
;

line:   END
        | exp END { printf(&quot;Ergebnis: %d\n&quot;, $1); }
;

exp:    NUMBER                                  { $$ = $1;      }
        | exp ADD exp                           { $$ = $1 + $3; }
        | exp SUBTRACT exp                      { $$ = $1 - $3; }
        | exp MULTIPLY exp                      { $$ = $1 * $3; }
        | exp DIVIDE exp                        { $$ = $1 / $3; }
        | LEFT_BRACKET exp RIGHT_BRACKET        { $$ = $2;      }
;

%%
</code></pre>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204711/flex-bison-problem-bei-den-operatoren-und</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 17:16:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204711.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Feb 2008 10:21:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Flex &#x2F; Bison - Problem bei den Operatoren * und &#x2F; on Wed, 06 Feb 2008 10:21:42 GMT]]></title><description><![CDATA[<p>Hallo liebe Forengemeinde,</p>
<p>das Problem liegt bei den Operatoren * und /. Wenn diese aufgerufen werden ist $3 immer 0. Bei den anderen Operatoren funktioniert es hingegen einwandfrei. Das Ergebnis wird richtig berechnet. Weiß jemand von euch wo das Problem liegt?</p>
<p>scanner.l</p>
<pre><code class="language-cpp">%{
#include &quot;parser.tab.h&quot;
%}

DIGIT           [0-9]

%%

username        printf(&quot;%s&quot;, getlogin());

&quot;\n&quot;            return END;

{DIGIT}+        {
                        yylval = atoi(yytext);
                        return NUMBER;
                }

&quot;+&quot;             return ADD;
&quot;-&quot;             return SUBTRACT;
&quot;*&quot;             return MULTIPLY;
&quot;/&quot;             return DIVIDE;
&quot;(&quot;             return LEFT_BRACKET;
&quot;)&quot;             return RIGHT_BRACKET;

.               printf(&quot;Unrecognized character: %s\n&quot;, yytext);

%%
</code></pre>
<p>parser.y</p>
<pre><code class="language-cpp">%{
#include &lt;stdio.h&gt;

#define YYSTYPE double

int yylex(void);
void yyerror(char const *);
%}

/* Bison declarations */
%token NUMBER
%token END
%token LEFT_BRACKET
%token RIGHT_BRACKET

%left ADD SUBTRACT
%left MULTIPLY DIVIDE

%% /* The grammar follows */

input:  /* empty */
        | input line
;

line:   END
        | exp END { printf(&quot;Ergebnis: %d\n&quot;, $1); }
;

exp:    NUMBER                                  { $$ = $1;      }
        | exp ADD exp                           { $$ = $1 + $3; }
        | exp SUBTRACT exp                      { $$ = $1 - $3; }
        | exp MULTIPLY exp                      { $$ = $1 * $3; }
        | exp DIVIDE exp                        { $$ = $1 / $3; }
        | LEFT_BRACKET exp RIGHT_BRACKET        { $$ = $2;      }
;

%%
</code></pre>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450373</guid><dc:creator><![CDATA[Dewey]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to Flex &#x2F; Bison - Problem bei den Operatoren * und &#x2F; on Wed, 06 Feb 2008 10:30:58 GMT]]></title><description><![CDATA[<p>wenn YYSTYPE double ist, sollte es dann bei printf nicht %f heißen? ka, ob das dein Problem erklärt, dann sollte ja die Addition auch nicht funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450382</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to Flex &#x2F; Bison - Problem bei den Operatoren * und &#x2F; on Wed, 06 Feb 2008 10:44:01 GMT]]></title><description><![CDATA[<p>Hallo Bashar,</p>
<p>%.2f um genau zu sein. <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 />
Aber das ist nicht das Problem. Weil %d die Ziffern nach einem Komma entfernt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450395</guid><dc:creator><![CDATA[Dewey]]></dc:creator><pubDate>Wed, 06 Feb 2008 10:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Flex &#x2F; Bison - Problem bei den Operatoren * und &#x2F; on Wed, 06 Feb 2008 11:02:05 GMT]]></title><description><![CDATA[<p>Hallo Bashar,</p>
<p>es lag daran, dass der Wert von double ... 0 wird wenn das Ergebnis keine Fließkommazahl ergeben hat.<br />
Danke!</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450414</guid><dc:creator><![CDATA[Dewey]]></dc:creator><pubDate>Wed, 06 Feb 2008 11:02:05 GMT</pubDate></item><item><title><![CDATA[Reply to Flex &#x2F; Bison - Problem bei den Operatoren * und &#x2F; on Wed, 06 Feb 2008 11:27:55 GMT]]></title><description><![CDATA[<p>Dewey schrieb:</p>
<blockquote>
<p>Aber das ist nicht das Problem. Weil %d die Ziffern nach einem Komma entfernt werden.</p>
</blockquote>
<p>Nein. %d geht ganz knallhart davon aus, dass ein int übergeben wurde. Es findet keine Typumwandlung statt, auf welcher Basis auch? Das %d sieht nur der Benutzer und -- zur Laufzeit -- die Funktion printf. Compiler geben manchmal Warnungen aus, wenn sie erkennen, dass der Typ nicht stimmt, aber ungefragt konvertieren tut keiner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450431</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 06 Feb 2008 11:27:55 GMT</pubDate></item></channel></rss>