Changeset 15834 for branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
- Timestamp:
- 03/08/18 11:42:18 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
r15832 r15834 14 14 15 15 #region Symbols 16 public VariableSymbol Var; 16 17 public IReadOnlyDictionary<Symbol, IReadOnlyList<Production>> Productions { get; } 18 19 public NonterminalSymbol Var; 20 public IReadOnlyList<VariableTerminalSymbol> VarTerminals; 17 21 18 22 public NonterminalSymbol Expr; … … 65 69 public Grammar(string[] variables) { 66 70 #region Define Symbols 67 Var = new VariableSymbol("var", variables);71 Var = new NonterminalSymbol("Var"); 68 72 69 73 Expr = new NonterminalSymbol("Expr"); … … 96 100 StartSymbol = Expr; 97 101 98 Expr.AddProduction(Term, Expr, Addition); 99 Expr.AddProduction(Term); 100 101 Term.AddProduction(Factor, Term, Multiplication); 102 Term.AddProduction(Factor); 103 Term.AddProduction(InvExpr, Inv); 104 105 Factor.AddProduction(Var); 106 Factor.AddProduction(LogFactor); 107 Factor.AddProduction(ExpFactor); 108 Factor.AddProduction(SinFactor); 109 Factor.AddProduction(CosFactor); 110 111 LogFactor.AddProduction(SimpleExpr, Log); 112 ExpFactor.AddProduction(SimpleTerm, Exp); 113 SinFactor.AddProduction(SimpleExpr, Sin); 114 CosFactor.AddProduction(SimpleExpr, Cos); 115 116 SimpleExpr.AddProduction(SimpleTerm, SimpleExpr, Addition); 117 SimpleExpr.AddProduction(SimpleTerm); 118 119 SimpleTerm.AddProduction(Var, SimpleTerm, Multiplication); 120 SimpleTerm.AddProduction(Var); 121 122 InvExpr.AddProduction(InvTerm, InvExpr, Addition); 123 InvExpr.AddProduction(InvTerm); 124 125 InvTerm.AddProduction(Factor, InvTerm, Multiplication); 126 InvTerm.AddProduction(Factor); 102 Dictionary<Symbol, IReadOnlyList<Production>> productions = new Dictionary<Symbol, IReadOnlyList<Production>>(); 103 104 // Map each variable to a separate production rule of the "Var" nonterminal symbol. 105 VarTerminals = variables.Select(v => new VariableTerminalSymbol(v)).ToArray(); 106 productions[Var] = VarTerminals.Select(v => new Production(v)).ToArray(); 107 108 productions[Expr] = new[] { 109 new Production(Term, Expr, Addition), 110 new Production(Term) 111 }; 112 113 productions[Term] = new[] { 114 new Production(Factor, Term, Multiplication), 115 new Production(Factor), 116 new Production(InvExpr, Inv) 117 }; 118 119 productions[Factor] = new[] { 120 new Production(Var), 121 new Production(LogFactor), 122 new Production(ExpFactor), 123 new Production(SinFactor), 124 new Production(CosFactor), 125 }; 126 127 productions[LogFactor] = new[] { new Production(SimpleExpr, Log) }; 128 productions[ExpFactor] = new[] { new Production(SimpleTerm, Exp) }; 129 productions[SinFactor] = new[] { new Production(SimpleExpr, Sin) }; 130 productions[CosFactor] = new[] { new Production(SimpleExpr, Cos) }; 131 132 productions[SimpleExpr] = new[] { 133 new Production(SimpleTerm, SimpleExpr, Addition), 134 new Production(SimpleTerm) 135 }; 136 137 productions[SimpleTerm] = new[] { 138 new Production(Var, SimpleTerm, Multiplication), 139 new Production(Var) 140 }; 141 142 productions[InvExpr] = new[] { 143 new Production(InvTerm, InvExpr, Addition), 144 new Production(InvTerm) 145 }; 146 147 productions[InvTerm] = new[] { 148 new Production(Factor, InvTerm, Multiplication), 149 new Production(Factor) 150 }; 151 152 Productions = productions; 127 153 #endregion 128 154
Note: See TracChangeset
for help on using the changeset viewer.