public BnfExpression MakeStarRule(NonTerminal listNonTerminal, BnfTerm delimiter, BnfTerm listMember) { if (delimiter == null) { //it is much simpler case listNonTerminal.SetOption(TermOptions.IsList); listNonTerminal.Rule = Empty | listNonTerminal + listMember; return(listNonTerminal.Rule); } NonTerminal tmp = new NonTerminal(listMember.Name + "+"); MakePlusRule(tmp, delimiter, listMember); listNonTerminal.Rule = Empty | tmp; listNonTerminal.SetOption(TermOptions.IsStarList); return(listNonTerminal.Rule); }
public NonTerminal Plus() { if (_plus != null) { return(_plus); } string name = this.Name + "+"; _plus = new NonTerminal(name); _plus.SetOption(TermOptions.IsList); _plus.Rule = this | _plus + this; return(_plus); }
public NonTerminal Star() { if (_star != null) { return(_star); } string name = this.Name + "*"; _star = new NonTerminal(name); _star.SetOption(TermOptions.IsList); _star.Rule = Grammar.Empty | _star + this; return(_star); }
public BnfExpression MakePlusRule(NonTerminal listNonTerminal, BnfTerm delimiter, BnfTerm listMember) { listNonTerminal.SetOption(TermOptions.IsList); if (delimiter == null) { listNonTerminal.Rule = listMember | listNonTerminal + listMember; } else { listNonTerminal.Rule = listMember | listNonTerminal + delimiter + listMember; } return(listNonTerminal.Rule); }