tags:

views:

175

answers:

2

Below is my rule, when i replace $2 with '=' my code works. I know by default all literal tokens uses their ascii value (hence why multi character token require a definition)

The below doesnt work. The function is called with 0 instead of '=' like i expect. is there an option i can set? (It doesn't appear so via man pages)

AssignExpr: var '=' rval      { $$ = func($1, $2, $3); }

In another piece of code i have MathOp: '=' | '+' | '%' ... hence why i am interested.

+2  A: 

I think you are right, Bison just doesn't work that way.

You can easily fix it, of course:

  • just declare a token for =, recognize it in your lexer, and return its semantic value, or...
  • declare a production for it and return it with $$ or...
  • assign '=' to yylval in yylex()
DigitalRoss
+2  A: 

The value for $2 in this context will be whatever the yylex function put into the global variable yylval before it returned the token '='. If the lexer doesn't put anything into yylval, it will probably still be 0, as you're seeing.

Chris Dodd