- 主题:有什么办法可以找出代码中所有单个的if语句?
就是不带else的if语句
--
FROM 107.182.187.*
if个数 - else的个数
--
FROM 111.204.200.*
需要找到明确的位置
【 在 hothail 的大作中提到: 】
: if个数 - else的个数
--
FROM 123.125.47.*
调用编译器parser库解析ast,代码量不大。看你什么语言了
【 在 wjhtingerx 的大作中提到: 】
: 需要找到明确的位置
:
: 【 在 hothail 的大作中提到: 】
: ...................
--
FROM 114.254.9.*
正经做就是调用编译器parser遍历ast,不同语言不一样。比如c++一般就是clang,java和c#相关库种类繁多,c#一般应该是roslyn,java我只用过soot应该比较小众,Python和go都有相关ast标准库模块。这种可以做成高质量工具,类似自动代码格式化的那些工具都是这么做的。你这个要求代码量也不大。
糙点就是正则查找,不太准的
【 在 wjhtingerx 的大作中提到: 】
: 就是不带else的if语句
: --
: FROM 107.182.187.*
--
修改:milksea FROM 114.254.9.*
FROM 114.254.9.*
自己浏览代码的IDE
Find in Files。把查找结果合并一下,人工校对一遍
当然具体场景也不了解
Linux Shell里也有
find 和cat 再组合grep 之类的
【 在 wjhtingerx 的大作中提到: 】
: 需要找到明确的位置
--
FROM 111.204.200.*
试了一下,用go写调用go/parse go/ast三四十行简单几句话就行
【 在 wjhtingerx 的大作中提到: 】
: 就是不带else的if语句
: --
: FROM 107.182.187.*
--
FROM 114.254.9.*
gcc的话,怎么产生ast文件呢?
【 在 milksea 的大作中提到: 】
: 试了一下,用go写调用go/parse go/ast三四十行简单几句话就行
--
FROM 107.182.187.*
egrep 'if|else'
然后找“连续if”
【 在 wjhtingerx 的大作中提到: 】
: 就是不带else的if语句
--
FROM 139.227.19.*
你这种思路没考虑到if的嵌套结构,比如下面这两种情况:
if
{
if
{
...
}
}
else
{
...
}
和
if
{
...
}
if
{
...
}
else
{
...
}
按照你的处理方法,是完全无法区分的。
【 在 JulyClyde 的大作中提到: 】
: egrep 'if|else'
: 然后找“连续if”
--
修改:heideggerr FROM 175.164.22.*
FROM 175.164.22.*