/// <summary> /// /// </summary> /// <param name="value"></param> /// <returns></returns> public static ABNF_Rule Parse(string value) { if (value == null) { throw new ArgumentNullException("value"); } string[] name_value = value.Split(new[] { '=' }, 2); if (name_value.Length != 2) { throw new ParseException("Invalid ABNF rule '" + value + "'."); } ABNF_Rule retVal = new ABNF_Rule(name_value[0].Trim(), ABNF_Alternation.Parse(new StringReader(name_value[1]))); return(retVal); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <returns></returns> public static ABFN_Group Parse(StringReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } // group = "(" *c-wsp alternation *c-wsp ")" if (reader.Peek() != '(') { throw new ParseException("Invalid ABNF 'group' value '" + reader.ReadToEnd() + "'."); } // Eat "(". reader.Read(); // TODO: *c-wsp ABFN_Group retVal = new ABFN_Group(); // We reached end of stream, no closing ")". if (reader.Peek() == -1) { throw new ParseException("Invalid ABNF 'group' value '" + reader.ReadToEnd() + "'."); } retVal.m_pAlternation = ABNF_Alternation.Parse(reader); // We don't have closing ")". if (reader.Peek() != ')') { throw new ParseException("Invalid ABNF 'group' value '" + reader.ReadToEnd() + "'."); } else { reader.Read(); } return(retVal); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <returns></returns> public static ABNF_Option Parse(StringReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } // option = "[" *c-wsp alternation *c-wsp "]" if (reader.Peek() != '[') { throw new ParseException("Invalid ABNF 'option' value '" + reader.ReadToEnd() + "'."); } // Eat "[". reader.Read(); // TODO: *c-wsp ABNF_Option retVal = new ABNF_Option(); // We reached end of stream, no closing "]". if (reader.Peek() == -1) { throw new ParseException("Invalid ABNF 'option' value '" + reader.ReadToEnd() + "'."); } retVal.m_pAlternation = ABNF_Alternation.Parse(reader); // We don't have closing ")". if (reader.Peek() != ']') { throw new ParseException("Invalid ABNF 'option' value '" + reader.ReadToEnd() + "'."); } else { reader.Read(); } return(retVal); }