コード例 #1
0
        public void AddRule()
        {
            string      pattern = @"(&)|(->)";
            string      input   = Console.ReadLine();
            List <Fact> facts   = new List <Fact>();

            (Regex.Split(input, pattern)).Where(temp => !Regex.IsMatch(temp, pattern))
            .ToList().ForEach(factToParse => facts.Add(this.ParseFact(factToParse)));
            using (var context = new PrologContext())
            {
                Rule rule = new Rule();
                facts.ForEach(fact => fact.ArgumentPositions = null);
                facts.Last().RuleResponse = rule;
                facts.Take(facts.Count - 1).ToList().ForEach(fact => fact.Rule = rule);
                context.AttachRange(facts);
                try
                {
                    context.SaveChanges();
                }
                catch (System.Exception)
                {
                    throw;
                }
            }
        }
コード例 #2
0
ファイル: RuleLoader.cs プロジェクト: Aaol/cdpn_dotnetcore
 public void GetFacts()
 {
     using (var context = new PrologContext())
     {
         System.Console.WriteLine(context.Facts
                                  .Include(fact => fact.ArgumentPositions)
                                  .ThenInclude(arg => arg.Argument)
                                  .ToList()
                                  .Select(fact => fact.ToString()).First());
     }
 }
コード例 #3
0
ファイル: RuleLoader.cs プロジェクト: Aaol/cdpn_dotnetcore
 public void GetRules()
 {
     using (var context = new PrologContext())
     {
         var test = context.Facts.Include(fact => fact.Rule);
         foreach (var item in context.Rules
                  .Include(rule => rule.Response)
                  .ThenInclude(rule => rule.ArgumentPositions)
                  .ThenInclude(arg => arg.Argument)
                  .Include(rule => rule.Facts)
                  .ThenInclude(arg => arg.ArgumentPositions)
                  .ThenInclude(arg => arg.Argument)
                  .ToList()
                  .Select(rule => rule.ToString()))
         {
             System.Console.WriteLine(item);
         }
     }
 }
コード例 #4
0
 private Fact ParseFact(string s)
 {
     using (PrologContext context = new PrologContext())
     {
         string[] splitted = s.Split(this.FactSplitRules);
         Fact     fact     = new Fact();
         fact.Name = splitted[0];
         for (int i = 1; i < splitted.Length; i++)
         {
             string name = splitted[i];
             if (!string.IsNullOrWhiteSpace(name))
             {
                 Argument argument = context.Arguments.FirstOrDefault(arg => arg.Name == name);
                 if (argument == null)
                 {
                     if (!char.IsUpper(name[0]))
                     {
                         argument = new Atom()
                         {
                             Name = name
                         };
                     }
                     else
                     {
                         argument = new Variable()
                         {
                             Name = name
                         };
                     }
                     context.Arguments.Add(argument);
                 }
                 context.ArgumentPositions.Add(new ArgumentPosition()
                 {
                     Argument = argument,
                     Fact     = fact
                 });
             }
         }
         context.Facts.Add(fact);
         context.SaveChanges();
         return(fact);
     }
 }
コード例 #5
0
ファイル: XAMLParser.cs プロジェクト: Lokhmat/CsHomeWork
        public PrologContext prolog()
        {
            PrologContext _localctx = new PrologContext(_ctx, State);

            EnterRule(_localctx, 2, RULE_prolog);
            int _la;

            try {
                EnterOuterAlt(_localctx, 1);
                {
                    State = 32; Match(XMLDeclOpen);
                    State = 36;
                    _errHandler.Sync(this);
                    _la = _input.La(1);
                    while (_la == Name)
                    {
                        {
                            {
                                State = 33; attribute();
                            }
                        }
                        State = 38;
                        _errHandler.Sync(this);
                        _la = _input.La(1);
                    }
                    State = 39; Match(SPECIAL_CLOSE);
                }
            }
            catch (RecognitionException re) {
                _localctx.exception = re;
                _errHandler.ReportError(this, re);
                _errHandler.Recover(this, re);
            }
            finally {
                ExitRule();
            }
            return(_localctx);
        }