示例#1
0
        public static EpistemicModel FromText(ref string[] lines)
        {
            EpistemicModel model = new EpistemicModel();

            try
            {
                int lineNum = 0;
                if (lines[lineNum++] == "START_AGENTS")
                {
                    int agentCount = int.Parse(lines[lineNum++]);
                    int i;
                    for (i = lineNum; i < agentCount + lineNum; i++)
                    {
                        model.AddAgent(lines[i]);
                    }
                    lineNum = i;
                    if (lines[lineNum++] != "END_AGENTS")
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
                if (lines[lineNum++] == "START_ATOMICS")
                {
                    int atomicCount = int.Parse(lines[lineNum++]);
                    int i;
                    for (i = lineNum; i < atomicCount + lineNum; i++)
                    {
                        model.AddAtomic(lines[i]);
                    }
                    lineNum = i;
                    if (lines[lineNum++] != "END_ATOMICS")
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }


                if (lines[lineNum++] == "START_ANN_INFO")
                {
                    int infoCount = int.Parse(lines[lineNum++]);
                    for (int i = 0; i < infoCount; i++)
                    {
                        if (lines[lineNum] == "Secret")
                        {
                            lineNum++;
                            SecretAnnouncementInfo info = new SecretAnnouncementInfo();
                            string infoName             = lines[lineNum++];
                            info.Announcement.Expression = lines[lineNum++];
                            int audienceCount = int.Parse(lines[lineNum++]);
                            for (int j = 0; j < audienceCount; j++)
                            {
                                info.AddNewAudience(lines[lineNum++]);
                            }
                            model._secretAnnouncementInfos.Add(infoName, info);
                        }
                        else if (lines[lineNum] == "Public")
                        {
                            lineNum++;
                            PublicAnnouncementInfo info = new PublicAnnouncementInfo();
                            string infoName             = lines[lineNum++];
                            info.Announcement.Expression = lines[lineNum++];
                            int audienceCount = int.Parse(lines[lineNum++]);
                            for (int j = 0; j < audienceCount; j++)
                            {
                                info.AddNewAudience(lines[lineNum++]);
                            }
                            model._publicAnnouncementInfos.Add(infoName, info);
                        }
                    }
                    if (lines[lineNum++] != "END_ANN_INFO")
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }

                List <string> newData = lines.ToList();
                newData.RemoveRange(0, lineNum);
                lines = newData.ToArray();
            }
            catch (FormatException)
            {
                return(null);
            }
            catch (IndexOutOfRangeException)
            {
                return(null);
            }

            return(model);
        }