应该如何在(.y)文件中使用yy_scan_buffer(lex和yacc)

时间:2015-05-25 09:28:24

标签: yacc lex

如何在(.y)文件(lex和yacc)中使用yy_scan_buffer。 yy_scan_buffer的返回类型是YY_BUFFER_STATE,它位于lex.yy.c中。

1 个答案:

答案 0 :(得分:0)

对于背景:它是一个来自yy_scan_bytes的特殊函数,它从yy_scan_string调用(同样可以被覆盖)。

根据 String input to flex lexer ,返回类型对应于应使用yy_delete_buffer删除的句柄,但yy_scan_buffer执行删除操作。但是(查看生成的代码),这似乎不正确 - 也许这取决于所使用的flex版本。

根据这些问题,您可能希望在编写可重入代码时使用yy_scan_string等(尽管这些函数优先于flex上的任何工作以提供重入):

Flex目前的文档提到它用于multiple input buffers

  

某些扫描程序(例如支持“包含”文件的扫描程序)需要从多个输入流中读取。由于柔性扫描仪执行大量缓冲,因此只需编写对扫描上下文敏感的YY_INPUT(),就无法控制下一个输入的读取位置。 YY_INPUT()仅在扫描程序到达其缓冲区末尾时调用,这可能需要很长时间才能扫描诸如需要切换输入源的include语句之类的语句。

文档继续提供使用示例。根据您的想法,这些可能会有用。