public static LexemV8 Parse(string data) { if (String.IsNullOrEmpty(data)) { return(null); } Stack <LexemV8> _lexemStack = new Stack <LexemV8>(); LexemV8 lexemV8 = null; for (int i = 0; i < data.Length; i++) { char ch = data[i]; if (ch == StartLexem && IsValidStringLexem(lexemV8)) { LexemV8 braceLexemV8 = new LexemV8 { LexemType = LexemV8Type.Brace }; if (_lexemStack.Count > 0) { LexemV8 parentBrace = _lexemStack.Peek(); parentBrace.AddChild(braceLexemV8); } _lexemStack.Push(braceLexemV8); } else if (ch == DelimiterLexem && IsValidStringLexem(lexemV8)) { LexemV8 parentBrace = _lexemStack.Peek(); parentBrace.AddChild(lexemV8); lexemV8 = null; } else if (ch == EndLexem && IsValidStringLexem(lexemV8)) { LexemV8 parentBrace = _lexemStack.Pop(); parentBrace.AddChild(lexemV8); if (_lexemStack.Count == 0) { lexemV8 = parentBrace; } else { lexemV8 = null; } } else if (NeedAddChar(lexemV8, ch)) { if (lexemV8 == null) { lexemV8 = new LexemV8(); } lexemV8.AddChar(ch); } } return(lexemV8); }