首页 新闻 会员 周边

c# 代码静态分析

0
悬赏园豆:50 [已解决问题] 解决于 2017-03-22 10:34

void Test()

{

      var list=new List<string>();

       ....

      foreach(var item in list)

  {

    ....

  }

}

 

假如有一个test.cs文件内容如上,在没有语法错误的情况下,不使用字符串匹配(如字符串截取,正则表达式等)技术,从语法分析方面如何分析出变量list的数据类型?会用到哪些技术

Ace001的主页 Ace001 | 菜鸟二级 | 园豆:216
提问于:2017-03-22 09:21
< >
分享
最佳答案
0

1.antlr 但用起来比较麻烦,如果没有找到别人写的语法规则自己来写的话估计够呛

2.用roslyn的api来加载整个代码块,然后从语法树的context中加以判断。

收获园豆:50
Daniel Cai | 专家六级 |园豆:10424 | 2017-03-22 09:55

感谢大神回答,关于方法2的介绍实在好少,找到一篇http://stackoverflow.com/questions/18295837/c-sharp-roslyn-api-reading-a-cs-file-updating-a-class-writing-back-to-cs-fi

 https://www.codeproject.com/articles/408663/using-nrefactory-for-analyzing-csharp-code

大神是否有更多关于方法2的链接?

稍后结贴 谢谢

Ace001 | 园豆:216 (菜鸟二级) | 2017-03-22 10:18

@Coder007: 

https://msdn.microsoft.com/en-us/magazine/dn904670.aspx?f=255&MSPPError=-2147217396 (这一篇写的比较全面点,可以有个比较全面的认识)

https://roslyn.codeplex.com/

还有彪悍点的

http://roslynquoter.azurewebsites.net/

 

对应antlr的有个4.0的语法 https://antlrcsharp.codeplex.com/

 

搜索基本关键字比如roslyn expresstion tree

ps下,走语法树来分析会是相当蛋疼的事,roslyn可能版本上差异比较大,可能会出现某些代码你没办法在不同版本下执行,所以你要确认好。

Daniel Cai | 园豆:10424 (专家六级) | 2017-03-22 10:30

@Daniel Cai: 感谢分享.

Ace001 | 园豆:216 (菜鸟二级) | 2017-03-22 10:33
其他回答(1)
0

不用正则式就是用string.IndexOf string.SubString string.Length 等等来扣喽

先找到变量list 使用IndexOf 

在找到那一行的分号 使用IndexOf 

在找的<的位置 和>的位置

然后就抠出string来了

刘宏玺 | 园豆:14020 (专家六级) | 2017-03-22 09:53

感谢回答,可能问题没描述清楚.已修改问题

支持(0) 反对(0) Ace001 | 园豆:216 (菜鸟二级) | 2017-03-22 10:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册