/// <summary>
        /// Makes a non terminal optional.
        /// </summary>
        /// <param name="term">The term.</param>
        /// <returns>An optional non terminal.</returns>
        public static NonTerminal Opt(this BnfTerm term)
        {
            var nonTerminal = term.Q();

            nonTerminal.SetFlag(TermFlags.NoAstNode);
            return(nonTerminal);
        }