예제 #1
0
     public DeclarationItem(Ast.Declaration declaration)
     {
         if (declaration.IsFunctionDeclaration)
         {
             var typedDeclaration = (Ast.Declaration.FunctionDeclaration)declaration;
             Text     = "Function Declaration (Name = " + typedDeclaration.Item.Item2 + ")";
             Children = new TreeItemBase[]
             {
                 new SimpleItem("Return Type: " + typedDeclaration.Item.Item1),
                 new SimpleItem("Name: " + typedDeclaration.Item.Item2),
                 new SimpleItem("Parameters", typedDeclaration.Item.Item3.Select(x => new VariableDeclarationItem(x))),
                 new CompoundStatementItem(typedDeclaration.Item.Item4, "Body")
             };
         }
         else if (declaration.IsStaticVariableDeclaration)
         {
             Text = "Static Variable Declaration";
             var typedDeclaration = (Ast.Declaration.StaticVariableDeclaration)declaration;
             if (typedDeclaration.Item.IsScalarVariableDeclaration)
             {
                 Children = new[] { new VariableDeclarationItem(typedDeclaration.Item) }
             }
             ;
         }
     }
 }
예제 #2
0
		public CompoundStatementItem(Tuple<FSharpList<Ast.VariableDeclaration>, FSharpList<Ast.Statement>> compoundStatement,
			string name = "Compound Statement")
		{
			Text = name;
			Children = new TreeItemBase[]
			{
				new SimpleItem("Local Declarations", compoundStatement.Item1.Select(x => new VariableDeclarationItem(x))),
				new SimpleItem("Statements", compoundStatement.Item2.Select(x => new StatementItem(x)))
			};
		}
예제 #3
0
 public CompoundStatementItem(Tuple <FSharpList <Ast.VariableDeclaration>, FSharpList <Ast.Statement> > compoundStatement,
                              string name = "Compound Statement")
 {
     Text     = name;
     Children = new TreeItemBase[]
     {
         new SimpleItem("Local Declarations", compoundStatement.Item1.Select(x => new VariableDeclarationItem(x))),
         new SimpleItem("Statements", compoundStatement.Item2.Select(x => new StatementItem(x)))
     };
 }
예제 #4
0
		public DeclarationItem(Ast.Declaration declaration)
		{
			if (declaration.IsFunctionDeclaration)
			{
				var typedDeclaration = (Ast.Declaration.FunctionDeclaration) declaration;
				Text = "Function Declaration (Name = " + typedDeclaration.Item.Item2 + ")";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Return Type: " + typedDeclaration.Item.Item1),
					new SimpleItem("Name: " + typedDeclaration.Item.Item2),
					new SimpleItem("Parameters", typedDeclaration.Item.Item3.Select(x => new VariableDeclarationItem(x))),
					new CompoundStatementItem(typedDeclaration.Item.Item4, "Body")
				};
			}
			else if (declaration.IsStaticVariableDeclaration)
			{
				Text = "Static Variable Declaration";
				var typedDeclaration = (Ast.Declaration.StaticVariableDeclaration) declaration;
				if (typedDeclaration.Item.IsScalarVariableDeclaration)
					Children = new[] { new VariableDeclarationItem(typedDeclaration.Item) };
			}
		}
예제 #5
0
 public ExpressionItem(Ast.Expression expression)
 {
     if (expression.IsArrayAllocationExpression)
     {
         var typedExpression = (Ast.Expression.ArrayAllocationExpression)expression;
         Text     = "Array Allocation Expression";
         Children = new TreeItemBase[]
         {
             new SimpleItem("Type: " + typedExpression.Item1),
             new SimpleItem("Size", new[] { new ExpressionItem(typedExpression.Item2) })
         };
     }
     else if (expression.IsArrayIdentifierExpression)
     {
         var typedExpression = (Ast.Expression.ArrayIdentifierExpression)expression;
         Text     = "Array Identifier Expression: " + typedExpression.Item1.Identifier;
         Children = new[]
         {
             new SimpleItem("Index", new[] { new ExpressionItem(typedExpression.Item2) })
         };
     }
     else if (expression.IsArraySizeExpression)
     {
         var typedExpression = (Ast.Expression.ArraySizeExpression)expression;
         Text = "Array Size Expression: " + typedExpression.Item.Identifier;
     }
     else if (expression.IsScalarAssignmentExpression)
     {
         var typedExpression = (Ast.Expression.ScalarAssignmentExpression)expression;
         Text     = "Scalar Assignment Expression";
         Children = new TreeItemBase[]
         {
             new SimpleItem("Variable: " + typedExpression.Item1.Identifier),
             new SimpleItem("Expression", new[] { new ExpressionItem(typedExpression.Item2) })
         };
     }
     else if (expression.IsArrayAssignmentExpression)
     {
         var typedExpression = (Ast.Expression.ArrayAssignmentExpression)expression;
         Text     = "Array Assignment Expression";
         Children = new TreeItemBase[]
         {
             new SimpleItem("Variable: " + typedExpression.Item1.Identifier),
             new SimpleItem("Index", new[] { new ExpressionItem(typedExpression.Item2) }),
             new SimpleItem("Expression", new[] { new ExpressionItem(typedExpression.Item3) })
         };
     }
     else if (expression.IsBinaryExpression)
     {
         var typedExpression = (Ast.Expression.BinaryExpression)expression;
         Text     = "Binary Expression";
         Children = new TreeItemBase[]
         {
             new SimpleItem("Left", new[] { new ExpressionItem(typedExpression.Item1) }),
             new SimpleItem("Operator: " + typedExpression.Item2),
             new SimpleItem("Right", new[] { new ExpressionItem(typedExpression.Item3) })
         };
     }
     else if (expression.IsFunctionCallExpression)
     {
         var typedExpression = (Ast.Expression.FunctionCallExpression)expression;
         Text     = "Function Call Expression";
         Children = new TreeItemBase[]
         {
             new SimpleItem("Name: " + typedExpression.Item1),
             new SimpleItem("Arguments", typedExpression.Item2.Select(x => new ExpressionItem(x)))
         };
     }
     else if (expression.IsIdentifierExpression)
     {
         Text = "Identifier Expression: " + ((Ast.Expression.IdentifierExpression)expression).Item.Identifier;
     }
     else if (expression.IsLiteralExpression)
     {
         Text = "Literal Expression: " + ((Ast.Expression.LiteralExpression)expression).Item;
     }
     else if (expression.IsUnaryExpression)
     {
         var typedExpression = (Ast.Expression.UnaryExpression)expression;
         Text     = "Unary Expression";
         Children = new TreeItemBase[]
         {
             new SimpleItem("Operator: " + typedExpression.Item1),
             new SimpleItem("Expression", new[] { new ExpressionItem(typedExpression.Item2) })
         };
     }
     else
     {
         throw new System.NotImplementedException();
     }
 }
예제 #6
0
		public StatementItem(Ast.Statement statement)
		{
			if (statement.IsBreakStatement)
			{
				Text = "Break Statement";
			}
			else if (statement.IsCompoundStatement)
			{
				var typedStatement = (Ast.Statement.CompoundStatement) statement;
				Text = "Compound Statement";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Local Declarations", typedStatement.Item.Item1.Select(x => new VariableDeclarationItem(x))),
					new SimpleItem("Statements", typedStatement.Item.Item2.Select(x => new StatementItem(x)))
				};
			}
			else if (statement.IsExpressionStatement)
			{
				var typedStatement = (Ast.Statement.ExpressionStatement) statement;
				Text = "Expression Statement";
				if (typedStatement.Item.IsNop)
				{
					Children = new[] { new SimpleItem("Nop") };
				}
				else if (typedStatement.Item.IsExpression)
				{
					var typedStatement2 = (Ast.ExpressionStatement.Expression) typedStatement.Item;
					Children = new[] { new ExpressionItem(typedStatement2.Item) };
				}
			}
			else if (statement.IsIfStatement)
			{
				var typedStatement = (Ast.Statement.IfStatement) statement;
				Text = "If Statement";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Condition", new[] { new ExpressionItem(typedStatement.Item.Item1) }),
					new SimpleItem("Then", new[] { new StatementItem(typedStatement.Item.Item2) })
				};
				if (FSharpOption<Ast.Statement>.get_IsSome(typedStatement.Item.Item3))
					Children = Children.Union(new[]
					{
						new SimpleItem("Else", new[]
						{
							new StatementItem(typedStatement.Item.Item3.Value)
						})
					});
			}
			else if (statement.IsReturnStatement)
			{
				var typedStatement = (Ast.Statement.ReturnStatement) statement;
				Text = "Return Statement";
				if (FSharpOption<Ast.Expression>.get_IsSome(typedStatement.Item))
					Children = new[] { new ExpressionItem(typedStatement.Item.Value) };
			}
			else if (statement.IsWhileStatement)
			{
				var typedStatement = (Ast.Statement.WhileStatement) statement;
				Text = "While Statement";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Condition", new[] { new ExpressionItem(typedStatement.Item.Item1) }),
					new SimpleItem("Body", new[] { new StatementItem(typedStatement.Item.Item2) })
				};
			}
			else
				throw new NotImplementedException();
		}
예제 #7
0
     public StatementItem(Ast.Statement statement)
     {
         if (statement.IsBreakStatement)
         {
             Text = "Break Statement";
         }
         else if (statement.IsCompoundStatement)
         {
             var typedStatement = (Ast.Statement.CompoundStatement)statement;
             Text     = "Compound Statement";
             Children = new TreeItemBase[]
             {
                 new SimpleItem("Local Declarations", typedStatement.Item.Item1.Select(x => new VariableDeclarationItem(x))),
                 new SimpleItem("Statements", typedStatement.Item.Item2.Select(x => new StatementItem(x)))
             };
         }
         else if (statement.IsExpressionStatement)
         {
             var typedStatement = (Ast.Statement.ExpressionStatement)statement;
             Text = "Expression Statement";
             if (typedStatement.Item.IsNop)
             {
                 Children = new[] { new SimpleItem("Nop") };
             }
             else if (typedStatement.Item.IsExpression)
             {
                 var typedStatement2 = (Ast.ExpressionStatement.Expression)typedStatement.Item;
                 Children = new[] { new ExpressionItem(typedStatement2.Item) };
             }
         }
         else if (statement.IsIfStatement)
         {
             var typedStatement = (Ast.Statement.IfStatement)statement;
             Text     = "If Statement";
             Children = new TreeItemBase[]
             {
                 new SimpleItem("Condition", new[] { new ExpressionItem(typedStatement.Item.Item1) }),
                 new SimpleItem("Then", new[] { new StatementItem(typedStatement.Item.Item2) })
             };
             if (FSharpOption <Ast.Statement> .get_IsSome(typedStatement.Item.Item3))
             {
                 Children = Children.Union(new[]
                 {
                     new SimpleItem("Else", new[]
                     {
                         new StatementItem(typedStatement.Item.Item3.Value)
                     })
                 });
             }
         }
         else if (statement.IsReturnStatement)
         {
             var typedStatement = (Ast.Statement.ReturnStatement)statement;
             Text = "Return Statement";
             if (FSharpOption <Ast.Expression> .get_IsSome(typedStatement.Item))
             {
                 Children = new[] { new ExpressionItem(typedStatement.Item.Value) }
             }
             ;
         }
         else if (statement.IsWhileStatement)
         {
             var typedStatement = (Ast.Statement.WhileStatement)statement;
             Text     = "While Statement";
             Children = new TreeItemBase[]
             {
                 new SimpleItem("Condition", new[] { new ExpressionItem(typedStatement.Item.Item1) }),
                 new SimpleItem("Body", new[] { new StatementItem(typedStatement.Item.Item2) })
             };
         }
         else
         {
             throw new NotImplementedException();
         }
     }
 }
예제 #8
0
		public ExpressionItem(Ast.Expression expression)
		{
			if (expression.IsArrayAllocationExpression)
			{
				var typedExpression = (Ast.Expression.ArrayAllocationExpression) expression;
				Text = "Array Allocation Expression";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Type: " + typedExpression.Item1),
					new SimpleItem("Size", new[] { new ExpressionItem(typedExpression.Item2) })
				};
			}
			else if (expression.IsArrayIdentifierExpression)
			{
				var typedExpression = (Ast.Expression.ArrayIdentifierExpression) expression;
				Text = "Array Identifier Expression: " + typedExpression.Item1.Identifier;
				Children = new[]
				{
					new SimpleItem("Index", new[] { new ExpressionItem(typedExpression.Item2) })
				};
			}
			else if (expression.IsArraySizeExpression)
			{
				var typedExpression = (Ast.Expression.ArraySizeExpression) expression;
				Text = "Array Size Expression: " + typedExpression.Item.Identifier;
			}
			else if (expression.IsScalarAssignmentExpression)
			{
				var typedExpression = (Ast.Expression.ScalarAssignmentExpression) expression;
				Text = "Scalar Assignment Expression";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Variable: " + typedExpression.Item1.Identifier),
					new SimpleItem("Expression", new[] { new ExpressionItem(typedExpression.Item2) })
				};
			}
			else if (expression.IsArrayAssignmentExpression)
			{
				var typedExpression = (Ast.Expression.ArrayAssignmentExpression) expression;
				Text = "Array Assignment Expression";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Variable: " + typedExpression.Item1.Identifier),
					new SimpleItem("Index", new[] { new ExpressionItem(typedExpression.Item2) }),
					new SimpleItem("Expression", new[] { new ExpressionItem(typedExpression.Item3) })
				};
			}
			else if (expression.IsBinaryExpression)
			{
				var typedExpression = (Ast.Expression.BinaryExpression) expression;
				Text = "Binary Expression";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Left", new[] { new ExpressionItem(typedExpression.Item1) }),
					new SimpleItem("Operator: " + typedExpression.Item2),
					new SimpleItem("Right", new[] { new ExpressionItem(typedExpression.Item3) })
				};
			}
			else if (expression.IsFunctionCallExpression)
			{
				var typedExpression = (Ast.Expression.FunctionCallExpression) expression;
				Text = "Function Call Expression";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Name: " + typedExpression.Item1),
					new SimpleItem("Arguments", typedExpression.Item2.Select(x => new ExpressionItem(x)))
				};
			}
			else if (expression.IsIdentifierExpression)
			{
				Text = "Identifier Expression: " + ((Ast.Expression.IdentifierExpression) expression).Item.Identifier;
			}
			else if (expression.IsLiteralExpression)
			{
				Text = "Literal Expression: " + ((Ast.Expression.LiteralExpression) expression).Item;
			}
			else if (expression.IsUnaryExpression)
			{
				var typedExpression = (Ast.Expression.UnaryExpression) expression;
				Text = "Unary Expression";
				Children = new TreeItemBase[]
				{
					new SimpleItem("Operator: " + typedExpression.Item1),
					new SimpleItem("Expression", new[] { new ExpressionItem(typedExpression.Item2) })
				};
			}
			else
				throw new System.NotImplementedException();
		}