using System; using System.Collections.Generic; namespace HeuristicLab.Problems.GrammaticalOptimization { // symbols are characters, possible nonterminal symbols are : 'A'..'Z' // phrases and sentences are strings // each symbol is only on element in a string public interface IGrammar { char SentenceSymbol { get; } IEnumerable NonTerminalSymbols { get; } IEnumerable TerminalSymbols { get; } IEnumerable Symbols { get; } IEnumerable GetAlternatives(char nt); IEnumerable GetTerminalAlternatives(char nt); IEnumerable GetNonTerminalAlternatives(char nt); int MinPhraseLength(Sequence phrase); int MaxPhraseLength(Sequence phrase); Sequence CompleteSentenceRandomly(Random random, Sequence phrase, int maxLen); bool IsTerminal(char symbol); bool IsTerminal(string phrase); bool IsNonTerminal(char symbol); } }