《Flex與Bison中文版》填坑之旅 2

2021-10-10 22:50:59 字數 1466 閱讀 3856

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檔案的壓縮 合併 拆分 轉換和編輯。輕鬆閱讀 使...