2010-10-24 3 views
9

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

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

EDIT: Хороший источник информации для тех, кто заинтересован:

Синтаксический за контекстно-свободных грамматик ISBN 978-3-642-14845-3

+0

возможный дубликат [Parser для C# ] (http://stackoverflow.com/questions/81406/parser-for-c) – Gabe

+1

Вы пытаетесь разобрать C# или написать парсер на C#? – Gabe

+1

@Gabe, обе. Я пытаюсь написать парсер в C#, который будет анализировать xml, C#, надеюсь, что-то еще :) – sTodorov

ответ

3

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

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

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

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

OP хочет разобрать несколько языков. Существует «небольшая» проблема получения рабочих грамматик для языков, которые вы хотите обработать. Legacy langauges трудно сделать это, потому что комитеты по стандартам украшают их goo; проверить IBM Enterprise COBOL или Fortran 2005. Современные langauges немного легче, но даже у них есть давление, чтобы добавить материал; попробуйте разобрать современный VB.net. У меня есть 15 лет для создания парсеров, использующих унифицированную структуру для широкого спектра языков (включая те, которые я упоминал), и я еще едва ли сделал это: - { –

+1

@Ira: OP не дает понять, на каких языках требуется, но большая часть моего ответа одинаково хорошо подходит для любого языка. Но вы правы, это очень нетривиальная проблема. Visual Studio Intellisense уже много лет разрабатывается опытной командой и работает только на языках .net - помимо базовой подсветки синтаксиса, поддержка на многих других языках довольно плохая, что является хорошим показателем сложности проблемы ПП пытается обратиться. –

+0

@ Ирочный подвиг, который вы пытаетесь сделать, звучит очень серьезно. Я желаю вам всего успеха. Однако то, что я изучаю, в основном поддерживает C#, Ruby, Python, VB. net, java. Я могу только представить себе трудности, связанные с разбором устаревших языков – sTodorov

6

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

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

+0

Поддерживает ли Ирония многоязычный анализ? – sTodorov

+0

Ирония предназначена для создания парсеров, поэтому да - она ​​разбирает все, что вы можете построить грамматику для –

1

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

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

Смежные вопросы