2013-11-28 32 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