回 帖 发 新 帖 刷新版面

主题:用lex&yacc实现头文件函数声明查找遇到问题

毕业设计内容是需要用lex&yacc做一个在给定函数库里的大量头文件里查找某函数的声明。比如查找printf的函数声明,应该能找到在 stdio.h的**行的:_CRTIMP int __cdecl    printf (const char*, ...);  初步设想用lex识别标记传给yacc,如果是类似 printf();这样的序列的话就确定其为函数声明并做相应处理,但是有个问题就是printf是用户输入的,应该保存在一个变量里,lex怎么把这个变量当成正则表达式作为模式来识别。
有别的思路的筒子们欢迎提出~~谢谢

回复列表 (共8个回复)

沙发

看看CNPack里的部分源碼估計對你會有所幫助。
不過源碼基本都是用Delphi開發的:)

板凳

求指教啊求指教

3 楼


嗯,谢谢,回头去看下,不知道是否是实现的思路有问题

4 楼

不清楚lz说的是什么意思 lex和yacc都是使用记号的 不都是自己定的么

5 楼

[quote]看看CNPack里的部分源碼估計對你會有所幫助。
不過源碼基本都是用Delphi開發的:)[/quote]
CNPack的代码太多,也没啥涉及到编译语法的问题,而且和lex、yacc实现思路不一样啊。

6 楼


可能描述的不是很清楚哈,应该是这样,lex的规则段大概 是这样的 : 模式  {动作},这个模式是程序在编写的时候已经确定的,但是我想输入任意的函数名(如printf、scanf等)存储在某个变量里也能作为“模式”,然后依据模式{动作}的规则去搜索该函数声明所在的位置并做动作:打印出该声明行。不知道思路对不

7 楼

[quote][quote]看看CNPack里的部分源碼估計對你會有所幫助。
不過源碼基本都是用Delphi開發的:)[/quote]
CNPack的代码太多,也没啥涉及到编译语法的问题,而且和lex、yacc实现思路不一样啊。[/quote]
可能描述的不是很清楚哈,应该是这样,lex的规则段大概 是这样的 : 模式  {动作},这个模式是程序在编写的时候已经确定的,但是我想输入任意的函数名(如printf、scanf等)存储在某个变量里也能作为“模式”,然后依据模式{动作}的规则去搜索该函数声明所在的位置并做动作:打印出该声明行。不知道思路对不

8 楼

我觉得可能是用lex&yacc找出所有的函数声明,然后再自己写代码判断哪一个是printf的声明。

我来回复

您尚未登录,请登录后再回复。点此登录或注册