public ComplexValueAst(
     IdentifierToken value,
     IdentifierToken of,
     IdentifierToken typeName,
     PropertyValueListAst propertyValues
     )
 {
     this.Alias          = null;
     this.Value          = value ?? throw new ArgumentException(nameof(value));
     this.Of             = of;
     this.TypeName       = typeName;
     this.PropertyValues = propertyValues ?? new PropertyValueListAst.Builder().Build();
 }
 public StructureValueDeclarationAst(
     IdentifierToken value,
     IdentifierToken of,
     IdentifierToken typeName,
     IdentifierToken @as,
     AliasIdentifierToken alias,
     PropertyValueListAst propertyValues,
     StatementEndToken statementEnd
     )
 {
     this.Value          = value ?? throw new ArgumentNullException(nameof(value));
     this.Of             = of ?? throw new ArgumentNullException(nameof(of));
     this.TypeName       = typeName ?? throw new ArgumentNullException(nameof(typeName));
     this.As             = @as;
     this.Alias          = alias;
     this.PropertyValues = propertyValues ?? new PropertyValueListAst(
         new ReadOnlyDictionary <string, PropertyValueAst>(
             new Dictionary <string, PropertyValueAst>()
             )
         );
     this.StatementEnd = statementEnd ?? throw new ArgumentNullException(nameof(statementEnd));
 }