[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nonterminal has no declared type when using variants
From: |
Slippery Simbad |
Subject: |
Re: nonterminal has no declared type when using variants |
Date: |
Sat, 4 Apr 2015 23:42:24 +0100 |
Very sorry, I was sleepy here. I fixed my problem!
On 4 April 2015 at 21:20, Slippery Simbad <address@hidden> wrote:
> Hello,
>
> I have the following grammar,
>
> %skeleton "lalr1.cc"
> %require "3.0.2"
> %defines
> %define api.value.type variant
> %define api.token.constructor
> %define parse.assert
> %define api.token.prefix {TOK_}
> %locations
> %define parse.trace
>
> %token
> END 0 "end of file"
> ASSIGN ":="
> MINUS "-"
> PLUS "+"
> STAR "*"
> SLASH "/"
> LP "("
> RP ")"
>
> %token <int> NUMBER "number"
> %type <int> exp
>
> %%
>
> %start unit;
>
> unit: exp { driver.result = $1; };
>
> %left "+" "-";
> %left "*" "/";
>
> exp:
> exp "+" exp { $$ = $1 + $3; }
> | exp "-" exp { $$ = $1 - $3; }
> | exp "*" exp { $$ = $1 - $3; }
> | exp "/" exp { $$ = $1 - $3; }
> | "(" exp ")" { $$ = $1; }
> | "number" { std::swap($$, $1); }
>
> %%
>
> When I try to create a parser from it, I get,
>
> $ bison testcase.yy
> testcase.yy:40.22-23: error: $1 of ‘exp’ has no declared type
> | "(" exp ")" { $$ = $1; }
>
> I was following the C++ tutorial in the manual. I've checked my work a
> couple of times, I don't see what I've done different from the tutorial in
> this example.
> I've clearly defined a type for "exp":
> %type <int> exp
>
> So why the error message?
>
> Thank you for Bison!
> -Simbad.
>