Пример #1
0
 private void InferTokens(B.SystemPlan plan)
 {
     foreach (TokenDecl t in Tokens)
     {
         plan.AddToken(t.Type, t.MakePlans());
     }
 }
Пример #2
0
 internal B.SystemPlan MakePlan()
 {
     B.SystemPlan output = new B.SystemPlan(NS);
     InferTokens(output);
     InferTypes(output);
     InferFlags(output);
     foreach (HandlerDecl hd in Handlers)
     {
         output.AddHandler(hd.MakePlan());
     }
     return(output);
 }
Пример #3
0
        private void InferFlags(B.SystemPlan plan)
        {
            foreach (A.HandlerDecl h in Handlers)
            {
                foreach (var flag in h.RHS.GetFlags())
                {
                    plan.AddBoolFlag(flag);
                }
                foreach (var a in h.Context)
                {
                    foreach (var flag in a.RHS.GetFlags())
                    {
                        plan.AddBoolFlag(flag);
                    }
                }
            }
            plan.NormaliseFlags();

            Console.WriteLine($"[A2B] Inferred flags: Boolean {plan.AllBoolFlags()}; counter {plan.AllIntFlags()}");
        }
Пример #4
0
 private void InferTypes(B.SystemPlan plan)
 {
     plan.InferTypeAliases();
     foreach (A.TypeDecl t in Types)
     {
         foreach (var n in t.Names)
         {
             plan.AddType(n, t.Super);
         }
         plan.AddType(t.Super, null, silent: true);
     }
     foreach (A.HandlerDecl h in Handlers)
     {
         if (h.RHS is A.PushReaction pr)
         {
             if (plan.HasType(pr.Name))
             {
                 plan.GetTypePlan(pr.Name).InferConstructor(pr.Args, h, plan.GetTypePlan);
             }
             else
             {
                 Console.WriteLine($"[A2B] Unknown pushed type '{pr.Name}'");
             }
         }
         else if (h.RHS is A.WrapReaction wr)
         {
             if (plan.HasType(wr.Name))
             {
                 plan.GetTypePlan(wr.Name).InferConstructor(wr.Args, h, plan.GetTypePlan);
             }
             else
             {
                 Console.WriteLine($"[A2B] Unknown wrapped type '{wr.Name}'");
             }
         }
     }
 }