Mercurial > pub > ImplabNet
comparison Implab/Formats/JSON/JSONGrammar.cs @ 176:0c3c69fe225b ref20160224
rewritten the text scanner
| author | cin |
|---|---|
| date | Tue, 22 Mar 2016 18:58:40 +0300 |
| parents | 92d5278d1b10 |
| children | d5c5db0335ee |
comparison
equal
deleted
inserted
replaced
| 175:96a89dcb4060 | 176:0c3c69fe225b |
|---|---|
| 18 ValueSeparator, | 18 ValueSeparator, |
| 19 | 19 |
| 20 StringBound, | 20 StringBound, |
| 21 EscapedChar, | 21 EscapedChar, |
| 22 UnescapedChar, | 22 UnescapedChar, |
| 23 EscapedUnicode, | 23 EscapedUnicode |
| 24 | |
| 25 Minus, | |
| 26 Plus, | |
| 27 Sign, | |
| 28 Integer, | |
| 29 Dot, | |
| 30 Exp | |
| 31 } | 24 } |
| 32 | 25 |
| 33 static Lazy<JSONGrammar> _instance = new Lazy<JSONGrammar>(); | 26 static Lazy<JSONGrammar> _instance = new Lazy<JSONGrammar>(); |
| 34 | 27 |
| 35 public static JSONGrammar Instance { | 28 public static JSONGrammar Instance { |
| 36 get { return _instance.Value; } | 29 get { return _instance.Value; } |
| 37 } | 30 } |
| 38 | 31 |
| 39 readonly RegularDFA<char, TokenType> m_jsonDFA; | 32 readonly ScannerContext<TokenType> m_jsonDFA; |
| 40 readonly RegularDFA<char, TokenType> m_stringDFA; | 33 readonly ScannerContext<TokenType> m_stringDFA; |
| 41 | 34 |
| 42 public JSONGrammar() { | 35 public JSONGrammar() { |
| 43 DefineAlphabet(Enumerable.Range(0, 0x20).Select(x => (char)x)); | 36 DefineAlphabet(Enumerable.Range(0, 0x20).Select(x => (char)x)); |
| 44 var hexDigit = SymbolRangeToken('a','f').Or(SymbolRangeToken('A','F')).Or(SymbolRangeToken('0','9')); | 37 var hexDigit = SymbolRangeToken('a','f').Or(SymbolRangeToken('A','F')).Or(SymbolRangeToken('0','9')); |
| 45 var digit9 = SymbolRangeToken('1', '9'); | 38 var digit9 = SymbolRangeToken('1', '9'); |
| 86 .Or(backSlash.Cat(specialEscapeChars).Tag(TokenType.EscapedChar)) | 79 .Or(backSlash.Cat(specialEscapeChars).Tag(TokenType.EscapedChar)) |
| 87 .Or(backSlash.Cat(unicodeEspace).Tag(TokenType.EscapedUnicode)) | 80 .Or(backSlash.Cat(unicodeEspace).Tag(TokenType.EscapedUnicode)) |
| 88 .Or(unescaped.Closure().Tag(TokenType.UnescapedChar)); | 81 .Or(unescaped.Closure().Tag(TokenType.UnescapedChar)); |
| 89 | 82 |
| 90 | 83 |
| 91 m_jsonDFA = BuildDFA(jsonExpression); | 84 m_jsonDFA = BuildScannerContext(jsonExpression); |
| 92 m_stringDFA = BuildDFA(jsonStringExpression); | 85 m_stringDFA = BuildScannerContext(jsonStringExpression); |
| 93 } | 86 } |
| 94 | 87 |
| 95 public RegularDFA<char, TokenType> JsonDFA { | 88 public ScannerContext<TokenType> JsonDFA { |
| 96 get { | 89 get { |
| 97 return m_jsonDFA; | 90 return m_jsonDFA; |
| 98 } | 91 } |
| 99 } | 92 } |
| 100 | 93 |
| 101 public RegularDFA<char,TokenType> JsonStringDFA { | 94 public ScannerContext<TokenType> JsonStringDFA { |
| 102 get { | 95 get { |
| 103 return m_stringDFA; | 96 return m_stringDFA; |
| 104 } | 97 } |
| 105 } | 98 } |
| 106 | 99 |
