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

zhangfengking 2011-11-03 12:25:40
小弟在做一个verilog的语法解析器,是用bison+flex做的。我想实现的是:比如输入文档有100行,我不想全部解析,我想跳转到第30行,解析第30行到第50行;然后跳转到70行,解析第70行到第88行,然后解析结束。请问高手们,yacc+ lex(bison+flex )能不能实现这个功能,能的话应该怎么做。小弟急用,请高手赐教,先在此谢过了!
...全文
116 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
神农氏 2011-11-03
  • 打赏
  • 举报
回复
否则你要写个麻烦的 函数skipLine();

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

这不是个好方法,事实上以C语言编译器为例,也是先处理预编译指令,把不要的行先去掉,然后才传给flex做词法分析的。
神农氏 2011-11-03
  • 打赏
  • 举报
回复
可以实现,但这个跳转的功能没必要用flex做,再把要解析的文本交给flex之前,你可以先写个过滤器,把不要的行过滤掉。
赵4老师 2011-11-03
  • 打赏
  • 举报
回复
#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);
}

24,857

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧