private Dictionary <string, PropertyTemplate> parseParameter() { var dic = new Dictionary <string, PropertyTemplate>(); while (true) { var key = parseKey(); throwIfHasNoNextOrNext(); if (_reader.Current() == '@' && _reader.HasNext() && _reader.Forwards() == '{') { _reader.Next(); dic.Add(key, parse()); throwIfHasNoNextOrNext(); if (_reader.Current() == ']') { return(dic); } else { throwIfNotMatch(',', "require char ','"); } } else { _reader.Back(); var parameterNode = new PropertyTemplate(); parameterNode.Value = parseSegment(',', ']'); dic.Add(key, parameterNode); if (_reader.Current() == ']') { return(dic); } else { throwIfNotMatch(',', "require char ','"); } } } }
private string parseVariable() { var builder = new StringBuilder(); while (_reader.HasNext()) { _reader.Next(); if (_reader.Current() == '}' && _reader.HasNext() && _reader.Forwards() == '$') { _reader.Next(); return(builder.ToString()); } else { builder.Append(_reader.Current()); } } throw new ExpressionIncorrectException($"expression varible incompleted!"); }
public PropertySegement[] Parse(string input) { _reader = new CharSequenceReader(input); var ls = new List <PropertySegement>(); while (_reader.HasNext()) { _reader.Next(); if (_reader.Current() == '@' && _reader.HasNext() && _reader.Forwards() == '{') { _reader.Next(); if (_builder.Length != 0) { ls.Add(new PropertySegement() { Value = _builder.ToString() }); _builder.Clear(); } var template = new PropertySegement(); template.Template = parseProperty(); ls.Add(template); } else if (_reader.Current() == '$' && _reader.HasNext() && _reader.Forwards() == '{') { _reader.Next(); if (_builder.Length != 0) { ls.Add(new PropertySegement() { Value = _builder.ToString() }); _builder.Clear(); } var template = new PropertySegement(); template.Value = parseVariable(); template.IsVariable = true; ls.Add(template); } else { _builder.Append(_reader.Current()); } } if (_builder.Length != 0) { ls.Add(new PropertySegement() { Value = _builder.ToString() }); } return(ls.ToArray()); }