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 |