- Timestamp:
- 05/30/11 16:59:50 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs
r5809 r6337 21 21 22 22 using System.Collections.Generic; 23 using System.Linq;24 23 using HeuristicLab.Common; 25 24 using HeuristicLab.Core; … … 94 93 * 95 94 * BinaryOperator = 96 * "+" | "-" | "*" | "/" | "Power" 95 * "+" | "-" | "*" | "/" | "Power" | "Root" 97 96 * 98 97 * UnaryOperator = … … 107 106 */ 108 107 108 var arithmeticSymbols = new GroupSymbol("Arithmetic Functions", new List<ISymbol>() { add, sub, mul, div }); 109 var trigonometricSymbols = new GroupSymbol("Trigonometric Functions", new List<ISymbol>() { sin, cos, tan }); 110 var powerSymbols = new GroupSymbol("Power Functions", new List<ISymbol> { pow, root }); 111 var exponentialAndLogarithmicSymbols = new GroupSymbol("Exponential and Logarithmic Functions", new List<ISymbol> { exp, log }); 112 var terminalSymbols = new GroupSymbol("Terminals", new List<ISymbol> { constant, variableSymbol }); 113 var realValuedSymbols = new GroupSymbol("Real valued Symbols", 114 new List<ISymbol>() { arithmeticSymbols, trigonometricSymbols, powerSymbols, exponentialAndLogarithmicSymbols, terminalSymbols }); 115 116 AddSymbol(realValuedSymbols); 117 118 SetSubtreeCount(arithmeticSymbols, 2, 2); 119 SetSubtreeCount(trigonometricSymbols, 1, 1); 120 SetSubtreeCount(powerSymbols, 2, 2); 121 SetSubtreeCount(exponentialAndLogarithmicSymbols, 1, 1); 122 SetSubtreeCount(terminalSymbols, 0, 0); 123 124 AddAllowedChildSymbol(StartSymbol, realValuedSymbols); 125 AddAllowedChildSymbol(DefunSymbol, realValuedSymbols); 126 AddAllowedChildSymbol(realValuedSymbols, realValuedSymbols); 127 128 //var unaryBooleanFunctionSymbols = new List<Symbol>() { not }; 129 //var binaryBooleanFunctionSymbols = new List<Symbol>() { or, and }; 130 //var relationalFunctionSymbols = new List<Symbol>() { gt, lt }; 131 //var booleanSymbols = unaryBooleanFunctionSymbols.Concat(binaryBooleanFunctionSymbols).Concat(relationalFunctionSymbols); 132 109 133 var allSymbols = new List<Symbol>() { add, sub, mul, div, mean, sin, cos, tan, log, pow, root, exp, @if, gt, lt, and, or, not, timeLag, integral, derivative, constant, variableSymbol, laggedVariable, variableCondition }; 110 134 … … 112 136 var binaryFunctionSymbols = new List<Symbol>() { add, sub, mul, div, mean, pow, root, variableCondition }; 113 137 114 var unaryBooleanFunctionSymbols = new List<Symbol>() { not }; 115 var binaryBooleanFunctionSymbols = new List<Symbol>() { or, and }; 116 var relationalFunctionSymbols = new List<Symbol>() { gt, lt }; 117 var terminalSymbols = new List<Symbol>() { variableSymbol, constant, laggedVariable }; 118 var realValuedSymbols = unaryFunctionSymbols.Concat(binaryFunctionSymbols).Concat(terminalSymbols).Concat(new List<Symbol>() { @if }); 119 var booleanSymbols = unaryBooleanFunctionSymbols.Concat(binaryBooleanFunctionSymbols).Concat(relationalFunctionSymbols); 120 121 foreach (var symb in allSymbols) 122 AddSymbol(symb); 123 124 foreach (var unaryFun in unaryFunctionSymbols.Concat(unaryBooleanFunctionSymbols)) { 125 SetSubtreeCount(unaryFun, 1, 1); 126 } 127 foreach (var binaryFun in binaryFunctionSymbols.Concat(binaryBooleanFunctionSymbols).Concat(relationalFunctionSymbols)) { 128 SetSubtreeCount(binaryFun, 2, 2); 129 } 130 131 foreach (var terminalSymbol in terminalSymbols) { 132 SetSubtreeCount(terminalSymbol, 0, 0); 133 } 134 135 SetSubtreeCount(@if, 3, 3); 138 139 140 //var terminalSymbols = new List<Symbol>() { variableSymbol, constant, laggedVariable }; 141 //var realValuedSymbols = unaryFunctionSymbols.Concat(binaryFunctionSymbols).Concat(terminalSymbols).Concat(new List<Symbol>() { @if }); 142 143 144 //foreach (var symb in allSymbols) 145 // AddSymbol(symb); 146 147 //foreach (var unaryFun in unaryFunctionSymbols.Concat(unaryBooleanFunctionSymbols)) { 148 // SetSubtreeCount(unaryFun, 1, 1); 149 //} 150 //foreach (var binaryFun in binaryFunctionSymbols.Concat(binaryBooleanFunctionSymbols).Concat(relationalFunctionSymbols)) { 151 // SetSubtreeCount(binaryFun, 2, 2); 152 //} 153 154 //foreach (var terminalSymbol in terminalSymbols) { 155 // SetSubtreeCount(terminalSymbol, 0, 0); 156 //} 157 158 //SetSubtreeCount(@if, 3, 3); 136 159 137 160 138 161 // allow only real-valued expressions as child of the start symbol 139 foreach (var symb in realValuedSymbols) {140 AddAllowedChildSymbol(StartSymbol, symb);141 AddAllowedChildSymbol(DefunSymbol, symb);142 }143 144 foreach (var symb in unaryFunctionSymbols) {145 foreach (var childSymb in realValuedSymbols) {146 AddAllowedChildSymbol(symb, childSymb);147 }148 }149 150 foreach (var symb in binaryFunctionSymbols) {151 foreach (var childSymb in realValuedSymbols) {152 AddAllowedChildSymbol(symb, childSymb);153 }154 }155 156 foreach (var childSymb in booleanSymbols) {157 AddAllowedChildSymbol(@if, childSymb, 0);158 }159 foreach (var childSymb in realValuedSymbols) {160 AddAllowedChildSymbol(@if, childSymb, 1);161 AddAllowedChildSymbol(@if, childSymb, 2);162 }163 164 foreach (var symb in relationalFunctionSymbols) {165 foreach (var childSymb in realValuedSymbols) {166 AddAllowedChildSymbol(symb, childSymb);167 }168 }169 foreach (var symb in binaryBooleanFunctionSymbols) {170 foreach (var childSymb in booleanSymbols) {171 AddAllowedChildSymbol(symb, childSymb);172 }173 }174 foreach (var symb in unaryBooleanFunctionSymbols) {175 foreach (var childSymb in booleanSymbols) {176 AddAllowedChildSymbol(symb, childSymb);177 }178 }162 //foreach (var symb in realValuedSymbols) { 163 // AddAllowedChildSymbol(StartSymbol, symb); 164 // AddAllowedChildSymbol(DefunSymbol, symb); 165 //} 166 167 //foreach (var symb in unaryFunctionSymbols) { 168 // foreach (var childSymb in realValuedSymbols) { 169 // AddAllowedChildSymbol(symb, childSymb); 170 // } 171 //} 172 173 //foreach (var symb in binaryFunctionSymbols) { 174 // foreach (var childSymb in realValuedSymbols) { 175 // AddAllowedChildSymbol(symb, childSymb); 176 // } 177 //} 178 179 //foreach (var childSymb in booleanSymbols) { 180 // AddAllowedChildSymbol(@if, childSymb, 0); 181 //} 182 //foreach (var childSymb in realValuedSymbols) { 183 // AddAllowedChildSymbol(@if, childSymb, 1); 184 // AddAllowedChildSymbol(@if, childSymb, 2); 185 //} 186 187 //foreach (var symb in relationalFunctionSymbols) { 188 // foreach (var childSymb in realValuedSymbols) { 189 // AddAllowedChildSymbol(symb, childSymb); 190 // } 191 //} 192 //foreach (var symb in binaryBooleanFunctionSymbols) { 193 // foreach (var childSymb in booleanSymbols) { 194 // AddAllowedChildSymbol(symb, childSymb); 195 // } 196 //} 197 //foreach (var symb in unaryBooleanFunctionSymbols) { 198 // foreach (var childSymb in booleanSymbols) { 199 // AddAllowedChildSymbol(symb, childSymb); 200 // } 201 //} 179 202 } 180 203 }
Note: See TracChangeset
for help on using the changeset viewer.