在我最开始使用Bison-flex时,出于某些原因,涉及到题目这个问题。在此来说明一下该如何操作。
如有错漏,还望指摘。
首先,《Flex与Bison中文版》中说明了,Bison-Flex一般以FILE*
变量yyin
作为指定输入,如果没有特别指定,yyin
默认为标准输入。所以当我们想分析文件中的内容的时候,就不得不涉及,如何来更改输入源呢,改成某个文件,或者指定的字符串变量?
改成指定文件:
这里用到了yyrestart
函数。这个函数的作用就是将输入源改为指定文件。具体用法如下:
FILE* f;
f = fopen("dir", "r); //打开文件
yyrestart(f);
yylex();
将输入源改成指定字符串:
这里需要用到yy_switch_to_buffer
函数。这个函数的作用是将输入源改为指定的缓存。
首先需要创建缓存,类型为YY_BUFFER_STATE
(其在Flex生成的文件中定义,是struct
yy_buffer_state*
型变量),再用yy_scan_string
函数将字符串扫描进缓存中。最后用yy_switch_to_buffer
来更换到新的缓存。
在词法分析后,还需要使用yy_delete_buffer
函数和yylex_destroy
函数来析构内存。
具体方法如下:
int parser(char* input)
{//创建缓存,并将字符串扫描进缓存中YY_BUFFER_STATE bp = yy_scan_string(input);//分配失败if (bp == nullptr) {cout << "error on creating YY_BUFFER_STATE" << endl;return -1;}//将输入源转为指定内存yy_switch_to_buffer(bp);//词法语法分析yyparse();//清理内存yy_delete_buffer(bp);yylex_destroy();return 0;
本文发布于:2024-02-03 08:27:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170692005449839.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |