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 }