コード例 #1
0
 public Production <SYMBOL_ENUM, TREE_NODE> AddProduction(SYMBOL_ENUM nonterm, RecursiveEnum recursive,
                                                          Func <TREE_NODE> action)
 {
     return(addProduction(new Production <SYMBOL_ENUM, TREE_NODE>(symbolsRep, nonterm, recursive,
                                                                  new SYMBOL_ENUM[] { },
                                                                  ProductionAction <TREE_NODE> .Convert(action))));
 }
コード例 #2
0
        private void AssertInlinedActionContainsSimpleActions(
            params ForeignAction[] productionActions)
        {
            var prod = resultGrammar.Symbols[start.Index].Productions.Single();

            throw new NotImplementedException();
#if false
            ProductionAction gotAction = prod.Actions[0];
            Assert.IsInstanceOf <CompositeProductionAction>(gotAction);
            var composite = (CompositeProductionAction)gotAction;

            int count = productionActions.Length;
            Assert.AreEqual(count, composite.Subactions.Count);

            for (int i = 0; i != count; ++i)
            {
                string context = "#" + i;

                var expectedAction = productionActions[i];
                var gotSubaction   = composite.Subactions[i];

                Assert.AreEqual(expectedAction.Offset, gotSubaction.Offset, context);
                Assert.AreEqual(expectedAction.ArgumentCount, gotSubaction.ArgumentCount, context);
            }
#endif
        }
コード例 #3
0
 public virtual void Apply(ProductionAction action)
 {
     IsDamaged |= _productionActions.Length <= _productionStep || _productionActions[_productionStep] != action;
     if (!IsDamaged)
     {
         ++_productionStep;
     }
 }
コード例 #4
0
 public Production <SYMBOL_ENUM, TREE_NODE> AddProduction(SYMBOL_ENUM nonterm, RecursiveEnum recursive,
                                                          SYMBOL_ENUM s1, SYMBOL_ENUM s2, SYMBOL_ENUM s3, SYMBOL_ENUM s4,
                                                          Func <object, object, object, object, TREE_NODE> action)
 {
     return(addProduction(new Production <SYMBOL_ENUM, TREE_NODE>(symbolsRep, nonterm, recursive,
                                                                  new SYMBOL_ENUM[] { s1, s2, s3, s4 },
                                                                  ProductionAction <TREE_NODE> .Convert(action))));
 }
コード例 #5
0
 public Production <SYMBOL_ENUM, TREE_NODE> AddProduction(SYMBOL_ENUM nonterm, RecursiveEnum recursive,
                                                          SYMBOL_ENUM s1, SYMBOL_ENUM s2, SYMBOL_ENUM s3,
                                                          Func <object, object, object, TREE_NODE> action,
                                                          int identityParamIndex = Production.NoIdentityFunction)
 {
     return(addProduction(new Production <SYMBOL_ENUM, TREE_NODE>(symbolsRep, nonterm, recursive,
                                                                  new SYMBOL_ENUM[] { s1, s2, s3 },
                                                                  ProductionAction <TREE_NODE> .Convert(action), identityParamIndex)));
 }
コード例 #6
0
 public ProductionAreaEventArgs(ProductionAction action, string idWorkOrder, IEnumerable <string> items)
 {
     this.action      = action;
     this.idWorkOrder = idWorkOrder;
     foreach (var i in items)
     {
         this.items.Add(i);
     }
 }
コード例 #7
0
        private CompositeProductionAction InlineAction(
            ProductionAction parentAction,
            ProductionAction inlinedAction,
            int inlinePosition)
        {
            Debug.Assert(parentAction != null);
            Debug.Assert(inlinedAction != null);

            CompositeProductionAction result;

            if (parentAction is CompositeProductionAction)
            {
                result = (CompositeProductionAction)parentAction.Clone();
            }
            else
            {
                result = new CompositeProductionAction();
                result.Subactions.Add((SimpleProductionAction)parentAction.Clone());
            }

            IEnumerable <SimpleProductionAction> inlinedSubactions;

            if (inlinedAction is CompositeProductionAction)
            {
                inlinedSubactions = ((CompositeProductionAction)inlinedAction).Subactions;
            }
            else
            {
                inlinedSubactions = new [] { (SimpleProductionAction)inlinedAction };
            }

            // Shift inlined actions and insert before all other subactions
            int insertIndex = 0;

            foreach (var subaction in inlinedSubactions)
            {
                var clone = new SimpleProductionAction(subaction.Offset + inlinePosition, subaction.ArgumentCount);
                result.Subactions.Insert(insertIndex, clone);
                ++insertIndex;
            }

            return(result);
        }
コード例 #8
0
        private void feedProdBuilder(IEnumerable <ProductionInfo> prodInfos)
        {
            // we have to make sure, that the identical code (as string) is converted into identical code (as C#)
            // otherwise each production would get different C# code reference, which would make DFA builder think every action is unique
            var user_actions_pool = new Dictionary <CodeLambda, UserActionInfo <object> >();

            foreach (ProductionInfo prod_info in prodInfos)
            {
                Production <int, object> production = productionBuilder.AddProduction(grammar.GetSymbolId(prod_info.LhsSymbol),
                                                                                      prod_info.Recursive,
                                                                                      prod_info.RhsSymbols.Select(it => grammar.GetSymbolId(it.SymbolName)).ToArray());

                production.MarkWith            = prod_info.EffectiveMarkedWith;
                production.TabooSymbols        = prod_info.TabooSymbols;
                production.PositionDescription = "Action for \\\"" + prod_info.LhsSymbol + "\\\" "
                                                 + (prod_info.Position.Equals(SymbolPosition.None) ? ("added by NLT generator for " + prod_info.CodeComment) : ("at " + prod_info.Position.XYString()));

                if (prod_info.ActionCode != null)
                {
                    UserActionInfo <object> func;
                    if (!user_actions_pool.TryGetValue(prod_info.ActionCode, out func))
                    {
                        // this dummy variable serves as anti-closure, so DO NOT remove it
                        CodeLambda anti_capture = prod_info.ActionCode;
                        func = ProductionAction <object> .Convert(() => anti_capture, anti_capture.RhsUnusedParamsCount);

                        user_actions_pool.Add(prod_info.ActionCode, func);
                    }
                    production.UserAction = func;

                    if (prod_info.IdentityOuterFunctionParamIndex != ProductionInfo.NoIdentityFunction)
                    {
                        production.IdentityOuterFunctionParamIndex = prod_info.IdentityOuterFunctionParamIndex;
                    }
                }
            }
        }
コード例 #9
0
		public ProcessCapability(ProductionAction productionAction)
		{
			ProductionAction = productionAction;
		}
コード例 #10
0
ファイル: Workpiece.cs プロジェクト: isse-augsburg/ssharp
			public override void Apply(ProductionAction action)
			{
			}
コード例 #11
0
ファイル: Workpiece.cs プロジェクト: isse-augsburg/ssharp
			public override void Apply(ProductionAction action)
			{
				IsDamaged = true;
			}
コード例 #12
0
ファイル: Workpiece.cs プロジェクト: isse-augsburg/ssharp
		public virtual void Apply(ProductionAction action)
		{
			IsDamaged |= _productionActions.Length <= _productionStep || _productionActions[_productionStep] != action;
			if (!IsDamaged)
				++_productionStep;
		}
コード例 #13
0
 public override void Apply(ProductionAction action)
 {
 }
コード例 #14
0
 public override void Apply(ProductionAction action)
 {
     IsDamaged = true;
 }
コード例 #15
0
 public ProcessCapability(ProductionAction productionAction)
 {
     ProductionAction = productionAction;
 }
コード例 #16
0
 public ProductionAreaEventArgs(ProductionAction action)
 {
     this.action = action;
 }