Перевести код C# в AST?
Можно ли в настоящее время преобразовать 9X_c#.net код C# в абстрактное синтаксическое дерево?
Изменить: некоторые 9X_c# пояснения; Я не обязательно ожидаю, что 9X_c#.net компилятор сгенерирует для меня AST - синтаксический 9X_c# анализатор подойдет, хотя я бы хотел использовать 9X_compiler-design что-то «официальное». К сожалению, лямбда-выражений 9X_compilers недостаточно, поскольку они не позволяют 9X_ast мне использовать тела операторов, что я 9X_.cs-file и ищу.
Ответ #1
Ответ на вопрос: Перевести код C# в AST?
Проект Roslyn находится в Visual Studio 2010 и, помимо 9X_c-sharp прочего, предоставляет программный доступ 9X_visual-c# к Syntax Tree.
SyntaxTree tree = SyntaxTree.ParseCompilationUnit( @" C# code here "); var root = (CompilationUnitSyntax)tree.Root;
Ответ #2
Ответ на вопрос: Перевести код C# в AST?
Можно ли в настоящее время преобразовать 9X_abstract-syntax-tree код C# в абстрактное синтаксическое дерево?
Да, банально 9X_visual-c# в особых обстоятельствах (= при использовании 9X_abstract-syntax-tree нового Expressions framework):
// Requires 'using System.Linq.Expressions;' Expression> f = x => x * 2;
Это создает дерево выражения для 9X_ast лямбда-выражения, то есть функцию, принимающую 9X_ast
int
и возвращающую двойное значение. Вы можете 9X_c-sharp изменить дерево выражений, используя платформу 9X_compiler-construction Expressions (= классы из этого пространства 9X_compiler-design имен), а затем скомпилировать его во время 9X_.cs-file выполнения:var newBody = Expression.Add(f.Body, Expression.Constant(1)); f = Expression.Lambda>(newBody, f.Parameters); var compiled = f.Compile(); Console.WriteLine(compiled(5)); // Result: 11
Обратите внимание, что все выражения 9X_ast неизменяемы, поэтому их нужно строить заново 9X_c#.net путем композиции. В данном случае я добавил 9X_csharp 1.
Обратите внимание, что эти деревья выражений 9X_compiler работают только с реальными выражениями, то 9X_visual-c# есть с контентом, найденным в функции C#. Таким 9X_c-sharp образом вы не можете получить синтаксические 9X_ast деревья для более высоких конструкций, таких 9X_abstract-syntax-tree как классы. Для этого используйте платформу 9X_csharp CodeDom.
- Ира: вам стоит обратить внимание на развитие дискуссии. Эта запись была размещена * до * редактирования / уточнения * Эрика. По-видимому, ни один из других о ...
Ответ #3
Ответ на вопрос: Перевести код C# в AST?
Ознакомьтесь с поддержкой .NET CodeDom. Есть старая 9X_compiler-construction статья о проекте кода для C# CodeDOM parser, но она не поддерживает 9X_abstract-syntax-tree новые языковые функции.
Также предполагается 9X_c-sharp поддержка в #develop создания дерева CodeDom 9X_c-sharp из исходного кода C# в соответствии с этим 9X_c#-language posting.
Ответ #4
Ответ на вопрос: Перевести код C# в AST?
Есть намного более мощный проект, чем проект 9X_c#.net R #. Nemerle.Peg:
https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/
И у него есть C# Parser, который 9X_compiler анализирует весь код C# и переводит его 9X_ast в AST!
https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/csharp-parser/
Вы можете скачать установщик здесь: https://code.google.com/p/nemerle/
Ответ #5
Ответ на вопрос: Перевести код C# в AST?
Лично я бы использовал NRefactory, который является 9X_ast бесплатным, с открытым исходным кодом и 9X_csharp набирает популярность.
Ответ #6
Ответ на вопрос: Перевести код C# в AST?
Похоже, что такая функциональность будет 9X_compilers включена во все, что идет после C# 4, согласно 9X_compiler-construction Anders Hejlsberg's 'Future of C#' PDC video.
Ответ #7
Ответ на вопрос: Перевести код C# в AST?
ANTLR Parser Generator содержит грамматику для C# 3.0, которая 9X_c#-language охватывает все, кроме синтаксиса LINQ.
Ответ #8
Ответ на вопрос: Перевести код C# в AST?
ANTLR не очень полезен. LINQ - это не то, что 9X_c#.net вам нужно.
Попробуйте Mono.Cecil! http://www.mono-project.com/Cecil
Он используется 9X_c#.net во многих проектах, в том числе NDepend! http://www.ndepend.com/
Ответ #9
Ответ на вопрос: Перевести код C# в AST?
Наш C# front end for DMS полностью анализирует C# 3.0, включая 9X_.cs-file LINQ, и создает AST. Фактически DMS представляет 9X_c# собой экосистему для анализа / преобразования 9X_.cs-file исходного кода с использованием AST для 9X_visual-c# языков, предоставляемых интерфейсной частью.
РЕДАКТИРОВАТЬ 9X_visual-c# 10.03.2010: ... Теперь обрабатывает полную 9X_abstract-syntax-tree версию C# 4.0
РЕДАКТИРОВАТЬ: 27.06.2014: довольно 9X_compiler-design давно обрабатывает C# 5.0.
РЕДАКТИРОВАНИЕ: 15.06.2016: обрабатывает 9X_compiler C# 6.0. См. https://stackoverflow.com/a/37847714/120163 для образца AST.
Ответ #10
Ответ на вопрос: Перевести код C# в AST?
Я только что ответил в другом потоке здесь, в 9X_c# StackOverflow, о решении, в котором я реализовал 9X_compiler API для create and manipulate AST from C# Source Code
-
13
-
3
-
8
-
1
-
3
-
1
-
3
-
3
-
8
-
3
-
3
-
9
-
2
-
1
-
6
-
2
-
4
-
5
-
7
-
2
-
4
-
4
-
3
-
4
-
2
-
1
-
4
-
5
-
3
-
3
-
2
-
1
-
2
-
2
-
2
-
1
-
9
-
1
-
3
-
3
-
6
-
3
-
10
-
11
-
6
-
2
-
7
-
1
-
3
-
5