Альтернатива для "CSharpCodeProvider.Parse" - PullRequest
2 голосов
/ 03 сентября 2010

Я ищу альтернативу для CSharpCodeProvider.Parse.Этот метод должен был проанализировать источник кода [C #] и вернуть объект CompileUnit.Однако этот метод не реализован ни в одной среде .Net.

Моя цель - иметь возможность перемещаться по C # CodeDOM без необходимости его компиляции.Я пишу приложение, которое выполняет некоторый анализ кода, но у меня не обязательно будут все внешние ссылки, что означает, что я не могу его скомпилировать.

Ответы [ 4 ]

2 голосов
/ 03 сентября 2010

SharpDevelop (IDE с открытым исходным кодом, обычно используемая для Mono) имеет библиотеку NRefactory, которая позволяет анализировать код C # и преобразовывать его в AST: http://wiki.sharpdevelop.net/NRefactory.ashx (выдержка из этой ссылки приведена ниже):

using (IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(sourceCode))) 
{
    parser.Parse();
    // this allows retrieving comments, preprocessor directives, etc. (stuff that isn't part of the syntax)
    specials = parser.Lexer.SpecialTracker.RetrieveSpecials();
    // this retrieves the root node of the result AST
    result = parser.CompilationUnit;
    if (parser.Errors.Count > 0) {
        MessageBox.Show(parser.Errors.ErrorOutput, "Parse errors");
    }
}
0 голосов
/ 20 декабря 2017

Фактическая (2017-2018) информация:

  1. Более подробная информация доступна на https://github.com/icsharpcode/SharpDevelop/wiki/NRefactory

  2. Загрузить пакет nuget: "ICSharpCode.NRefactory"

  3. А вот фрагмент кода:

    using ICSharpCode.NRefactory.CSharp;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace Ns1
    {
        public class Foo
        {
            public void Go()
            {       
                CSharpParser parser = new CSharpParser();
                string text = File.ReadAllText("myProgram.cs");
                SyntaxTree syntaxTree = parser.Parse(text);
            }
        }
    }
    
0 голосов
/ 03 сентября 2010

Существует множество бесплатных синтаксических анализаторов C # , наиболее популярными из которых являются:

0 голосов
/ 03 сентября 2010

Наш инструментарий реинжиниринга программного обеспечения DMS - это инструмент для построения инструментов анализа для произвольных языков.DMS обеспечивает обобщенный анализ, навигацию и модификацию AST, восстановление источника из модифицированного дерева, поддержку таблиц символов и различные виды поддержки анализа, а также возможность записи преобразований источника в источник, которые изменяют AST напрямую с точки зрения поверхности.синтаксис.

Его C # Front End предоставляет полный синтаксический анализатор C # 4.0 (включая LINQ), который создает полное абстрактное синтаксическое дерево, содержащее каждый элемент исходного текста, включая комментарии, захваченные как аннотации к источнику.узлы дерева, которые украшают комментарии.

...