/// <summary> /// Make grammar rule according to regex plus notation (with optional delimiter) /// </summary> /// <param name="rule">Rule where plus notation is applied</param> /// <param name="delimiter">Delimiter of rule occurances</param> /// <returns>Created rule</returns> protected GrammarRule MakePlusRule(GrammarRule rule, GrammarRule delimiter = null) { var T = new NonTerminal(null); if (delimiter == null) { T.Rule = rule | (T + rule); } else { T.Rule = rule | (T + delimiter + rule); } return(T); }
/// <summary> /// Make grammar rule according to regex start notation (with optional delimiter) /// </summary> /// <param name="rule">Rule where star notation is applied</param> /// <param name="delimiter">Delimiter of rule occurances</param> /// <returns>Created rule</returns> protected GrammarRule MakeStarRule(GrammarRule rule, GrammarRule delimiter = null) { return(Q(MakePlusRule(rule, delimiter))); }
/// <summary> /// Set grammar rule as optional (Question mark notation) /// </summary> /// <param name="rule">Rule that can be ommited in grammar</param> /// <returns>Created rule</returns> protected GrammarRule Q(GrammarRule rule) { return(rule | Empty); }