2011-05-13 10 views
4

对于我的毕业论文我需要实现一定的静态C代码分析,我拼命寻找一个框架/库,让我来解析C++源代码,把它分解成单功能,为每个函数确定哪些变量在函数体中被改变,并自动为代码派生一些注释。 为了这个目的,有没有用C#或一般的.Net类编写的好框架?Ç解析器在C#或一般的.Net

+0

你有没有考虑使用正则表达式? – 2011-05-13 12:52:32

+20

@WhoCares:这是傻瓜的选择...... – leppie 2011-05-13 12:54:54

+0

你要求的东西很多,虽然在.NET中有很好的解析工具,但许多C语言都存在问题。 – Lucero 2011-05-13 13:00:07

回答

8

关于用C语言编写的C语言分析器的搜索结果是什么?

我这是第一个链接:http://code.google.com/p/cpp-ripper/

另外,我觉得的C语法可以在相当多的地方找到,所以你可能只是想打开你的.NET variant of lex/yacc,并从那里走?

+0

非常感谢,我试着谷歌几个条目,我甚至去了code.google.com和搜索“C语言分析器”,但不知何故,我忽略了这个项目。这似乎正是我需要的。 – 2011-05-13 14:54:15

+0

您是否尝试过此路线?它有用吗? – 2011-08-16 14:17:49

+0

是的,您建议的解析器在C#中是一个非常好的,直接的实现,它很容易调整并适应任何任务。我用它来解析C代码并推断我实现时需要的一些信息。唯一的问题是解析是不可逆的,因为我不得不修改原始代码,所以我不得不使用组合解析器/正则表达式方法,其中我使用解析器来推断要更改的内容以及正则表达式以找到要更改的位置。 – 2011-08-21 18:21:51

0

如果你确定使用GPL的代码,你可能想看看GCC源代码。如果您需要在.Net中执行此操作,则始终可以使用p/invoke来调用GCC库中的代码。

+1

http://gcc.gnu.org/viewcvs/trunk/gcc/c-parser.c?view=markup可能是一个很好的开始。 – 2011-05-13 12:54:42

+0

感谢您的建议,我在过去的几个项目中使用了GCC作为前端,但我希望尽可能保持我的解决方案简单和同质,但在不考虑解析器的部分已经足够复杂。 :) – 2011-05-13 14:59:03

2

您可能想检查ANTLR。它带有几个版本的版本,包括C和C#。在ANTLR web site有一些免费的语法,包括C.

+0

是的,我知道ANTLR和我之前访问过该网站,但对我来说这似乎是一个过于一般和复杂的解决方案:我的论文主题是静态软件验证,而不是解析器/词法分析器。我只需要实现我在论文中提出的方法,并且需要轻量级的东西,就像Daren Themas的回答中提到的那样。 – 2011-05-13 14:57:30

+0

链接丢失,404。 – JBeurer 2016-05-27 20:08:42

1

我有一个类似的问题,并且已经完成了一个关于YACC工具的C#的研究,我选择了带语义引擎的Gold Parsing System。我的项目是解析SQL查询并生成逻辑查询计划(来自T-SQL语法子集)。

我真的推荐它。这两个库使解析工作变得轻松,并允许将语法映射到代码中的对象模型。它感觉非常直观,并使我的项目成功:)但是,它可能缺乏一些先进的ANTLR功能,因此请认真识别您的需求。

金矿项目http://www.devincook.com/goldparser/

语义引擎库http://code.google.com/p/bsn-goldparser