免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6653 | 回复: 5
打印 上一主题 下一主题

[C] 求教,关于flex和bison,我想在我的程序里传递参数给调用的yyparse(),怎么整 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-31 21:54 |只看该作者 |倒序浏览
本帖最后由 hsum 于 2010-06-01 21:43 编辑

问题解决了!
只要在我的main函数里面,在调用yyparse()之前,调用yy_switch_to_buffer(yy_scan_string("xxxxxx")),就可以将xxxxx作为欲解析的字符串传递给yylex了!这是flex的一个内部函数!谢谢各位!





再简单讲下问题:
我在我的main函数里面调用yyparse(param a),传递了一个结构体参数给yyparse,然后yyparse自己调用yylex()函数,现在我想将参数a(其实是a中的一个成员)传递给yylex(其实是待解析的字符串),我在网上找了很多资料,知道在yyparse文件里面添加#define YYLEX_PARAM a->str    但是接下去我改怎么修改lex文件,让它获知这个参数,并且将这个参数作为它词法解析的字符串呢?!

-----------------------------------------------------------------------------------------------------------

是这样,我用flex和bison编写好词法语法规则后,在我的程序里调用yyparse()就可以等待用户从键盘上输入然后进行解析了。

但是我现在要实现socket接口,就是说想要服务器端这边从socket接口获取用户的输入后,把输入传递给yyparse(),让他解析(或者是干脆把socket的套接字socketfd传递给lex,让它从套接口自己读然后解析),可是yylex默认是从标准输入,也就是键盘读取,我现在不知道怎么改变yylex的输入,我的程序里没有调用yylex(),我只是调用了yyparse(),在yyparse()中bison自己再调用yylex(),我现在知道怎么传递参数给yyparse()了,可是不知道怎么传递参数给yylex(),清高手指教!

论坛徽章:
0
2 [报告]
发表于 2010-06-01 09:50 |只看该作者
“利用pipe重定向标准输入”应该是你想找的办法。
参考http://keren.blog.51cto.com/720558/144930

论坛徽章:
0
3 [报告]
发表于 2010-06-01 11:09 |只看该作者
重定向的话我还要考虑,客户端输入的命令服务端获得后要执行,然后有一个结果信息,需要写入到相应套接字返回给客户端输出,如果有n个客户端同时连接,产生10个线程,那么怎么区分呢?

所以还要是给yylex()和yyparse()传递参数,我的想法是传递至少2个参数,一个是套接字socketfd,一个是客户端输入的字符串,然后服务端可以根据socketfd区分,将结果写入相应的套接口。

现在我的词法文件时lex.yy.c,语法文件时parse.tab.c,我在我的main函数中调用yyparse()就可以等待用户输入进行解析了

我现在知道怎么传递参数给yyparse(),也知道怎么在parse.tab.c文件中传递参给yylex(),(通过定义宏YYLEX_PARAM),可是请问在lex.yy.c中怎么获得传递进来的参数?

论坛徽章:
0
4 [报告]
发表于 2010-06-01 12:19 |只看该作者
你调用yyparse的程序也是可以进程方式运行十份的吧,不放参考telnetd的做法。

论坛徽章:
0
5 [报告]
发表于 2010-06-01 20:52 |只看该作者
顶下阿

求教!

论坛徽章:
0
6 [报告]
发表于 2010-06-02 12:00 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP