2014-09-29 5 views
5

Я пытаюсь разобрать исходный simple.cs файл, используя следующий код:Синтаксический C# исходный код

CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); 
var compileUnit = provider.Parse(File.OpenText(filename)); 

Это дает мне NotImplementedException:

«Это CodeDomProvider не поддерживает это метод "

Правда ли, что .NET не обеспечивает реализацию синтаксического анализа кода на C#? Или я просто использую этот класс неправильно?

Редактировать: причина в том, что я хочу поиграть с некоторыми методами для анализа статического кода. Компиляция или выполнение кода не требуется для моих исследований.

+2

Я предлагаю вам изучить использование Roslyn вместо 'CodeDomProvider' для этого. –

+1

http://stackoverflow.com/questions/7852926/microsoft-roslyn-vs-codedom – Mick

+0

@JonSkeet какие-то конкретные причины, почему вы бы предложили это? – Mick

ответ

8

Да, это правда, CodeDomProvider предназначен для испускания исходного кода, а не для чтения. У разных компаний есть свои собственные парсеры, и недавно Microsoft запустила проект Roslyn, который предоставляет такие функции.

+0

. Ваш ответ неправильный, вы можете «прочитать» исходный код и скомпилировать его с помощью CodeDom ... Я думаю, что Roslyn, хотя и очень крутой, может быть излишним для того, что ему нужно. – Mick

+0

@Mick By «read», я имел в виду, что вы не можете генерировать синтаксическое дерево синтаксического анализа из кода. Вы можете скомпилировать код, но вы не можете получить доступ к шагу «Parse» только процесса компиляции. Очевидно, что он где-то, но недоступен для пользователя. – nvoigt

+0

Я думаю, что вы делаете предположения о том, чего он пытается достичь, большинство людей просто хотят выплюнуть сборку и выполнить ее. CSharpCodeProvider очень хорош в этом и прост в использовании. – Mick

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