Class describing expressions. TODO: Remove inherit from NestedElementTranslationUnit.
Inheritance: NestedElementTranslationUnit, ITranslationUnit
        /// <summary>
        /// 
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="keyword"></param>
        /// <returns></returns>
        public static ExpressionStatementTranslationUnit Create(ExpressionTranslationUnit expression, string keyword = null)
        {
            ExpressionTranslationUnit realExpression = expression ?? ExpressionTranslationUnit.Create(VoidTranslationUnit.Create());

            return new ExpressionStatementTranslationUnit(AutomaticNestingLevel)
            {
                expression = realExpression,
                keyword = keyword
            };
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="keyword"></param>
        /// <returns></returns>
        public static ExpressionStatementTranslationUnit Create(ExpressionTranslationUnit expression, string keyword = null)
        {
            ExpressionTranslationUnit realExpression = expression ?? ExpressionTranslationUnit.Create(VoidTranslationUnit.Create());

            return(new ExpressionStatementTranslationUnit(AutomaticNestingLevel)
            {
                expression = realExpression,
                keyword = keyword
            });
        }
 /// <summary>
 /// Builds a throw statement with the specified expression.
 /// </summary>
 /// <param name="expression"></param>
 /// <returns></returns>
 public static ExpressionStatementTranslationUnit CreateThrow(ExpressionTranslationUnit expression)
 {
     return(Create(expression, Lexems.ThrowKeyword));
 }
 /// <summary>
 /// Copy initializes a new instance of the <see cref="ExpressionStatementTranslationUnit"/> class.
 /// </summary>
 /// <param name="other"></param>
 /// <remarks>
 /// For testability.
 /// </remarks>
 public ExpressionStatementTranslationUnit(ExpressionStatementTranslationUnit other)
     : base(other)
 {
     this.expression = other.expression;
     this.keyword    = other.keyword;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionStatementTranslationUnit"/> class.
 /// </summary>
 /// <param name="nestingLevel"></param>
 protected ExpressionStatementTranslationUnit(int nestingLevel)
     : base(nestingLevel)
 {
     this.expression = null;
     this.keyword    = null;
 }
 /// <summary>
 /// Builds a return statement with the specified expression.
 /// </summary>
 /// <param name="expression"></param>
 /// <returns></returns>
 public static ExpressionStatementTranslationUnit CreateReturn(ExpressionTranslationUnit expression)
 {
     return Create(expression, Lexems.ReturnKeyword);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionStatementTranslationUnit"/> class.
 /// </summary>
 /// <param name="nestingLevel"></param>
 protected ExpressionStatementTranslationUnit(int nestingLevel)
     : base(nestingLevel)
 {
     this.expression = null;
     this.keyword = null;
 }
 /// <summary>
 /// Copy initializes a new instance of the <see cref="ExpressionStatementTranslationUnit"/> class.
 /// </summary>
 /// <param name="other"></param>
 /// <remarks>
 /// For testability.
 /// </remarks>
 public ExpressionStatementTranslationUnit(ExpressionStatementTranslationUnit other)
     : base(other)
 {
     this.expression = other.expression;
     this.keyword = other.keyword;
 }