public void AddStorage(StorageDescription storageDescription)
        {
            if (Storages.ContainsKey(storageDescription.Name))
            {
                throw new ArgumentException($"Dublicate storage: {storageDescription.Name}");
            }

            Storages.Add(storageDescription);
        }
        private static void AddRegister(ArchitectureDescription architecture, ParseTreeNode parseTreeNode)
        {
            RegisterDescription reg = new RegisterDescription()
            {
                Name = parseTreeNode.ChildNodes[1].Token.ValueString
            };

            List <ParseTreeNode> parts = parseTreeNode.ChildNodes[3].SeperatedList("view-parts", "view-part");

            foreach (var part in parts)
            {
                string     name  = part.ChildNodes[0].Token.ValueString;
                IndexRange range = ReadIndexRange(part.ChildNodes[1]);

                if (architecture.ContainsStorage(name))
                {
                    StorageDescription     storage = architecture.Storages[name];
                    StoragePartDescription stPart  = new StoragePartDescription()
                    {
                        Storage  = storage,
                        StartBit = range.Start,
                        EndBit   = range.End
                    };

                    if (range.Start < 0)
                    {
                        throw new IndexOutOfRangeException("View range must have positive indexes.");
                    }
                    else if (range.End > storage.Length)
                    {
                        throw new IndexOutOfRangeException("View is out of storage bounds.");
                    }

                    reg.Parts.Add(stPart);
                }
                else
                {
                    throw new KeyNotFoundException($"Storage {name} not found in {architecture.Name}.");
                }
            }

            architecture.AddRegister(reg);
        }
        private void SaveData(StorageDescription storage)
        {
            var newFileContent = JsonConvert.SerializeObject(storage);

            File.WriteAllText(_filePath, newFileContent);
        }