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 } |
