Changeset 5792 for branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/GrammarModifier.cs
- Timestamp:
- 03/22/11 15:07:20 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/GrammarModifier.cs
r5686 r5792 26 26 public static class GrammarModifier { 27 27 internal static void AddInvokeSymbol(ISymbolicExpressionTreeGrammar grammar, string functionName, int nArgs, CutPoint startCutPoint, IEnumerable<CutPoint> argumentCutPoints) { 28 if (!grammar.ContainsSymbol(startCutPoint.Child.Symbol)) return; 29 28 30 var invokeSym = new InvokeFunction(functionName); 29 31 grammar.AddSymbol(invokeSym); … … 31 33 32 34 //allow invoke symbol everywhere, where the child of the startCutPoint was allowed 33 foreach (ISymbol parent in grammar.Symbols) { 34 if (grammar.IsAllowedChildSymbol(parent, startCutPoint.Child.Symbol)) 35 grammar.AddAllowedChildSymbol(parent, invokeSym); 36 else { 37 for (int i = 0; i < grammar.GetMaximumSubtreeCount(parent); i++) { 38 if (grammar.IsAllowedChildSymbol(parent, startCutPoint.Child.Symbol, i)) 39 grammar.AddAllowedChildSymbol(parent, invokeSym, i); 40 } 41 } 42 } 35 SetAllowedParentSymbols(grammar, startCutPoint.Child.Symbol, invokeSym); 43 36 44 37 if (nArgs > 0) { 45 38 //set allowed child symbols of invoke symbol 46 39 foreach (ISymbol child in grammar.Symbols) { 47 if (argumentCutPoints.All(x => grammar.IsAllowedChildSymbol(x.Parent.Symbol, child))) 48 grammar.AddAllowedChildSymbol(invokeSym, child); 49 else { 50 int i = 0; 51 foreach (CutPoint argumentCutPoint in argumentCutPoints) { 52 if (grammar.IsAllowedChildSymbol(argumentCutPoint.Parent.Symbol, child, argumentCutPoint.ChildIndex)) 53 grammar.AddAllowedChildSymbol(invokeSym, child, i); 54 i++; 55 } 40 int i = 0; 41 foreach (CutPoint argumentCutPoint in argumentCutPoints) { 42 if (grammar.IsAllowedChildSymbol(argumentCutPoint.Parent.Symbol, child, argumentCutPoint.ChildIndex)) 43 grammar.AddAllowedChildSymbol(invokeSym, child, i); 44 i++; 56 45 } 57 46 } 58 47 } 59 48 } 49 50 60 51 61 52 internal static void AddArgumentSymbol(ISymbolicExpressionTreeGrammar originalGrammar, ISymbolicExpressionTreeGrammar grammar, IEnumerable<int> argumentIndexes, IEnumerable<CutPoint> argumentCutPoints) { … … 65 56 grammar.SetSubtreeCount(argSymbol, 0, 0); 66 57 67 foreach ( ISymbol parent in originalGrammar.Symbols) {68 if ( parent is StartSymbol || parent is ProgramRootSymbol) continue;69 if (originalGrammar.IsAllowedChildSymbol( parent, pair.CutPoint.Child.Symbol))70 grammar.AddAllowedChildSymbol( parent, argSymbol);58 foreach (var symb in grammar.Symbols) { 59 if (symb is ProgramRootSymbol || symb is StartSymbol) continue; 60 if (originalGrammar.IsAllowedChildSymbol(symb, pair.CutPoint.Child.Symbol)) 61 grammar.AddAllowedChildSymbol(symb, argSymbol); 71 62 else { 72 for (int i = 0; i < originalGrammar.GetMaximumSubtreeCount(parent); i++) {73 if (originalGrammar.IsAllowedChildSymbol( parent, pair.CutPoint.Child.Symbol, i))74 grammar.AddAllowedChildSymbol( parent, argSymbol, i);63 for (int i = 0; i < grammar.GetMaximumSubtreeCount(symb); i++) { 64 if (originalGrammar.IsAllowedChildSymbol(symb, pair.CutPoint.Child.Symbol, i)) 65 grammar.AddAllowedChildSymbol(symb, argSymbol, i); 75 66 } 67 } 68 } 69 } 70 } 71 72 internal static void SetAllowedParentSymbols(ISymbolicExpressionTreeGrammar grammar, ISymbol symbol, ISymbol newSymbol) { 73 foreach (var symb in grammar.Symbols) { 74 if (symb is ProgramRootSymbol) continue; 75 if (newSymbol is Argument && symb is StartSymbol) continue; 76 if (grammar.IsAllowedChildSymbol(symb, symbol)) 77 grammar.AddAllowedChildSymbol(symb, newSymbol); 78 else { 79 for (int i = 0; i < grammar.GetMaximumSubtreeCount(symb); i++) { 80 if (grammar.IsAllowedChildSymbol(symb, symbol, i)) 81 grammar.AddAllowedChildSymbol(symb, newSymbol, i); 76 82 } 77 83 }
Note: See TracChangeset
for help on using the changeset viewer.