Я работаю над проектом школы Reverse Engineering, который требует перевести манипуляции AST скомпилированного проекта С#. Я видел пост "Перевести код С# в AST?" на этом сайте, но он не похож на тот, который я ищу.
Согласно тому, что я знаю, в настоящее время С# не предоставляет библиотечный класс, который делает что-то подобное для Java: http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc. isv/reference/api/org/eclipse/cdt/core/dom/ast/ASTVisitor.html. Если в С# есть такой библиотечный класс, то здесь все решаемо.
Я с кем-то посоветовался, и вот возможные решения. Но у меня также есть проблемы с разработкой решений:
Какой самый короткий и быстрый способ решения этой проблемы? Если мне действительно нужно выбрать один из вариантов, описанных выше, как мне решить эти проблемы, с которыми я столкнулся.
ANTLR не является хорошим выбором. Теперь я пытаюсь использовать Mono Cecil. Моно Сесил хорош для анализа любых кодов сума, которые могут быть скомпилированы в Common Intermediate Language (CML). Недостатком является то, что он не имеет надлежащей документации.
Я знаю, что ответ для этого был принят давно. Но у меня был подобный вопрос, и я не был уверен в том, что там есть. Я провел небольшое исследование библиотеки NRefactory, которая поставляется как часть SharpDevelop. Он генерирует код AST из С#.
Здесь представлено изображение демонстрационного приложения NRefactory, которое является частью исходного кода SD. Введите некоторый код С#, и он генерирует и отображает AST в древовидной структуре.
Почему бы вам не попробовать NRefectory. Я видел, как он обсуждался на предмет AST на некоторых форумах SharepDevelop.
Вот статья о CodeProject в отношении этой темы.
Я только что ответил на другой поток здесь, в StackOverflow, где я реализовал API для создания и управления AST из исходного кода С#
Полный анализатор С# 3.0 доступен с нашим DMS Software Reengineering Toolkit (для краткости DMS). Он был использован для обработки десятков тысяч файлов С#. Он обеспечивает автоматическое построение АСТ, обход деревьев, сопоставление и преобразование структуры синтаксиса и многое другое. Как коммерческий продукт, это может не сработать для студенческого проекта.
ANTLR, возможно, предлагает синтаксический анализатор С#, но я не знаю, полный или надежный, или действительно ли он создает АСТ.
[РЕДАКТИРОВАТЬ 25 января 2010: парсер С# 4.0 теперь доступен для DMS со всеми вышеуказанными свойствами]
[EDIT Май 2016: С# 6.0 парсер доступен для DMS.]