aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Scripting/ScriptParser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Scripting/ScriptParser.cs')
-rw-r--r--Software/Visual_Studio/Tango.Scripting/ScriptParser.cs72
1 files changed, 72 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Scripting/ScriptParser.cs b/Software/Visual_Studio/Tango.Scripting/ScriptParser.cs
new file mode 100644
index 000000000..ff8e7ff2b
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Scripting/ScriptParser.cs
@@ -0,0 +1,72 @@
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Scripting
+{
+ public class ScriptParser
+ {
+ public List<ScriptVariable> ParseScript(String code)
+ {
+ List<ScriptVariable> vars = new List<ScriptVariable>();
+
+ SyntaxTree tree = CSharpSyntaxTree.ParseText(code);
+ var root = (CompilationUnitSyntax)tree.GetRoot();
+
+ List<VariableDeclaratorSyntax> variables = new List<VariableDeclaratorSyntax>();
+ FillVariables(variables, root.Members[0]);
+ variables = variables.Distinct().ToList();
+
+ foreach (var item in variables)
+ {
+ ScriptVariable v = new ScriptVariable();
+ v.Name = item.Identifier.ToString();
+
+ if (item.Initializer.Value.GetType() == typeof(ObjectCreationExpressionSyntax))
+ {
+ v.Type = (item.Initializer.Value as ObjectCreationExpressionSyntax).Type.ToString();
+ }
+ else if (item.Initializer.Value.GetType() == typeof(InvocationExpressionSyntax))
+ {
+ v.Type = (((item.Initializer.Value as InvocationExpressionSyntax).Expression as MemberAccessExpressionSyntax).Name as GenericNameSyntax).TypeArgumentList.Arguments[0].ToString();
+ }
+
+ vars.Add(v);
+ }
+
+ return vars;
+ }
+
+ private void FillVariables(List<VariableDeclaratorSyntax> variables, SyntaxNode node)
+ {
+ foreach (var item in node.DescendantNodes(x => true))
+ {
+ if (item.GetType() == typeof(VariableDeclaratorSyntax))
+ {
+ variables.Add(item as VariableDeclaratorSyntax);
+ }
+ else
+ {
+ FillVariables(variables, item);
+ }
+ }
+ }
+ }
+
+ public class ScriptVariable
+ {
+ public String Name { get; set; }
+ public String Type { get; set; }
+
+ public override string ToString()
+ {
+ return String.Format("{0} : {1}", Type, Name);
+ }
+ }
+}