如何将flex缓冲区重定向到我的缓冲区

时间:2013-11-28 12:25:16

标签: bison flex-lexer

经过几天的摇摆之后,我仍然无法找到如何声明我的缓冲区。 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 个答案:

答案 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返回的值。