用C#或通常的.Net编写的C解析器

4

我需要实现一些静态C代码分析,因为我的学位论文需要。我急需一个能够解析C源代码、将其拆分为单个函数、确定每个函数中哪些变量被更改以及自动推导代码某些注释的框架/库。

有没有一个使用C#编写的好框架或通用的.Net类可用于此目的?


你有考虑过使用正则表达式吗? - Alaeddin Hussein
21
@WhoCares: 那是傻瓜的选择... - leppie
你所要求的是很多的,虽然在.NET中有很好的解析工具,但许多工具在处理C语法时存在问题。 - Lucero
1
可能是C Code Parser for .NET的重复问题。 - Lucero
我在发布问题之前阅读了答案,我不需要通用的解析器/词法分析器,而是需要一些轻量级的东西,这就是为什么我在问题中提供了更多信息。 - Alexander Galkin
4个回答

9

非常感谢,我尝试谷歌了好几个条目,甚至去了code.google.com搜索“C解析器”,但不知何故我忽略了这个项目。它似乎正是我需要的。 - Alexander Galkin
是的,你建议的解析器是C#中非常好的、直接的实现,很容易调整和适应任何任务。我用它来解析C代码并推断出一些我需要实现的信息。唯一的问题是解析不可逆转,因此我不得不修改原始代码,采用了一个组合解析器/正则表达式的方法,其中使用解析器推断要更改的内容,使用正则表达式查找要更改的位置。 - Alexander Galkin
两个链接都是404错误,无法访问。 - JBeurer

3

您可能想要查看ANTLR。它附带了几个版本,包括C和C#。在ANTLR网站上有一些免费的语法,其中包括C。


是的,我知道ANTLR并且之前访问过该网站,但对我来说它似乎是一个过于通用和复杂的解决方案:我的论文主题是静态软件验证,而不是解析器/词法分析器。我只需要实现我在论文中提出的方法,并且需要像Daren Themas回答中提到的那样轻量级的东西。 - Alexander Galkin
链接丢失,404。 - JBeurer

1

我曾经遇到过类似的问题,经过对C#中YACC工具的研究,我选择了Gold Parsing System with Semantic Engine。我的项目是解析SQL查询并生成逻辑查询计划(从T-SQL语法子集开始)。

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

Gold Project http://www.devincook.com/goldparser/

Semantic Engine Lib http://code.google.com/p/bsn-goldparser


0

如果您可以接受使用GPL许可的代码,您可能需要查看GCC源代码。如果您需要在.Net中执行此操作,您可以始终使用p/invoke从GCC库调用代码。


1
http://gcc.gnu.org/viewcvs/trunk/gcc/c-parser.c?view=markup 可能是一个不错的起点。 - Shea Levy
谢谢您的建议,我过去在几个项目中使用过GCC作为前端,但我希望保持我的解决方案尽可能简单和均匀,因为在不涉及解析器的部分已经足够复杂了。 :) - Alexander Galkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接