コード例 #1
0
 public TableMGenerator(NewGrammar convertedGrammar)
 {
     mTable           = new List <List <string> >();
     productions      = convertedGrammar.productions;
     first            = convertedGrammar.first;
     follow           = convertedGrammar.follow;
     terminals        = convertedGrammar.terminals;
     noTerminals      = convertedGrammar.noTerminals;
     emptyNoTerminals = convertedGrammar.emptyNoTerminals;
 }
コード例 #2
0
        static void HandleGrammarConverter(string id, string value, ISubscriber sub)
        {
            try
            {
                Grammar          grammar          = JsonConvert.DeserializeObject <Grammar>(value);
                GrammarConverter grammarConverter = new GrammarConverter(grammar);
                grammarConverter.DeleteLeftRecursion();
                grammarConverter.Factorization();
                grammarConverter.SortGrammar();

                grammarConverter.SetNoTerminals(grammarConverter.GetNoTerminals(grammarConverter.GetProductions()));

                grammarConverter.First();

                grammarConverter.Follow();

                NewGrammar newGrammar = new NewGrammar();

                newGrammar.productions = grammarConverter.GetProductions();

                newGrammar.first = grammarConverter.GetFirst();

                newGrammar.follow = grammarConverter.GetFollow();

                newGrammar.terminals = grammarConverter.GetTerminals();

                newGrammar.noTerminals = grammarConverter.GetNoTerminals();

                newGrammar.emptyNoTerminals = grammarConverter.GetEmptyNoTerminals();

                String json = JsonConvert.SerializeObject(newGrammar);

                IDatabase redisDb = ConnectionMultiplexer.Connect(properties["REDIS_SERVER"])
                                    .GetDatabase(Convert.ToInt32(properties["NEW_GRAMMAR_DB"]));
                string newId = id.Replace("GRAMMAR_", "NEW_GRAMMAR_");
                redisDb.StringSet(newId, json);
                Console.WriteLine(newId + ": " + json + " - saved to redis NEW_GRAMMAR_DB");


                // Queue
                IDatabase newGrammarQueueDb = ConnectionMultiplexer.Connect(properties["REDIS_SERVER"])
                                              .GetDatabase(Convert.ToInt32(properties["NEW_GRAMMAR_QUEUE_DB"]));
                // put message to queue
                newGrammarQueueDb.ListLeftPush(NEW_GRAMMAR_QUEUE_NAME, newId, flags: CommandFlags.FireAndForget);
                // and notify consumers
                newGrammarQueueDb.Multiplexer.GetSubscriber().Publish(NEW_GRAMMAR_CHANNEL, "");


                grammarConverter.Clear();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: fedjakova-anastasija/WAD
        private static void HandleSequence(string value, ConnectionMultiplexer redisConnection)
        {
            try
            {
                SequenceId sId = JsonConvert.DeserializeObject <SequenceId>(value);

                int       grammarDbNumber = Convert.ToInt32(properties["GRAMMAR_DB"]);
                IDatabase grammarDb       = redisConnection.GetDatabase(grammarDbNumber);

                string  grammarStr = grammarDb.StringGet("GRAMMAR_" + sId.id);
                Grammar grammar    = JsonConvert.DeserializeObject <Grammar>(grammarStr);

                int       newGrammarDbNumber = Convert.ToInt32(properties["NEW_GRAMMAR_DB"]);
                IDatabase newGrammarDb       = redisConnection.GetDatabase(newGrammarDbNumber);

                string     newGrammarStr = newGrammarDb.StringGet("NEW_GRAMMAR_" + sId.id);
                NewGrammar newGrammar    = JsonConvert.DeserializeObject <NewGrammar>(newGrammarStr);

                int       mTableDbNumber = Convert.ToInt32(properties["TABLE_M_DB"]);
                IDatabase mTableDb       = redisConnection.GetDatabase(mTableDbNumber);

                string mTableStr = mTableDb.StringGet("TABLE_M_" + sId.id);
                MTable mTable    = JsonConvert.DeserializeObject <MTable>(mTableStr);

                SequenceHandler sequenceHandler = new SequenceHandler(grammar.startSymbol, newGrammar.terminals, newGrammar.noTerminals, mTable.mTable);
                sequenceHandler.Process(sId.sequence);

                IDatabase redisDb = ConnectionMultiplexer.Connect(properties["REDIS_SERVER"])
                                    .GetDatabase(Convert.ToInt32(properties["SEQUENCE_DB"]));

                Sequence sequence = sequenceHandler.GetSequence();
                sequence.grammarId = "NEW_GRAMMAR_" + sId.id;
                string json  = JsonConvert.SerializeObject(sequence);
                String newId = "SEQUENCE_RESULT_" + sId.id;
                redisDb.StringSet(newId, json);
                Console.WriteLine(newId + ": " + json + " - saved to redis SEQUENCE_DB");

                MakeStatisticEvent(newId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: fedjakova-anastasija/WAD
        private static void GenerateTable(String id, string value, ISubscriber sub)
        {
            try
            {
                NewGrammar      newGrammar = JsonConvert.DeserializeObject <NewGrammar>(value);
                TableMGenerator generator  = new TableMGenerator(newGrammar);
                generator.GenerateTable();
                MTable table = new MTable();
                table.mTable = generator.GetTable();
                String json = JsonConvert.SerializeObject(table);

                IDatabase redisDb = ConnectionMultiplexer.Connect(properties["REDIS_SERVER"])
                                    .GetDatabase(Convert.ToInt32(properties["TABLE_M_DB"]));
                string newId = id.Replace("NEW_GRAMMAR_", "TABLE_M_");
                redisDb.StringSet(newId, json);
                Console.WriteLine(newId + ": " + json + " - saved to redis TABLE_M_DB");
                generator.Clear();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
コード例 #5
0
        public IActionResult Get()
        {
            try
            {
                ConnectionMultiplexer redis  = ConnectionMultiplexer.Connect(properties["REDIS_SERVER"]);
                IDatabase             statDb = redis.GetDatabase(Convert.ToInt32(properties["STATISTIC_DB"]));
                String accepted = "";
                String declined = "";
                accepted = statDb.StringGet("accepted");
                declined = statDb.StringGet("declined");
                StatisticResult statRes = new StatisticResult();

                JsonSerializerSettings settings = new JsonSerializerSettings();
                settings.ContractResolver = new DictionaryAsArrayResolver();

                if (accepted == null)
                {
                    Dictionary <List <String>, List <String> > empty = new Dictionary <List <string>, List <string> >();
                    statRes.result.Add("accepted", empty);
                }

                if (declined == null)
                {
                    Dictionary <List <String>, List <String> > empty = new Dictionary <List <string>, List <string> >();
                    statRes.result.Add("declined", empty);
                }

                if (!String.IsNullOrEmpty(accepted))
                {
                    Statistic     stat         = JsonConvert.DeserializeObject <Statistic>(accepted, settings);
                    List <string> keyList      = new List <string>(stat.statistic.Keys);
                    IDatabase     newGrammarDb = redis.GetDatabase(Convert.ToInt32(properties["NEW_GRAMMAR_DB"]));
                    Dictionary <List <String>, List <String> > result = new Dictionary <List <string>, List <string> >();
                    foreach (var grammarId in keyList)
                    {
                        string        value      = newGrammarDb.StringGet(grammarId);
                        NewGrammar    newGrammar = JsonConvert.DeserializeObject <NewGrammar>(value);
                        List <String> production = newGrammar.productions;
                        result.Add(production, stat.statistic[grammarId]);
                    }
                    statRes.result.Add("accepted", result);
                }

                if (!String.IsNullOrEmpty(accepted))
                {
                    Statistic     stat         = JsonConvert.DeserializeObject <Statistic>(declined, settings);
                    List <string> keyList      = new List <string>(stat.statistic.Keys);
                    IDatabase     newGrammarDb = redis.GetDatabase(Convert.ToInt32(properties["NEW_GRAMMAR_DB"]));
                    Dictionary <List <String>, List <String> > result = new Dictionary <List <string>, List <string> >();
                    foreach (var grammarId in keyList)
                    {
                        string        value      = newGrammarDb.StringGet(grammarId);
                        NewGrammar    newGrammar = JsonConvert.DeserializeObject <NewGrammar>(value);
                        List <String> production = newGrammar.productions;
                        result.Add(production, stat.statistic[grammarId]);
                    }
                    statRes.result.Add("declined", result);
                }

                string json = JsonConvert.SerializeObject(statRes, settings);

                return(Ok(json));
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(new NotFoundResult());
            }
        }