博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
更改Bison-Flex的输入源
阅读量:3957 次
发布时间:2019-05-24

本文共 884 字,大约阅读时间需要 2 分钟。

在我最开始使用Bison-flex时,出于某些原因,涉及到题目这个问题。在此来说明一下该如何操作。

如有错漏,还望指摘。

首先,《Flex与Bison中文版》中说明了,Bison-Flex一般以FILE*变量yyin作为指定输入,如果没有特别指定,yyin默认为标准输入。所以当我们想分析文件中的内容的时候,就不得不涉及,如何来更改输入源呢,改成某个文件,或者指定的字符串变量?

  1. 改成指定文件

    这里用到了yyrestart函数。这个函数的作用就是将输入源改为指定文件。具体用法如下:

    FILE* f;f = fopen("dir", "r); //打开文件yyrestart(f);yylex();
  2. 将输入源改成指定字符串

    这里需要用到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;

转载地址:http://ftxzi.baihongyu.com/

你可能感兴趣的文章
shell函数与自带变量
查看>>
linux下shell获取不到PID
查看>>
sort详解
查看>>
linux,shell中if else if的写法,if elif
查看>>
shell中单引号、双引号、反引号的区别
查看>>
shell脚本死循环方法
查看>>
shell中$*和$@的区别
查看>>
log4cxx 的编译安装过程和使用
查看>>
简单邮件系统程序
查看>>
STL里的multimap使用详解
查看>>
STL 库其中的 std::string用法总结
查看>>
模态对话框的销毁过程与非模态对话的几种销毁方法
查看>>
C++实现http下载 && 24点计算编码风格
查看>>
memcached了解使用和常用命令详解
查看>>
GDB调试各功能总结
查看>>
"undefined reference to" 多种可能出现的问题解决方法
查看>>
类结构定义
查看>>
Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
查看>>
图像处理基本算法(汇总)以及实现
查看>>
C++编程获取本机网卡信息 本机IP 包括Windows和Linux
查看>>