fb1-5.tab.cpp:602:23: error: 'yylex' was not declared in this scope
fb1-5.tab.cpp:1452:35: error: 'yyerror' was not declared in this scope
(在兩個地方出現)
所以,在fb1-5.y中還需要補充相關的**。主要在.y檔案的第一部分需要補充宣告
extern int yylex();和 void yyerror(const char* s);
補充yylex()是因為由.y檔案生成的parser**中有要使用由.l檔案生成的scanner中的yylex()函式,如果不宣告為extern的,那麼當編譯parser的時候編譯器就會報錯,找不到該函式。
補充yyerror()是因為需要前置宣告。我不知道作者的環境下是怎樣的,但一般c/c++的函式的編寫規矩是要前置宣告的。
// fb1-5.y
%/*declare tokens*/
%token number
%token add sub mul div abs op cp
%token eol
%%calclist:
| calclist exp eol
;exp: factor
| exp add factor
| exp sub factor
;factor: term
| factor mul term
| factor div term
;term: number
| abs term
| op exp cp
;%%int main(int argc, char **ar**)
void yyerror(const char* s)
// fb1-5.l
%%option noyywrap
%%"+"
"-"
"*"
"/"
"|"
"("
")"
[0-9]+
\n
[ \t]
.
"//".*
%%
本人使用的codeblocks環境(請參考前文),在對整個工程進行build處理時,第一次編譯會報錯,說在編譯flex生成的cpp時找不到由.y生成的那個標頭檔案。
請不要著急,再次build一下就好了。
因為,codeblocks的build過程(沒有自己寫makefile)是先win_flex處理.l檔案,生成了.flex.cpp,然後接著就編譯該生成的.flex.cpp,但由於.l檔案中include了由bison處理.y後生成的標頭檔案「fb1-5.tab.h」,但這時win_bison還沒有處理.y檔案,也就沒有生成"fb1-5.tab.h"。既然還不存在,那當然會報找不到的錯了。
Flex3cookbook中文版(常青)
flex3 cookbook 翻譯協作組 flex3 cookbook簡體中文是眾多共同努力的成果,沒有他們的辛勤勞動也就不會有此書,在此請允許我代表廣大的flex愛好者向所有自願參與翻譯的人員表示最衷心的感謝。由於此書採用多人協同翻譯,每個人的水平又不盡相同,難免會出現或多或少的問題,在這裡也請每...
Windows Home Server 中文版來了
簡體和正體中文版windows home server將在2008年下半年全面推出了!6月5日,windows home server產品部總經理charlie kindel在台灣宣布了這個訊息。此次中文版在台北computex展出,合作夥伴包括技嘉 gigabyte 威盛 via 啟基 wnc 和...
ilove中文 iLovePDF中文版
軟體介紹 ilovepdf是一款pdf檔案處理工具,可以幫助使用者對pdf檔案進行壓縮 拆分 合併 轉換 編輯等處理,還可以轉換成其它格式,支援pdf檔案瀏覽及加密,是一款很好的pdf檔案工具。軟體特色 離線操作 無需網路連線。你可以隨時隨地進行pdf檔案的壓縮 合併 拆分 轉換和編輯。輕鬆閱讀 使...