有没有使用flex + bison (bison是必需的)的例子,输入是字符串,而不是文件?
我试过使用YY_BUFFER_STATE ..。函数而不是yyin,并得到错误"flex scanner push-back overflow“。Flex将InputString1更改为0。关于SO的其他几个答案帮助不大--实际的代码会更有用。
发布于 2011-05-01 15:58:54
in the Flex manual描述了扫描内存区的方法。
Flex修改了yy_scan_buffer提供的缓冲区。如果您需要避免被修改,yy_scan_bytes或yy_scan_string将是合适的。
扫描文件或内存区域是否独立于解析器(bison)。
如果您的lexer失败了,我建议您检查它是否也失败了,即使是在读取文件时也是如此。
作为参考,下面的flex代码在我的环境中打印ab和cd。
%%
[a-z]+ puts( yytext );
.
\n
%%
int yywrap( void ) { return 1; }
int main() {
yy_scan_string("ab cd");
yylex();
yy_delete_buffer( YY_CURRENT_BUFFER );
}发布于 2015-02-19 16:38:51
您也可以使用yy_scan_buffer(char*,size_t)
https://stackoverflow.com/questions/5845652
复制相似问题