Как манипулировать C # AST? - PullRequest
       33

Как манипулировать C # AST?

2 голосов
/ 04 августа 2009

Я работаю над проектом школы Reverse Engineering, который требует перевести манипулирование AST скомпилированного проекта C #. Я видел пост "Перевести код C # в AST?" на этом сайте, но он не похож на тот, который я ищу.

Согласно тому, что я знаю, в настоящее время C # не предоставляет библиотечный класс, который делает что-то подобное для Java: http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/dom/ast/ASTVisitor.html. Если в C # есть такой библиотечный класс, все здесь решено.

Я советовался с кем-то, и вот возможные решения. Но у меня тоже есть проблемы с разработкой решений:

  1. Найдите другой компилятор, который предоставляет библиотеку, которая позволяет использовать его AST для манипулирования. Но я не могу найти такой компилятор.
  2. Используйте ANTLR Parser Generator, чтобы выпустить свой собственный компилятор, который делает это (это будет гораздо более сложный и длительный процесс). Здесь есть примеры грамматик для разных языков, но не для C # (грамматики написаны на разных языках, включая C #, но не для создания грамматики C #). Следовательно, проблема в том, что я не могу найти грамматику C #.

Какой самый короткий и быстрый способ решения этой проблемы? Если мне действительно нужно выбрать одну из альтернатив, описанных выше, как мне решить эти проблемы, с которыми я столкнулся.

Ответы [ 5 ]

4 голосов
/ 29 декабря 2010

Я знаю, что ответ на этот вопрос был принят давно. Но у меня был похожий вопрос, и я не был уверен в возможных вариантах. Я провел небольшое исследование библиотеки NRefactory, которая поставляется как часть SharpDevelop. создает AST из кода C #.

Вот изображение демонстрационного приложения NRefactory, которое является частью исходного кода SD. Введите некоторый код C #, и он генерирует и отображает AST в виде дерева.

alt text

1 голос
/ 04 августа 2009

Почему бы вам не попробовать NRefectory . Я видел, что это обсуждалось для AST на некоторых SharepDevelop форумах.

Вот статья на CodeProject по этой теме.

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

Я только что ответил в другом потоке здесь, в StackOverflow, решение, в котором я реализовал API для создания и управления AST из исходного кода C #

0 голосов
/ 03 октября 2009

ANTLR не очень хороший выбор. Сейчас я пытаюсь использовать Mono Cecil вместо этого. Mono Cecil хорош для анализа любых исходных кодов, которые могут быть скомпилированы в общий промежуточный язык (CIL). Недостатком является отсутствие надлежащей документации.

0 голосов
/ 21 августа 2009

Полный синтаксический анализатор C # 3.0 доступен с нашим инструментарием реинжиниринга программного обеспечения DMS (сокращенно DMS). Он был использован для точной обработки десятков тысяч файлов C #. Обеспечивает автоматизированное построение AST, обход дерева, сопоставление и преобразование шаблонов поверхностного синтаксиса и многое другое. Как коммерческий продукт, он может не сработать для студенческого проекта.

ANTLR, возможно, предлагает синтаксический анализатор C #, но я не знаю, является ли он полным или надежным, или он действительно строит AST.

[ПРАВИТЬ 25 января 2010: парсер C # 4.0 теперь доступен для DMS со всеми вышеупомянутыми свойствами]

[РЕДАКТИРОВАТЬ, май 2016 г .: синтаксический анализатор C # 6.0 доступен для DMS.]

...