Mercurial > pub > ImplabNet
comparison Implab/Formats/JSON/JSONScanner.cs @ 183:4f82e0f161c3 ref20160224
fixed DFA optimization, JSON is fully functional
author | cin |
---|---|
date | Fri, 25 Mar 2016 02:49:02 +0300 |
parents | c32688129f14 |
children | 7d07503621fe |
comparison
equal
deleted
inserted
replaced
182:76e8f2ba12b8 | 183:4f82e0f161c3 |
---|---|
44 /// <returns><c>true</c> - чтение произведено успешно. <c>false</c> - достигнут конец входных данных</returns> | 44 /// <returns><c>true</c> - чтение произведено успешно. <c>false</c> - достигнут конец входных данных</returns> |
45 /// <remarks>В случе если токен не распознается, возникает исключение. Значения токенов обрабатываются, т.е. | 45 /// <remarks>В случе если токен не распознается, возникает исключение. Значения токенов обрабатываются, т.е. |
46 /// в строках обрабатываются экранированные символы, числа становтся типа double.</remarks> | 46 /// в строках обрабатываются экранированные символы, числа становтся типа double.</remarks> |
47 public bool ReadToken(out object tokenValue, out JsonTokenType tokenType) { | 47 public bool ReadToken(out object tokenValue, out JsonTokenType tokenType) { |
48 JSONGrammar.TokenType[] tag; | 48 JSONGrammar.TokenType[] tag; |
49 if (m_jsonContext.Execute(m_scanner, out tag)) { | 49 while (m_jsonContext.Execute(m_scanner, out tag)) { |
50 switch (tag[0]) { | 50 switch (tag[0]) { |
51 case JSONGrammar.TokenType.StringBound: | 51 case JSONGrammar.TokenType.StringBound: |
52 tokenValue = ReadString(); | 52 tokenValue = ReadString(); |
53 tokenType = JsonTokenType.String; | 53 tokenType = JsonTokenType.String; |
54 break; | 54 break; |
55 case JSONGrammar.TokenType.Number: | 55 case JSONGrammar.TokenType.Number: |
56 tokenValue = Double.Parse(m_scanner.GetTokenValue(), CultureInfo.InvariantCulture); | 56 tokenValue = Double.Parse(m_scanner.GetTokenValue(), CultureInfo.InvariantCulture); |
57 tokenType = JsonTokenType.Number; | 57 tokenType = JsonTokenType.Number; |
58 break; | 58 break; |
59 case JSONGrammar.TokenType.Whitespace: | |
60 continue; | |
59 default: | 61 default: |
60 tokenType = (JsonTokenType)tag[0]; | 62 tokenType = (JsonTokenType)tag[0]; |
61 tokenValue = m_scanner.GetTokenValue(); | 63 tokenValue = m_scanner.GetTokenValue(); |
62 break; | 64 break; |
63 } | 65 } |