Парсер для C # - PullRequest
       214

Парсер для C #

99 голосов
/ 17 сентября 2008

Какие парсеры доступны для анализа кода C #?

Я ищу синтаксический анализатор C #, который можно использовать в C # и который дает мне доступ к информации о строках и файлах каждого артефакта анализируемого кода.

Ответы [ 15 ]

116 голосов
/ 17 сентября 2008

Работает с исходным кодом:

Работы по сборке:

Проблема с "разбором" сборки в том, что у нас меньше информации о строке и файле (информация основана на файле .pdb, а Pdb содержит информацию о строках только для методов)

Я лично рекомендую Mono.Cecil и NRefactory .

7 голосов
/ 17 сентября 2008

Mono (с открытым исходным кодом) включает в себя компилятор C # (и, конечно, анализатор)

6 голосов
/ 09 марта 2010

Если вы собираетесь скомпилировать 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

5 голосов
/ 13 октября 2010

Если вы знакомы с ANTLR, вы можете использовать Antlr C # грамматика .

4 голосов
/ 07 февраля 2010

Я реализовал именно то, что вы просите (AST-разбор кода C #) в OWASP O2 Platform , используя API-интерфейсы SharpDevelop AST.

Чтобы упростить использование, я написал быстрый 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, который был написан (обратите внимание, что это мой первый опыт использования синтаксического анализатора C # AST от SharpDevelop, и я до сих пор разбираюсь, как он работает):

3 голосов
/ 03 октября 2011

Недавно мы выпустили синтаксический анализатор C #, который обрабатывает все функции C # 4.0, а также новую асинхронную функцию: C # Parser и CodeDOM

Эта библиотека генерирует семантическую объектную модель, которая сохраняет комментарии и информацию о форматировании и может быть изменена и сохранена. Он также поддерживает использование запросов LINQ для анализа исходного кода.

2 голосов
/ 15 апреля 2014

Вы обязательно должны проверить Roslyn, так как MS только что открыла (или скоро откроет) код с лицензией Apache 2 здесь . Вы также можете проверить способ анализа этой информации с помощью этого кода из GitHub .

2 голосов
/ 30 декабря 2010

Может быть, вы могли бы попробовать с Иронией на irony.codeplex.com.

Это очень быстро, и грамматика c # уже существует.

Сама грамматика написана непосредственно на c # в BNF-стиле (достигается некоторыми перегрузками операторов)

Лучше всего то, что «грамматика» производит АСТ напрямую.

2 голосов
/ 23 октября 2008

Взгляните на Gold Parser . Он имеет очень интуитивно понятный IU, который позволяет вам в интерактивном режиме тестировать свою грамматику и генерировать код C #. Есть много примеров, доступных с этим, и это абсолютно бесплатно.

2 голосов
/ 17 сентября 2008

Подумайте об использовании отражения во встроенном двоичном файле вместо непосредственного анализа кода C #. API отражения действительно прост в использовании и, возможно, вы сможете получить всю необходимую информацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...