0

我创建了一个 .exe 文件,它可以解析由 lex 和 yacc 生成的表达式。但我这样做只是从屏幕获取输入,然后从屏幕返回解析器结果。我看到了一些关于使用的建议YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size),但我仍然找不到一个好的方法来做到这一点。

是否有可能我将一些头文件(由 lex yacc 编译)放到我的主程序 c++ 中,然后我可以使用 yylex() 调用它,给一个字符串作为输入,并在主程序中获取返回值?感谢您的帮助,我对如何实现它感到困惑。谢谢。

4

1 回答 1

1

yy_scan_string是你如何给 flex 一个字符串作为输入。您首先调用它,然后调用yylex它,它将使用该字符串作为输入从而不是stdin. 当您从 获得 EOF 时yylex,它已经扫描了整个字符串。yy_delete_buffer然后,您可以调用YY_BUFFER_STATE返回的 by yy_scan_string(以释放内存)并yy_scan_string在要扫描新字符串时再次调用。

您可以yy_scan_buffer改为使用来节省一些复制,但是您必须自己正确设置缓冲区(基本上,它需要以两个NUL 字节而不是一个字节结束)。

不幸的是,flex 没有标准的头文件来声明这些。因此,您需要自己在某处声明它们(复制 flex 文档中的声明),或者在.l文件的第 3 部分调用它们,该部分被逐字复制到lex.y.c文件末尾。

于 2013-05-06T17:09:30.830 回答