public override void Visit(BasicRule visitee) { PathBasedFieldSelector pathSelector = FindPathSelector(visitee.Selector); if (pathSelector == null) { //TODO: Allow other selectors if they are all equal. throw new InvalidOperationException("Self referencing selector requires a path based selector."); } if (SelectorPath == null) { SelectorPath = pathSelector.Path; Alias = visitee.Alias; return; } if (SelectorPath != pathSelector.Path) { throw new InvalidOperationException("Json Rule Tree had multiple different selectors."); } if (Alias == null) { //Note: If Alias is null, we allow the next rule to provide one. Alias = visitee.Alias; return; } if (Alias != visitee.Alias) { //Note: If multiple aliases was found, we defer back to the selector. Alias = SelectorPath; } }
public Tuple <Dictionary <int, Rule>, string[]> ParseInput() { var lines = Input.Split("\n", StringSplitOptions.TrimEntries); var i = 0; var rules = new Dictionary <int, Rule>(); while (!string.IsNullOrEmpty(lines[i])) { var a = lines[i].Split(':', StringSplitOptions.TrimEntries); int r = int.Parse(a[0]); if (a[1].Contains('\"')) { rules[r] = BasicRule.Parse(a[1]); } else if (a[1].Contains('|')) { rules[r] = OrRule.Parse(a[1]); } else { rules[r] = MultiRule.Parse(a[1]); } i++; } return(Tuple.Create(rules, lines.Skip(i + 1).ToArray())); }
private void AssertRuleDoesNotMatchCondtitional( string ruleText, int[] sourceSymbols = null, float[][] sourceParameters = null, string axiom = null, int ruleParamMemoryStartIndex = 0, int matchIndex = 0, int paramTempMemorySize = 0, float[] globalParams = null, string[] globalParamNames = null, string includedSymbols = "[]ABCDE" ) { var totalIncluded = new HashSet <int>(includedSymbols.Select(x => (int)x)); globalParamNames = globalParamNames ?? new string[0]; using var symbols = new DependencyTracker <SymbolString <float> >( axiom == null ? new SymbolString <float>(sourceSymbols, sourceParameters) : SymbolString <float> .FromString(axiom, Allocator.Persistent) ); var ruleFromString = new BasicRule( RuleParser.ParseToRule(ruleText, x => x, globalParameters: globalParamNames), '[', ']'); using var ruleNativeData = new SystemLevelRuleNativeData(new[] { ruleFromString }); var nativeWriter = new SymbolSeriesMatcherNativeDataWriter(); ruleFromString.WriteDataIntoMemory(ruleNativeData, nativeWriter); globalParams = globalParams ?? new float[0]; using var globalNative = new NativeArray <float>(globalParams, Allocator.Persistent); using var paramMemory = new NativeArray <float>(paramTempMemorySize, Allocator.Persistent); using var branchCache = new SymbolStringBranchingCache('[', ']', new[] { totalIncluded }, ruleNativeData); branchCache.BuildJumpIndexesFromSymbols(symbols); var random = new Unity.Mathematics.Random(); var matchSingleData = new LSystemSingleSymbolMatchData { isTrivial = false, tmpParameterMemorySpace = JaggedIndexing.GetWithNoLength(ruleParamMemoryStartIndex) }; var potentialMatch = ruleFromString.AsBlittable().PreMatchCapturedParametersWithoutConditional( branchCache, symbols.Data, matchIndex, paramMemory, matchSingleData.tmpParameterMemorySpace.index, ref matchSingleData, new TmpNativeStack <SymbolStringBranchingCache.BranchEventData>(5), globalNative, ruleNativeData.dynamicOperatorMemory, ref random, ruleNativeData.ruleOutcomeMemorySpace ); Assert.IsFalse(potentialMatch); }
public override void Visit(RuleResult result) { BasicRule rule = result.Rule as BasicRule; if (rule != null) { WriteLine($"{rule.Alias}"); } base.Visit(result); }
public CellAutoWorld() { WorldRect = new IntRect() { left = 0, down = 0, top = 100, right = 100 }; oddGenerationMap = new byte[WorldRect.length, WorldRect.height]; evenGenerationMap = new byte[WorldRect.length, WorldRect.height]; BasicRule r = new BasicRule(); rule = r; InitRenderer(); InitArea(); InitGrid(); InitMap(); Debug.Log("World Init"); }
public void DisplayOriginalPrice() { var basicDiscount = new BasicRule(ItemList); basicDiscount.TotalPriceCalculation(); }
public void BasicRuleRejectsApplicationIfAnyParameters() { var ruleFromString = new BasicRule( RuleParser.ParseToRule("A -> AB", x => x), '[', ']'); var totalIncluded = new HashSet <int>("[]AB".Select(x => (int)x)); using var ruleNativeData = new SystemLevelRuleNativeData(new[] { ruleFromString }); var nativeWriter = new SymbolSeriesMatcherNativeDataWriter(); ruleFromString.WriteDataIntoMemory(ruleNativeData, nativeWriter); var symbols = new DependencyTracker <SymbolString <float> >( new SymbolString <float>(new int[] { 'A' }, new float[][] { new float[0] }) ); try { var globalParams = new float[0]; using var globalNative = new NativeArray <float>(globalParams, Allocator.Persistent); using var paramMemory = new NativeArray <float>(0, Allocator.Persistent); using var branchCache = new SymbolStringBranchingCache('[', ']', new[] { totalIncluded }, ruleNativeData); branchCache.BuildJumpIndexesFromSymbols(symbols); var random = new Unity.Mathematics.Random(); var matchSingleData = new LSystemSingleSymbolMatchData { isTrivial = false, tmpParameterMemorySpace = JaggedIndexing.GetWithNoLength(0) }; var preMatchSuccess = ruleFromString.AsBlittable().PreMatchCapturedParametersWithoutConditional( branchCache, symbols.Data, 0, paramMemory, matchSingleData.tmpParameterMemorySpace.index, ref matchSingleData, new TmpNativeStack <SymbolStringBranchingCache.BranchEventData>(5), globalNative, ruleNativeData.dynamicOperatorMemory, ref random, ruleNativeData.ruleOutcomeMemorySpace ); Assert.IsTrue(preMatchSuccess); Assert.AreEqual(0, matchSingleData.selectedReplacementPattern); Assert.AreEqual(0, matchSingleData.tmpParameterMemorySpace.length); Assert.AreEqual(2, matchSingleData.replacementSymbolIndexing.length); Assert.AreEqual(0, matchSingleData.replacementParameterIndexing.length); var symbolRawData = symbols.Data; symbolRawData.parameters[0] = new JaggedIndexing { index = 0, length = 1 }; matchSingleData = new LSystemSingleSymbolMatchData { isTrivial = false, tmpParameterMemorySpace = JaggedIndexing.GetWithNoLength(0) }; preMatchSuccess = ruleFromString.AsBlittable().PreMatchCapturedParametersWithoutConditional( branchCache, symbols.Data, 0, paramMemory, matchSingleData.tmpParameterMemorySpace.index, ref matchSingleData, new TmpNativeStack <SymbolStringBranchingCache.BranchEventData>(5), globalNative, ruleNativeData.dynamicOperatorMemory, ref random, ruleNativeData.ruleOutcomeMemorySpace ); Assert.IsFalse(preMatchSuccess); } finally { symbols.Dispose(); } }
public virtual void Visit(BasicRule visitee) => visitee.Constraint.Accept(this);
public virtual void Visit(BasicRule visitee) => Visit((Rule)visitee);