source: proto/JSON/byteclass.py @ 702

Last change on this file since 702 was 702, checked in by ksherdy, 9 years ago

Update JSON follow set characters classes to include WS.

File size: 5.3 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# byteclass.py
4#
5# Bitstream character class definitions for JSON character classes.
6#
7
8class u8_streams ():
9        unibyte = 0
10        prefix = 0
11        prefix2 = 0
12        prefix3 = 0
13        prefix4 = 0
14        suffix = 0
15        badprefix = 0
16        xE0 = 0
17        xED = 0
18        xF0 = 0
19        xF4 = 0
20        xA0_xBF = 0
21        x80_x9F = 0
22        x90_xBF = 0
23        x80_x8F = 0
24        xEF = 0
25        xBF = 0
26        xBE = 0
27        scope22 = 0
28        scope32 = 0
29        scope33 = 0
30        scope42 = 0
31        scope43 = 0
32        scope44 = 0
33        error = 0
34
35class lexical_streams ():
36        r"""
37        RFC 4627 - JavaScript Object Notation (JSON) 
38        RFC 5234 - Augmented BNF for Syntax Specifications: ABNF
39        """
40        #Object
41        LCurlyBrace = 0
42        Colon = 0
43        Comma = 0
44        RCurlyBrace = 0
45       
46        #Array
47        LSquareBracket = 0
48        RSquareBracket = 0
49       
50        #Number
51        Minus = 0
52        Zero = 0
53        Digit1_9 = 0
54        Digit0_9 = 0
55        DecimalPoint = 0
56        Ee = 0
57        PlusMinus = 0
58       
59        #String
60        DQuote = 0
61        RSolidus = 0
62#       Solidus = 0
63#       b = 0
64#       f = 0
65#       n = 0
66#       t = 0
67        u = 0
68        HexDigit = 0
69        NotUnescaped = 0       
70        # White space
71        WS = 0
72       
73        # true
74        t = 0
75        r = 0
76#       u = 0
77        e = 0
78       
79        # false
80        f = 0
81        a = 0
82        l = 0
83        s = 0
84#       e = 0
85       
86        # null
87        n = 0
88#       u = 0
89#       l = 0
90#       l = 0
91
92        ValueFollowSet = 0
93        StringFollowSet = 0     
94
95class control_streams ():
96        r"""
97        RFC 4627 - JavaScript Object Notation (JSON) 
98        """
99        x00_x1F = 0
100        CR = 0
101        LF = 0
102        HT = 0
103        SP = 0 
104
105def classify_bytes(bit) :
106        u8 = u8_streams()
107        Lex = lexical_streams()
108        Ctrl = control_streams()
109        u8.unibyte = (~bit[0]);
110        u8.prefix = (bit[0] & bit[1]);
111        u8.prefix2 = (u8.prefix &~ bit[2]);
112        temp1 = (bit[2] &~ bit[3]);
113        u8.prefix3 = (u8.prefix & temp1);
114        temp2 = (bit[2] & bit[3]);
115        u8.prefix4 = (u8.prefix & temp2);
116        u8.suffix = (bit[0] &~ bit[1]);
117        temp3 = (bit[2] | bit[3]);
118        temp4 = (u8.prefix &~ temp3);
119        temp5 = (bit[4] | bit[5]);
120        temp6 = (temp5 | bit[6]);
121        temp7 = (temp4 &~ temp6);
122        temp8 = (bit[6] | bit[7]);
123        temp9 = (bit[5] & temp8);
124        temp10 = (bit[4] | temp9);
125        temp11 = (u8.prefix4 & temp10);
126        u8.badprefix = (temp7 | temp11);
127        temp12 = (temp5 | temp8);
128        u8.xE0 = (u8.prefix3 &~ temp12);
129        temp13 = (bit[4] & bit[5]);
130        temp14 = (bit[7] &~ bit[6]);
131        temp15 = (temp13 & temp14);
132        u8.xED = (u8.prefix3 & temp15);
133        u8.xF0 = (u8.prefix4 &~ temp12);
134        temp16 = (bit[5] &~ bit[4]);
135        temp17 = (temp16 &~ temp8);
136        u8.xF4 = (u8.prefix4 & temp17);
137        u8.xA0_xBF = (u8.suffix & bit[2]);
138        u8.x80_x9F = (u8.suffix &~ bit[2]);
139        u8.x90_xBF = (u8.suffix & temp3);
140        u8.x80_x8F = (u8.suffix &~ temp3);
141        temp18 = (bit[0] | bit[1]);
142        temp19 = (temp18 | bit[2]);
143        Ctrl.x00_x1F = (~temp19);
144        temp20 = (temp18 | temp3);
145        Ctrl.CR = (temp15 &~ temp20);
146        temp21 = (bit[4] &~ bit[5]);
147        temp22 = (bit[6] &~ bit[7]);
148        temp23 = (temp21 & temp22);
149        Ctrl.LF = (temp23 &~ temp20);
150        temp24 = (temp21 & temp14);
151        Ctrl.HT = (temp24 &~ temp20);
152        temp25 = (temp1 &~ temp18);
153        Ctrl.SP = (temp25 &~ temp12);
154        temp26 = (bit[1] &~ bit[0]);
155        temp27 = (temp26 & temp2);
156        temp28 = (bit[6] & bit[7]);
157        temp29 = (temp21 & temp28);
158        Lex.LCurlyBrace = (temp27 & temp29);
159        temp30 = (temp2 &~ temp18);
160        Lex.Colon = (temp30 & temp23);
161        temp31 = (temp13 &~ temp8);
162        Lex.Comma = (temp25 & temp31);
163        Lex.RCurlyBrace = (temp27 & temp15);
164        temp32 = (bit[3] &~ bit[2]);
165        temp33 = (temp26 & temp32);
166        Lex.LSquareBracket = (temp33 & temp29);
167        Lex.RSquareBracket = (temp33 & temp15);
168        Lex.Minus = (temp25 & temp15);
169        Lex.Zero = (temp30 &~ temp12);
170        temp34 = (bit[5] | bit[6]);
171        temp35 = (~temp34);
172        temp36 = (bit[5] | temp8);
173        temp37 = ((bit[4] & temp35)|(~(bit[4]) & temp36));
174        Lex.Digit1_9 = (temp30 & temp37);
175        temp38 = (bit[4] & temp34);
176        Lex.Digit0_9 = (temp30 &~ temp38);
177        temp39 = (temp13 & temp22);
178        Lex.DecimalPoint = (temp25 & temp39);
179        temp40 = (temp16 & temp14);
180        temp41 = (temp3 &~ temp1);
181        temp42 = (temp26 &~ temp41);
182        Lex.Ee = (temp40 & temp42);
183        temp43 = (temp29 | temp15);
184        Lex.PlusMinus = (temp25 & temp43);
185        temp44 = (temp22 &~ temp5);
186        Lex.DQuote = (temp25 & temp44);
187        Lex.RSolidus = (temp33 & temp31);
188        Lex.u = (temp27 & temp40);
189        temp45 = (Lex.DQuote | Lex.RSolidus);
190        temp46 = (temp13 & temp28);
191        temp47 = (temp25 & temp46);
192        temp48 = (temp45 | temp47);
193        temp49 = (temp26 & temp1);
194        temp50 = (temp49 & temp44);
195        temp51 = (temp48 | temp50);
196        temp52 = (temp16 & temp22);
197        temp53 = (temp49 & temp52);
198        temp54 = (temp51 | temp53);
199        temp55 = (temp49 & temp39);
200        temp56 = (temp54 | temp55);
201        temp57 = (temp27 & temp44);
202        temp58 = (temp56 | temp57);
203        temp59 = (temp27 & temp17);
204        temp60 = (temp58 | temp59);
205        Lex.Escape = (temp60 | Lex.u);
206        temp61 = (temp49 &~ bit[4]);
207        temp62 = (~temp28);
208        temp63 = ((bit[5] & temp62)|(~(bit[5]) & temp8));
209        temp64 = (temp61 & temp63);
210        temp65 = (Lex.Digit0_9 | temp64);
211        temp66 = (temp26 &~ temp3);
212        temp67 = (temp66 &~ bit[4]);
213        temp68 = (temp67 & temp63);
214        Lex.HexDigit = (temp65 | temp68);
215        temp69 = (temp15 | temp23);
216        temp70 = (temp69 | temp24);
217        temp71 = (temp70 &~ temp20);
218        Lex.WS = (temp71 | Ctrl.SP);
219        Lex.t = (temp27 & temp17);
220        Lex.r = (temp27 & temp44);
221        Lex.e = (temp49 & temp40);
222        Lex.f = (temp49 & temp52);
223        temp72 = (temp14 &~ temp5);
224        Lex.a = (temp49 & temp72);
225        Lex.l = (temp49 & temp31);
226        temp73 = (temp28 &~ temp5);
227        Lex.s = (temp27 & temp73);
228        Lex.n = (temp49 & temp39);
229        temp74 = (Lex.Comma | Lex.RCurlyBrace);
230        temp75 = (temp74 | Lex.RSquareBracket);
231        temp76 = (temp75 | Ctrl.CR);
232        temp77 = (temp76 | Ctrl.LF);
233        temp78 = (temp77 | Ctrl.HT);
234        Lex.ValueFollowSet = (temp78 | Ctrl.SP);
235        temp79 = (temp75 | Lex.Colon);
236        temp80 = (temp79 | Ctrl.CR);
237        temp81 = (temp80 | Ctrl.LF);
238        temp82 = (temp81 | Ctrl.HT);
239        Lex.StringFollowSet = (temp82 | Ctrl.SP);
240        return (u8,Lex,Ctrl)
Note: See TracBrowser for help on using the repository browser.