2013-11-28 35 views
0

經過幾天的爭吵後,我仍然無法找到如何聲明我的緩衝區。 how to pass tkinter text to flex如何將彈性緩衝區重定向到我的緩衝區

什麼是將flex緩衝區重定向到我的緩衝區的正確方法? 我想要做的步驟: 1 - 沒有條件,沒有返回到原始緩衝區,只是通過調用一個函數永久重定向來自圖形前端的緩衝區。 2 - 從圖形前端將文本複製到我的緩衝區(甚至不如直接fely緩衝到前端緩衝器) 3 - 調用yyparse 4 - 重複步驟2和3

也許是足夠申報一個簡單的公共功能如下:

void setmybuffer(char *ptr) 
{ 
yy_scan_string (char *ptr); 
.... // my other stuff to set 
} 

後來我想我會在任何flex操作之前調用它。但是,當我試圖把這個聲明爲我*的任何部分.L文件,收到錯誤

lex.yy.c: In function ‘setmybuffer’: 
lex.yy.c:2206:18: error: conflicting types for ‘yy_scan_string’ 
    YY_BUFFER_STATE yy_scan_string (char *ptr); 

什麼是錯的,什麼是路?

回答

1
yyscan_string(char *ptr); 

是一個聲明,因此編譯器會抱怨函數已經聲明並且返回類型不同。

你想調用的函數:

yyscan_string(ptr); 

所以,你可能做這樣的事情:

// This defines the function setmybuffer, which has no return value ("void") 
// and a single parameter which is a pointer to a character string ("char *") 
void setmybuffer(char *ptr) 
{ 
    // This **calls** the function yy_scan_string, passing it the same pointer 
    // to a character string. 
    yy_scan_string (ptr); 
    .... // my other stuff to set 
} 

請注意,你需要釋放YY_BUFFER_STATE當你與它完成。通常你可以簡單地調用:

yy_delete_buffer(YY_CURRENT_BUFFER); 

當你與輸入完成(例如,在你的<<EOF>>規則)。對於更復雜的用例,您可能需要保存yyscan_string返回的值。

+0

這就是讓我瘋狂的東西。如果我寫
void setmybuffer(* ptr)
\t {
\t yy_scan_string(* ptr);
\t}
那麼該消息爲:
abs.l:142:18:錯誤:之前預期的聲明說明符或 '...' '*' 令牌
{
^
user2469202

+0

@ user2469202:你」如果不知道至少有一點關於如何編寫C函數,恐怕不能完成這個任務。我編輯了我的答案,使其更加明確,但您應該花幾分鐘閱讀C的介紹,例如http://en.wikibooks.org/wiki/A_Little_C_Primer - 它引入了函數調用和函數定義語法很早(忽略談論C的歷史的部分),這是無關緊要的。) – rici