所以你知道了,这是我被分配的项目.我不是在寻找代码中的答案,而是更多的方向.
我被告知要做的是查看文件并计算实际的代码行,同时记录函数名称和函数的各行代码.我遇到的问题是从文件中读取时确定一种方法,以确定该行是否是函数的开头.
到目前为止,我只能想到可能有一个数组类型的字符串数组(int,double,char等),在行中搜索,然后搜索括号,然后搜索没有分号(所以我知道这不仅仅是函数的声明).
所以我的问题是,我应该如何解决这个问题,还是有其他方法可以推荐?
我将计算的代码将使用C++.
我想到了三种方法.
使用正则表达式.这与您的想法非常相似.寻找看起来像函数定义的行.这样做很快,但在很多方面都可能出错.
char *s = "int main() {"
Run Code Online (Sandbox Code Playgroud)
不是函数定义,但肯定看起来像一个.
char
* /* eh? */
s
(
int /* comment? // */ a
)
// hello, world /* of confusion
{
Run Code Online (Sandbox Code Playgroud)
是一个函数定义,但看起来不像一个.
好:写得快,即使面对语法错误也能正常工作; 坏:很容易在看起来像(或看起来不像)"正常"的情况下失火.
变体:首先运行代码,例如GNU缩进.这将解决一些(但不是全部)失火问题.
使用适当的词法分析器和解析器.这是一种更彻底的方法,但您可以重用开源词法分析器/解析(例如,从gcc).
好:将100%准确(永远不会失火).坏:一个丢失的分号,它会出现错误.
查看您的编译器是否有一些可能有用的调试输出.这是(2)的变体,但使用编译器的词法分析器/解析器而不是您自己的.
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |