Разбор кода C # - PullRequest
       2

Разбор кода C #

9 голосов
/ 24 октября 2010

Я исследую способы, инструменты и методы для анализа файлов кода, чтобы поддержать подсветку синтаксиса и интеллектуальность в редакторе, написанном на c #.

Есть ли у кого-нибудь какие-либо идеи / шаблоны и практики / инструменты / методы для этого.

РЕДАКТИРОВАТЬ: хороший источник информации для всех, кто заинтересован:

Разбор за пределами контекстно-свободных грамматик ISBN 978-3-642-14845-3

Ответы [ 3 ]

6 голосов
/ 24 октября 2010

Мой любимый синтаксический анализатор для C # - это ирония: http://irony.codeplex.com/ - я использовал его пару раз с большим успехом

Вот страница в Википедии со списком других: http://en.wikipedia.org/wiki/Compiler-compiler

3 голосов
/ 24 октября 2010

Есть два основных подхода:
1) Разбор всего решения и всего, на что оно ссылается, чтобы вы понимали все типы, включенные в код
2) Локальный анализ и постарайтесь угадать, какие типы и т. Д.

Проблема с (2) состоит в том, что вам нужно угадать, и в некоторых случаях вы просто не можете сказать из фрагмента кода, что именно это такое. Но если вас устраивает подсветка синтаксиса sort oif, показанная (например, при переполнении стека), тогда этот подход прост и довольно эффективен.

Чтобы сделать (1), вам нужно выполнить одно из (в порядке убывания сложности):

  • Разобрать весь исходный код. Невозможно, если вы ссылаетесь на сторонние сборки.
  • Используйте отражение в скомпилированном коде для сбора информации о типе, которую вы можете использовать при разборе источника.
  • Используйте интерфейсы элементов кода хоста IDE (если они доступны - поэтому не применимы в вашем случае!) Для предоставления необходимой информации
1 голос
/ 24 октября 2010

Вы можете взглянуть на то, как http://www.icsharpcode.net/ сделал это.Они написали книгу об этом, Рассечение приложения C #: Внутри SharpDevelop даже есть глава под названием

Реализация синтаксического анализатора для обеспечения подсветки синтаксиса и автозаполнения в качестве пользователей.тип

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