我需要在C#中解析C / C ++,并获得一个整洁的AST用于分析&可视化。我的方法目前是:找到用C ++编写的C ++解析器(手写或由解析器生成器生成),将此数据保存为JSON或类似,切换到C#,使用JSON库将数据读入C#对象以便于分析。
是否有项目允许我这样的事情?基本上我想要一个完整的AST而不仅仅是代码文件中的list of members。我可以从用C ++编写的C ++解析器开始,或者如果有一个可以生成C#代码的解析器生成器,并且有人已经为C ++编写了它,那么它将是最有用的。
答案 0 :(得分:3)
您可以使用像ANTLR这样的解析器生成器来解析输入字符串并获取AST。
ANTLR有一个.NET版本,其版本3由NHibernate和ASP.NET MVC使用。您可能已经在项目中引用了其运行时库,但我建议您使用latest version,4。
下载可能不包含您想要的特定C或C ++版本的语法文件,因此您应该查找相应的语法文件。 ANTLR已经存在了很长时间,所以有很多语法文件可供使用。
您可以在Github上找到由ANTLR的创建者管理的多种语言的list of grammars。该列表包括C11的语法。