Пример #1
0
 public Tape(SymbolSerializer <TSymbol> serializer, TSymbol nullValue = default(TSymbol), int position = 0)
 {
     _serializer      = serializer;
     _tape            = new InfiniteBidirctionalList <TSymbol>(nullValue);
     _position        = position;
     _initialPosition = position;
 }
 private void SaveAs(string fileName)
 {
     try
     {
         if (String.IsNullOrEmpty(fileName))
         {
             FileSelector fileSelector = new FileSelector(FileSelectorFilters.Symbols);
             fileSelector.FileName = fileName;
             if (fileSelector.ExecuteSaveDialog())
             {
                 fileName = fileSelector.FileName;
             }
         }
         if (String.IsNullOrEmpty(fileName) == false)
         {
             SymbolData data = SymbolConverter.Instance.ConvertFromSymbol(symbolEditor.Symbol);
             SymbolSerializer.SerializeSymbol(fileName, data);
             m_Persistent = true;
             FileName     = fileName;
         }
     }
     catch (Exception e)
     {
         string msg = e.Message;
         if (e.InnerException != null)
         {
             msg += "\n" + e.InnerException.Message;
         }
         MessageBox.Show(msg + "\n-----\n" + e.StackTrace, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Stop);
     }
 }
Пример #3
0
        private void LoadFiles()
        {
            button_ProceedToPage2.Enabled = false;
            //at this point the chosen files really do exist
            m_CircuitData         = CircuitSerializer.DeserializeCircuit(textBox_Circuit.Text);
            m_CircuitData.Signals = null;
            Circuit circuit = CircuitConverter.Instance.ConvertToCircuit(m_CircuitData);

            foreach (BaseElement be in circuit)
            {
                if (be is SignalInput)
                {
                    ListViewItem li = new ListViewItem(be.Name);
                    //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", be.);
                    li.Group = listView_CircuitIOs.Groups[0];
                    listView_CircuitIOs.Items.Add(li);
                }
                if (be is SignalOutput)
                {
                    ListViewItem li = new ListViewItem(be.Name);
                    li.Group = listView_CircuitIOs.Groups[1];
                    listView_CircuitIOs.Items.Add(li);
                }
            }

            m_SymbolData = SymbolSerializer.DeserializeSymbol(textBox_Symbol.Text);
            Symbol symbol = SymbolConverter.Instance.ConvertToSymbol(m_SymbolData);

            foreach (SymbolPart part in symbol)
            {
                if (part is PortPart)
                {
                    PortPart port = (PortPart)part;
                    if (port.Direction == DirectionType.Input)
                    {
                        ListViewItem li = new ListViewItem(port.Name);
                        //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", port.Name, port.Direction, port.Location.X, port.Location.Y);
                        li.Group = listView_SymbolPorts.Groups[0];
                        listView_SymbolPorts.Items.Add(li);
                    }
                    if (port.Direction == DirectionType.Output)
                    {
                        ListViewItem li = new ListViewItem(port.Name);
                        //li.ToolTipText = String.Format("{0} ({1}, X: {2}, Y: {3})", port.Name, port.Direction, port.Location.X, port.Location.Y);
                        li.Group = listView_SymbolPorts.Groups[1];
                        listView_SymbolPorts.Items.Add(li);
                    }
                }
            }
        }
 public bool LoadDocument(string fileName)
 {
     try
     {
         if (String.IsNullOrEmpty(fileName) == false)
         {
             SymbolData symbolData = SymbolSerializer.DeserializeSymbol(fileName);
             symbolEditor.Symbol = SymbolConverter.Instance.ConvertToSymbol(symbolData);
             FileName            = fileName;
             return(true);
         }
     }
     catch (Exception e)
     {
         string msg = e.Message;
         if (e.InnerException != null)
         {
             msg += "\n" + e.InnerException.Message;
         }
         MessageBox.Show(msg + "\n-----\n" + e.StackTrace, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Stop);
     }
     return(false);
 }
Пример #5
0
        public static StatefulTable <TState, TSymbol> LoadFromFile <TState, TSymbol>(string filename, TSymbol nullValue,
                                                                                     StateSerializer <TState> stateSerializer, SymbolSerializer <TSymbol> symbolSerializer)
        {
            var document = XDocument.Load(filename);

            return(Load(document, nullValue, stateSerializer, symbolSerializer));
        }
Пример #6
0
        public static StatefulTable <TState, TSymbol> LoadFromString <TState, TSymbol>(string xml, TSymbol nullValue,
                                                                                       StateSerializer <TState> stateSerializer, SymbolSerializer <TSymbol> symbolSerializer)
        {
            byte[]       byteArray = Encoding.UTF8.GetBytes(xml);
            MemoryStream stream    = new MemoryStream(byteArray);
            var          document  = XDocument.Load(stream);

            return(Load(document, nullValue, stateSerializer, symbolSerializer));
        }
Пример #7
0
        public static StatefulTable <TState, TSymbol> Load <TState, TSymbol>(XDocument document, TSymbol nullValue,
                                                                             StateSerializer <TState> stateSerializer, SymbolSerializer <TSymbol> symbolSerializer)
        {
            // Get symbols
            var symbols = new List <TSymbol>();

            symbols.Add(nullValue);
            foreach (var element in document.Root.Elements())
            {
                if ("symbols".Equals(element.Name.LocalName))
                {
                    for (int index = 0; index < element.Value.Length; index++)
                    {
                        symbols.Add(symbolSerializer.FromString($"{element.Value[index]}"));
                    }
                    break;
                }
            }

            // Get status
            var states       = new List <TState>();
            var initialState = default(TState);
            var finalStates  = new List <TState>();

            foreach (var element in document.Root.Elements())
            {
                if ("states".Equals(element.Name.LocalName))
                {
                    foreach (var stateTag in element.Elements())
                    {
                        bool isStart = false;
                        bool isHalt  = false;
                        if ("state".Equals(stateTag.Name.LocalName))
                        {
                            foreach (var attribute in stateTag.Attributes())
                            {
                                if ("start".Equals(attribute.Name.LocalName))
                                {
                                    isStart = "yes".Equals(attribute.Value);
                                }
                                else if ("halt".Equals(attribute.Name.LocalName))
                                {
                                    isHalt = "yes".Equals(attribute.Value);
                                }
                            }

                            var status = stateSerializer.FromString(stateTag.Value);
                            states.Add(status);

                            if (isStart)
                            {
                                initialState = status;
                            }

                            if (isHalt)
                            {
                                finalStates.Add(status);
                            }
                        }
                    }
                    break;
                }
            }

            // Create the table
            var table = new StatefulTable <TState, TSymbol>(states, symbols, initialState, finalStates);

            // Transition function
            foreach (var element in document.Root.Elements())
            {
                if ("transition-function".Equals(element.Name.LocalName))
                {
                    foreach (var mappingTag in element.Elements())
                    {
                        if ("mapping".Equals(mappingTag.Name.LocalName))
                        {
                            var currentState  = string.Empty;
                            var currentSymbol = string.Empty;
                            var nextState     = string.Empty;
                            var nextSymbol    = string.Empty;
                            var movement      = string.Empty;
                            foreach (var fromTag in mappingTag.Elements())
                            {
                                if ("from".Equals(fromTag.Name.LocalName))
                                {
                                    foreach (var attribute in fromTag.Attributes())
                                    {
                                        if ("current-state".Equals(attribute.Name.LocalName))
                                        {
                                            currentState = attribute.Value;
                                        }
                                        else if ("current-symbol".Equals(attribute.Name.LocalName))
                                        {
                                            currentSymbol = attribute.Value;
                                        }
                                    }
                                    break;
                                }
                            }
                            foreach (var toTag in mappingTag.Elements())
                            {
                                if ("to".Equals(toTag.Name.LocalName))
                                {
                                    foreach (var attribute in toTag.Attributes())
                                    {
                                        if ("next-state".Equals(attribute.Name.LocalName))
                                        {
                                            nextState = attribute.Value;
                                        }
                                        else if ("next-symbol".Equals(attribute.Name.LocalName))
                                        {
                                            nextSymbol = attribute.Value;
                                        }
                                        else if ("movement".Equals(attribute.Name.LocalName))
                                        {
                                            movement = attribute.Value;
                                        }
                                    }
                                    break;
                                }
                            }

                            var key = new TableKey <TState, TSymbol>(stateSerializer.FromString(currentState),
                                                                     symbolSerializer.FromString(currentSymbol));
                            var value = new TableValue <TState, TSymbol>(stateSerializer.FromString(nextState),
                                                                         symbolSerializer.FromString(nextSymbol), GetMoveActionFromString(movement));

                            table[key] = value;
                        }
                    }
                    break;
                }
            }
            return(table);
        }