source: proto/JSON/byteclass.py @ 3533

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

Update character class equations to sync with the JSON Pablo compilable.

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