我在教自己的野牛,並向維基百科上傳相同的內容,並複製粘貼來自示例的代碼[http://en.wikipedia.org/wiki/GNU_Bison]。它編譯和工作完美。然後,我通過添加一點C++來添加它。這裏的是我的新Parser.y文件:一個相當不尋常的野牛錯誤
%{
#include "TypeParser.h"
#include "ParserParam.h"
#include "addition.h"
%}
%define api.pure
%left '+' TOKEN_PLUS
%left '*' TOKEN_MULTIPLY
%left '-' TOKEN_SUBTRACT
%left '/' TOKEN_DIVIDE
%left '^' TOKEN_EXP
%token TOKEN_LPAREN
%token TOKEN_RPAREN
%token TOKEN_PLUS
%token TOKEN_MULTIPLY
%token <value> TOKEN_NUMBER
%type <expression> expr
%%
input:
expr { ((SParserParam*)data)->expression = $1; }
;
expr:
expr TOKEN_PLUS expr { $$ = new Addition($1, $2); }
| expr TOKEN_MULTIPLY expr { $$ = new Multiplication($1, $2); }
| expr TOKEN_SUBTRACT expr { $$ = new Addition($1, $2); }
| expr TOKEN_DIVIDE expr { $$ = new Multiplication($1, $2); }
| expr TOKEN_EXP expr { $$ = new Addition($1, $2); }
| TOKEN_LPAREN expr TOKEN_RPAREN { $$ = $2; }
| TOKEN_NUMBER { $$ = new Value($1); }
;
%%
但後來我不斷收到以下錯誤:
Parser.y:33.52-53: $2 of `expr' has no declared type
Parser.y:34.62-63: $2 of `expr' has no declared type
Parser.y:35.56-57: $2 of `expr' has no declared type
Parser.y:36.60-61: $2 of `expr' has no declared type
Parser.y:37.52-53: $2 of `expr' has no declared type
我該如何解決呢?我的意思是,我改變了什麼導致了這個?我沒有改變任何維基百科代碼,%type%
聲明仍然存在[該聯盟有相同的成員,類型從SExpression
更改爲Expression
。]。所有類別,即Addition
,Expression
,Multiplication
都被定義和聲明。我不認爲這是造成這個問題的原因,但只是說。
爲什麼它只有在$2
有問題。即使$1
的類型爲expr
,那麼爲什麼我沒有得到任何錯誤$1
?
任何幫助理解...
哦......多麼愚蠢的疏忽。非常感謝你指出:) –
我一直被自己難住:) – user786653