help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Cannot print correct values in Bison code


From: Martin Alexander Neumann
Subject: Re: Cannot print correct values in Bison code
Date: Sat, 30 May 2020 09:59:55 +0200

Good morning Christian,

during reductions Bison does "hand over" a single semantic value only
from the right side of your productions to the left side of the
productions. By default it is the first, i.e. "$$ = $1" in Bison terms.

I suppose your productions of array_vals look like the following:

--------------------------------------------------------------
array_vals  : array_vals COMMA vals { $$ = $1; }
            | vals;  { $$ = $1; }
--------------------------------------------------------------

If these rules match yours ones, then in your example,

1. "10" is reduced to "vals",
2. "vals" is reduced to "array_vals",
3. "20 is reduced to "vals",
3. "array_vals COMMA vals" is reduced to "array_vals"
...

Therefore, your example is constantly handing over "10" only as semantic
value.

If you want to hand over more semantic values during a reduction, you
have to extend this code yourself, e.g.

--------------------------------------------------------------
array_vals  : array_vals COMMA vals { $$ = concatenate*($1, $3); }
            | vals;  { $$ = $1; }
--------------------------------------------------------------

* Some self-made function that somehow can join two semantic values into
one. It could for example save these two values in a linked list.

Greetings,
Alex
On 30.05.20 02:59, M. P. D Productions wrote:
> *BISON VERSION: 3.6.2*
> 
> Hey! I'm very new to Flex/Bison, so please go easy on me. I am trying to
> declare the syntax of an "array" as follows:
> *array: '[' array_vals ']'*
> 
> *array_vals:*
> *| vals*
> 
> *vals: STRING //String values defined in my lexer*
> *| FLOAT //Float values defined in my lexer*
> *| INT //Integer values defined in my lexer*
> 
> I feel like this is pretty self explanatory, but there's just *one *problem:
> Wherever I print the "array_vals", using this:  *array: '[' array_vals ']'
> { cout << $2 << endl; }* I get only the first value of the array in my
> source code, so if I have this in my source file: "[10, 20, 30, 40]" then
> it only prints "10." I've tried printing the "vals" in "array_vals", and
> it's even weirder and inconsistent. I know that this isn't a bug since I
> went from Bison version 3.5.1 to 3.6.2 and there was no difference. If
> someone knows, then thank you, but once again, I am new to this, so please
> go easy on me.
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]