Changeset 15723 for branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
- Timestamp:
- 02/06/18 13:18:31 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
r15722 r15723 59 59 60 60 61 #region Production ruless 61 #region Production rules 62 // order of production is important, since they are accessed via index 63 // in memoization. 62 64 StartSymbol = Expr; 63 65 … … 89 91 } 90 92 93 /* 94 #region Memoize subtrees 95 96 public void MemoizeSubtrees(SymbolString sentence) { 97 Stack<TerminalSymbol> parseStack = new Stack<TerminalSymbol>(sentence.OfType<TerminalSymbol>()); 98 99 // Parse root symbol "+" 100 MemoizeSubtreeExpression(parseStack); 101 } 102 103 private SymbolString MemoizeSubtreeExpression(Stack<TerminalSymbol> parseStack) { 104 SymbolString subtree = new SymbolString(); 105 106 if (ReferenceEquals(parseStack.Peek(), Addition)) { 107 subtree.Add(parseStack.Pop()); 108 subtree.InsertRange(0, MemoizeSubtreeExpression(parseStack)); 109 subtree.InsertRange(0, MemoizeSubtreeTerm(parseStack)); 110 111 Expr.Alternatives[0].GeneratedSentences.Add(subtree); 112 } else { 113 subtree.InsertRange(0, MemoizeSubtreeTerm(parseStack)); 114 115 Expr.Alternatives[1].GeneratedSentences.Add(subtree); 116 } 117 118 return subtree; 119 } 120 121 private SymbolString MemoizeSubtreeTerm(Stack<TerminalSymbol> parseStack) { 122 SymbolString subtree = new SymbolString(); 123 124 if (ReferenceEquals(parseStack.Peek(), Multiplication)) { 125 subtree.Add(parseStack.Pop()); 126 subtree.InsertRange(0, MemoizeSubtreeTerm(parseStack)); 127 subtree.InsertRange(0, MemoizeSubtreeFactor(parseStack)); 128 129 Term.Alternatives[0].GeneratedSentences.Add(subtree); 130 } else { 131 subtree.InsertRange(0, MemoizeSubtreeFactor(parseStack)); 132 133 Term.Alternatives[1].GeneratedSentences.Add(subtree); 134 } 135 136 return subtree; 137 } 138 139 private SymbolString MemoizeSubtreeFactor(Stack<TerminalSymbol> parseStack) { 140 SymbolString subtree = new SymbolString(MemoizeSubtreeVar(parseStack)); 141 142 Factor.Alternatives[0].GeneratedSentences.Add(subtree); 143 return subtree; 144 } 145 146 private SymbolString MemoizeSubtreeVar(Stack<TerminalSymbol> parseStack) { 147 SymbolString subtree = new SymbolString(parseStack.Pop().ToEnumerable()); 148 149 // ... not really 150 //Var.Alternatives[0].GeneratedSentences.Add(subtree); 151 return subtree; 152 } 153 154 155 #endregion 156 */ 157 158 #region Hashing 91 159 public int CalcHashCode(SymbolString sentence) { 92 160 Debug.Assert(sentence.Any(), "Trying to evaluate empty sentence!"); … … 99 167 } 100 168 101 #region Hashing102 169 private int[] GetSubtreeHashes(TerminalSymbol currentSymbol, Stack<TerminalSymbol> parseStack) { 103 170 List<int> childHashes = null; … … 166 233 return childHashes.ToArray(); 167 234 } 168 169 235 170 236 private int AggregateHashes(IEnumerable<int> hashes) {
Note: See TracChangeset
for help on using the changeset viewer.