主题:用lex&yacc实现头文件函数声明查找遇到问题
leshemlin
[专家分:0] 发布于 2011-04-05 10:59:00
毕业设计内容是需要用lex&yacc做一个在给定函数库里的大量头文件里查找某函数的声明。比如查找printf的函数声明,应该能找到在 stdio.h的**行的:_CRTIMP int __cdecl printf (const char*, ...); 初步设想用lex识别标记传给yacc,如果是类似 printf();这样的序列的话就确定其为函数声明并做相应处理,但是有个问题就是printf是用户输入的,应该保存在一个变量里,lex怎么把这个变量当成正则表达式作为模式来识别。
有别的思路的筒子们欢迎提出~~谢谢
回复列表 (共8个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-04-05 23:29:00
看看CNPack里的部分源碼估計對你會有所幫助。
不過源碼基本都是用Delphi開發的:)
板凳
leshemlin [专家分:0] 发布于 2011-04-05 23:40:00
求指教啊求指教
3 楼
leshemlin [专家分:0] 发布于 2011-04-06 07:44:00
嗯,谢谢,回头去看下,不知道是否是实现的思路有问题
4 楼
dongyuanxun [专家分:7180] 发布于 2011-04-06 17:40:00
不清楚lz说的是什么意思 lex和yacc都是使用记号的 不都是自己定的么
5 楼
dongyuanxun [专家分:7180] 发布于 2011-04-06 17:43:00
[quote]看看CNPack里的部分源碼估計對你會有所幫助。
不過源碼基本都是用Delphi開發的:)[/quote]
CNPack的代码太多,也没啥涉及到编译语法的问题,而且和lex、yacc实现思路不一样啊。
6 楼
leshemlin [专家分:0] 发布于 2011-04-06 19:36:00
可能描述的不是很清楚哈,应该是这样,lex的规则段大概 是这样的 : 模式 {动作},这个模式是程序在编写的时候已经确定的,但是我想输入任意的函数名(如printf、scanf等)存储在某个变量里也能作为“模式”,然后依据模式{动作}的规则去搜索该函数声明所在的位置并做动作:打印出该声明行。不知道思路对不
7 楼
leshemlin [专家分:0] 发布于 2011-04-07 08:38:00
[quote][quote]看看CNPack里的部分源碼估計對你會有所幫助。
不過源碼基本都是用Delphi開發的:)[/quote]
CNPack的代码太多,也没啥涉及到编译语法的问题,而且和lex、yacc实现思路不一样啊。[/quote]
可能描述的不是很清楚哈,应该是这样,lex的规则段大概 是这样的 : 模式 {动作},这个模式是程序在编写的时候已经确定的,但是我想输入任意的函数名(如printf、scanf等)存储在某个变量里也能作为“模式”,然后依据模式{动作}的规则去搜索该函数声明所在的位置并做动作:打印出该声明行。不知道思路对不
8 楼
eastcowboy [专家分:25370] 发布于 2011-04-07 21:48:00
我觉得可能是用lex&yacc找出所有的函数声明,然后再自己写代码判断哪一个是printf的声明。
我来回复