public SingleExpression(TextReader reader) { while (reader.Peek() != -1) { char c = (char)reader.Peek(); if (c == '(') { reader.Read(); Expression = new SingleExpression(reader); if ((char)reader.Read() != ')') { throw new Exception("Expected )"); } } else if (c == ')') { return; } else if (c == '[') { reader.Read(); Expression = new RangeExpression(reader); if ((char)reader.Read() != ']') { throw new Exception("Expected ]"); } } else if (c == '{') { reader.Read(); Expression = new RepeatExpression(reader) { Expression = Expression }; if ((char)reader.Read() != '}') { throw new Exception("Expected }"); } } else if (c == '|') { reader.Read(); Expression = new OrExpression { Left = Expression, Right = new SingleExpression(reader) }; } else if (c == '.') { reader.Read(); Expression = new ConcatExpression { Left = Expression, Right = new SingleExpression(reader).Expression }; } else if (c == '*') { reader.Read(); Expression = new StarExpression { Expression = Expression }; } else if (c == '+') { reader.Read(); Expression = new PlusExpression { Expression = Expression }; } else { throw new Exception("Unexpected " + c); } } }
public SingleExpression(TextReader reader) { while (reader.Peek() != -1) { char c = (char)reader.Peek(); if (c == '(') { reader.Read(); Expression = new SingleExpression(reader); if ((char)reader.Read() != ')') throw new Exception("Expected )"); } else if (c == ')') { return; } else if (c == '[') { reader.Read(); Expression = new RangeExpression(reader); if ((char)reader.Read() != ']') throw new Exception("Expected ]"); } else if (c == '{') { reader.Read(); Expression = new RepeatExpression(reader) { Expression = Expression }; if ((char)reader.Read() != '}') throw new Exception("Expected }"); } else if (c == '|') { reader.Read(); Expression = new OrExpression { Left = Expression, Right = new SingleExpression(reader) }; } else if (c == '.') { reader.Read(); Expression = new ConcatExpression { Left = Expression, Right = new SingleExpression(reader).Expression }; } else if (c == '*') { reader.Read(); Expression = new StarExpression { Expression = Expression }; } else if (c == '+') { reader.Read(); Expression = new PlusExpression { Expression = Expression }; } else { throw new Exception("Unexpected " + c); } } }