经过几天的摇摆之后,我仍然无法找到如何声明我的缓冲区。 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);
出了什么问题,方式是什么?
答案 0 :(得分: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
返回的值。