Какие парсеры доступны для разбора кода C #?
Я ищу синтаксический анализатор C #, который можно использовать в C # и предоставить мне доступ к информации о строках и файлах о каждом артефакте анализируемого кода.
Работает над исходным кодом:
Работы по сборке:
Проблема с "синтаксическим анализом" сборки заключается в том, что у нас меньше информации о строке и файле (информация основана на файле .pdb, а Pdb содержит информацию о строках только для методов)
Я лично рекомендую Mono.Cecil и NRefactory .
Mono (с открытым исходным кодом) включает компилятор C # (и, конечно, парсер)
источник
Если вы собираетесь компилировать C # v3.5 в сборки .net:
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
источник
CodeDomProvider.Parse()
метод.Если вы знакомы с ANTLR, вы можете использовать грамматику Antlr C # .
источник
Я реализовал именно то, о чем вы просите (AST Parsing of C # code), в проекте OWASP O2 Platform с использованием SharpDevelop AST API.
Чтобы упростить использование, я написал быстрый API, который предоставляет ряд ключевых элементов исходного кода (с использованием операторов, типов, методов, свойств, полей, комментариев) и может переписать исходный код C # на C # и в VBNET. .
Вы можете увидеть этот API в действии в этом файле сценария O2 XRule: ascx_View_SourceCode_AST.cs.o2 .
Например, вот как вы обрабатываете текст исходного кода C # и заполняете несколько TreeView и TextBox:
Пример на ascx_View_SourceCode_AST.cs.o2 также показывает, как вы можете затем использовать информацию, собранную из AST, чтобы выбрать в исходном коде тип, метод, комментарий и т. Д.
Для справки, вот написанный код API (обратите внимание, что это мой первый проход при использовании парсера SharpDevelop C # AST, и я все еще не понимаю, как он работает):
источник
Недавно мы выпустили парсер C #, который обрабатывает все функции C # 4.0 плюс новую функцию async: C # Parser и CodeDOM.
Эта библиотека генерирует семантическую объектную модель, которая сохраняет комментарии и информацию о форматировании и может быть изменена и сохранена. Он также поддерживает использование запросов LINQ для анализа исходного кода.
источник
http://www.codeplex.com/csparser
источник
SharpDevelop , IDE с открытым исходным кодом, поставляется с анализатором кода на основе посетителей, который работает очень хорошо. Его можно использовать независимо от IDE.
источник
Рассмотрите возможность использования отражения на встроенном двоичном файле вместо непосредственного анализа кода C #. API отражения действительно прост в использовании и, возможно, вы сможете получить всю необходимую информацию?
источник
Взгляните на Gold Parser . Он имеет очень интуитивно понятный интерфейс, который позволяет вам в интерактивном режиме тестировать грамматику и генерировать код C #. С ним доступно множество примеров, и это совершенно бесплатно.
источник
Может быть, вы могли бы попробовать Irony на сайте irony.codeplex.com.
Это очень быстро, и грамматика C # уже существует.
Сама грамматика написана прямо на C # в стиле BNF (достигается с некоторыми перегрузками операторов)
Самое лучшее в этом то, что «грамматика» производит AST напрямую.
источник
Вам обязательно стоит попробовать Roslyn, поскольку MS только что открыла (или скоро откроет) код с лицензией Apache 2 здесь . Вы также можете проверить способ синтаксического анализа этой информации с помощью этого кода с GitHub .
источник
То , что набирает обороты и очень подходит для работы в Nemerle
Вы можете увидеть, как это может решить эту проблему, в этих видеороликах от NDC:
источник
Не на C #, но полный синтаксический анализатор C # 2/3/4, который строит полные AST, доступен с нашим DMS Software Reengineering Toolkit .
DMS предоставляет обширную инфраструктуру для синтаксического анализа, построения дерева, построения таблиц символов и анализа потоков, преобразования источника в источник и регенерации исходного кода из (модифицированных) AST. (Он также поддерживает многие другие языки, помимо C #.)
ИЗМЕНИТЬ (сентябрь) 2013 г .: этот ответ в последнее время не обновлялся. DMS давно работает с C # 5.0
источник
GPPG может быть полезен , если вы хотите написать свой собственный парсер (что забавно).
источник