示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
 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);
 }