private void Initialize() { var ifFoodAhead = new IfFoodAhead(); var prog2 = new Prog2(); var prog3 = new Prog3(); var move = new Move(); var left = new Left(); var right = new Right(); var allSymbols = new List<Symbol>() { ifFoodAhead, prog2, prog3, move, left, right }; var nonTerminalSymbols = new List<Symbol>() { ifFoodAhead, prog2, prog3 }; allSymbols.ForEach(s => AddSymbol(s)); SetSubtreeCount(ifFoodAhead, 2, 2); SetSubtreeCount(prog2, 2, 2); SetSubtreeCount(prog3, 3, 3); SetSubtreeCount(move, 0, 0); SetSubtreeCount(left, 0, 0); SetSubtreeCount(right, 0, 0); // each symbols is allowed as child of the start symbol allSymbols.ForEach(s => AddAllowedChildSymbol(StartSymbol, s)); allSymbols.ForEach(s => AddAllowedChildSymbol(DefunSymbol, s)); // each symbol is allowed as child of all other symbols (except for terminals that have MaxSubtreeCount == 0 foreach (var parent in nonTerminalSymbols) { foreach (var child in allSymbols) { AddAllowedChildSymbol(parent, child); } } }
private Prog3(Prog3 original, Cloner cloner) : base(original, cloner) { }