更改Bison

阅读: 评论:0

更改Bison

更改Bison

在我最开始使用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;
    

本文发布于:2024-02-03 08:27:32,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170692005449839.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Bison
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23