首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

yacc+ lex(bison+flex )的使用有关问题,怎么定位输入文档的某一行,解析文档中的部分内容

2012-02-13 
yacc+ lex(bison+flex )的使用问题,如何定位输入文档的某一行,解析文档中的部分内容小弟在做一个verilog的

yacc+ lex(bison+flex )的使用问题,如何定位输入文档的某一行,解析文档中的部分内容
小弟在做一个verilog的语法解析器,是用bison+flex做的。我想实现的是:比如输入文档有100行,我不想全部解析,我想跳转到第30行,解析第30行到第50行;然后跳转到70行,解析第70行到第88行,然后解析结束。请问高手们,yacc+ lex(bison+flex )能不能实现这个功能,能的话应该怎么做。小弟急用,请高手赐教,先在此谢过了!

[解决办法]
可以实现,但这个跳转的功能没必要用flex做,再把要解析的文本交给flex之前,你可以先写个过滤器,把不要的行过滤掉。
 
[解决办法]
否则你要写个麻烦的 函数skipLine();

然后在词法列表中加入:
'\n' { skipLine();}

这不是个好方法,事实上以C语言编译器为例,也是先处理预编译指令,把不要的行先去掉,然后才传给flex做词法分析的。
[解决办法]

C/C++ code
#include <stdio.h>char buf[32768];FILE *f;void getnoline(int no) {    int n;    n=0;    rewind(f);    while (1) {        if (NULL==fgets(buf,32768,f)) {            buf[0]=0;            break;        }        n++;        if (n>=no) break;    }}void main() {    f=fopen("abc.txt","r");    if (NULL==f) {        printf("Can not open file abc.txt!\n");        return;    }    getnoline(  1);printf("%s",buf);    getnoline( 10);printf("%s",buf);    getnoline(100);printf("%s",buf);    fclose(f);} 

热点排行