Какие синтаксические анализаторы доступны для парсинга кода C#?
Я ищу синтаксический анализатор C#, который может использоваться в C# и предоставить мне доступ, чтобы выровнять и зарегистрировать информацию о каждом артефакте проанализированного кода.
Я реализовал именно то, о чем вы просите (AST парсинг кода на C#) в проекте OWASP O2 Platform с использованием SharpDevelop AST API.
Для облегчения потребления я написал быстрый API, который раскрывает ряд ключевых элементов исходного кода (используя операторы, типы, методы, свойства, поля, комментарии) и способен переписать исходный код C# на C# и на VBNET.
Вы можете увидеть этот API в действии на этом файле сценария O2 XRule: ascx_View_SourceCode_AST.cs.o2 .
Например, так вы обрабатываете текст исходного кода на C# и заполняете ряд TreeViews & TextBoxes:
public void updateView(string sourceCode)
{
var ast = new Ast_CSharp(sourceCode);
ast_TreeView.show_Ast(ast);
types_TreeView.show_List(ast.astDetails.Types, "Text");
usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
methods_TreeView.show_List(ast.astDetails.Methods,"Text");
fields_TreeView.show_List(ast.astDetails.Fields,"Text");
properties_TreeView.show_List(ast.astDetails.Properties,"Text");
comments_TreeView.show_List(ast.astDetails.Comments,"Text");
rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");
}
Пример на ascx_View_SourceCode_AST.cs.o2 также показывает, как вы можете затем использовать информацию, полученную от AST, для выбора типа, метода, комментария и т.д. в исходном коде.
Для справки, вот API код, который написал (обратите внимание, что это мой первый проход по использованию парсера SharpDevelop C# AST, и я все еще думаю о том, как он работает):
Если вы собираюсь скомпилировать сборки C # v3.5 в .net:
var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
Не в C #, но полный синтаксический анализатор C # 2/3/4, который строит полные AST, доступен с нашим DMS Software Reengineering Toolkit .
DMS предоставляет обширную инфраструктуру для синтаксического анализа, построения дерева, построения таблиц символов и анализа потоков, преобразования источника в источник и регенерации исходного кода из (модифицированных) AST. (Он также поддерживает многие другие языки, помимо C #.)
РЕДАКТИРОВАТЬ (сентябрь) 2013 г .: Этот ответ в последнее время не обновлялся. DMS давно работает с C # 5.0