source: proto/JSON/byteclass.py @ 686

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

Update demo_parallel_prefix_parity. Update string parsing.

File size: 4.6 KB
RevLine 
[672]1# -*- coding: utf-8 -*-
2#
3# byteclass.py
4#
5# Bitstream character class definitions for JSON character classes.
6#
7
[682]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
[672]35class lexical_streams ():
[682]36        r"""
[672]37        RFC 4627 - JavaScript Object Notation (JSON) 
38        RFC 5234 - Augmented BNF for Syntax Specifications: ABNF
39        """
[675]40        #Object
41        LCurlyBrace = 0
42        Colon = 0
43        Comma = 0
44        RCurlyBrace = 0
45        #Array
46        LSquareBracket = 0
47        RSquareBracket = 0
48        #Number
49        Minus = 0
50        Zero = 0
51        Digit1_9 = 0
52        Digit0_9 = 0
53        DecimalPoint = 0
54        Ee = 0
55        PlusMinus = 0
56        NumberFollowSet = 0
57        #String
[686]58        DQuote = 0
[675]59        RSolidus = 0
[686]60#       Solidus = 0
61#       b = 0
62#       f = 0
63#       n = 0
64#       t = 0
[675]65        u = 0
[682]66        HexDigit = 0
[686]67        NotUnescaped = 0       
[682]68       
69class control_streams ():
70        r"""
71        RFC 4627 - JavaScript Object Notation (JSON) 
72        """
73        x00_x1F = 0
74        CR = 0
75        LF = 0
76        HT = 0
77        SP = 0 
[672]78
79def classify_bytes(bit) :
[684]80        u8 = u8_streams()
[686]81        Lex = lexical_streams()
82        Ctrl = control_streams()
[684]83        u8.unibyte = (~bit[0]);
84        u8.prefix = (bit[0] & bit[1]);
85        u8.prefix2 = (u8.prefix &~ bit[2]);
86        temp1 = (bit[2] &~ bit[3]);
87        u8.prefix3 = (u8.prefix & temp1);
88        temp2 = (bit[2] & bit[3]);
89        u8.prefix4 = (u8.prefix & temp2);
90        u8.suffix = (bit[0] &~ bit[1]);
91        temp3 = (bit[2] | bit[3]);
92        temp4 = (u8.prefix &~ temp3);
93        temp5 = (bit[4] | bit[5]);
94        temp6 = (temp5 | bit[6]);
95        temp7 = (temp4 &~ temp6);
96        temp8 = (bit[6] | bit[7]);
97        temp9 = (bit[5] & temp8);
98        temp10 = (bit[4] | temp9);
99        temp11 = (u8.prefix4 & temp10);
100        u8.badprefix = (temp7 | temp11);
101        temp12 = (temp5 | temp8);
102        u8.xE0 = (u8.prefix3 &~ temp12);
103        temp13 = (bit[4] & bit[5]);
104        temp14 = (bit[7] &~ bit[6]);
105        temp15 = (temp13 & temp14);
106        u8.xED = (u8.prefix3 & temp15);
107        u8.xF0 = (u8.prefix4 &~ temp12);
108        temp16 = (bit[5] &~ bit[4]);
109        temp17 = (temp16 &~ temp8);
110        u8.xF4 = (u8.prefix4 & temp17);
111        u8.xA0_xBF = (u8.suffix & bit[2]);
112        u8.x80_x9F = (u8.suffix &~ bit[2]);
113        u8.x90_xBF = (u8.suffix & temp3);
114        u8.x80_x8F = (u8.suffix &~ temp3);
115        temp18 = (bit[0] | bit[1]);
116        temp19 = (temp18 | bit[2]);
[686]117        Ctrl.x00_x1F = (~temp19);
[684]118        temp20 = (temp18 | temp3);
[686]119        Ctrl.CR = (temp15 &~ temp20);
[684]120        temp21 = (bit[4] &~ bit[5]);
121        temp22 = (bit[6] &~ bit[7]);
122        temp23 = (temp21 & temp22);
[686]123        Ctrl.LF = (temp23 &~ temp20);
[684]124        temp24 = (temp21 & temp14);
[686]125        Ctrl.HT = (temp24 &~ temp20);
[684]126        temp25 = (temp1 &~ temp18);
[686]127        Ctrl.SP = (temp25 &~ temp12);
[684]128        temp26 = (bit[1] &~ bit[0]);
129        temp27 = (temp26 & temp2);
130        temp28 = (bit[6] & bit[7]);
131        temp29 = (temp21 & temp28);
[686]132        Lex.LCurlyBrace = (temp27 & temp29);
[684]133        temp30 = (temp2 &~ temp18);
[686]134        Lex.Colon = (temp30 & temp23);
[684]135        temp31 = (temp13 &~ temp8);
[686]136        Lex.Comma = (temp25 & temp31);
137        Lex.RCurlyBrace = (temp27 & temp15);
[684]138        temp32 = (bit[3] &~ bit[2]);
139        temp33 = (temp26 & temp32);
[686]140        Lex.LSquareBracket = (temp33 & temp29);
141        Lex.RSquareBracket = (temp33 & temp15);
142        Lex.Minus = (temp25 & temp15);
143        Lex.Zero = (temp30 &~ temp12);
[684]144        temp34 = (bit[5] | bit[6]);
145        temp35 = (~temp34);
146        temp36 = (bit[5] | temp8);
147        temp37 = ((bit[4] & temp35)|(~(bit[4]) & temp36));
[686]148        Lex.Digit1_9 = (temp30 & temp37);
[684]149        temp38 = (bit[4] & temp34);
[686]150        Lex.Digit0_9 = (temp30 &~ temp38);
[684]151        temp39 = (temp13 & temp22);
[686]152        Lex.DecimalPoint = (temp25 & temp39);
[684]153        temp40 = (temp16 & temp14);
154        temp41 = (temp3 &~ temp1);
155        temp42 = (temp26 &~ temp41);
[686]156        Lex.Ee = (temp40 & temp42);
[684]157        temp43 = (temp29 | temp15);
[686]158        Lex.PlusMinus = (temp25 & temp43);
159        temp44 = (Lex.Comma | Lex.RCurlyBrace);
160        Lex.NumberFollowSet = (temp44 | Lex.RSquareBracket);
[684]161        temp45 = (temp22 &~ temp5);
[686]162        Lex.DQuote = (temp25 & temp45);
163        Lex.RSolidus = (temp33 & temp31);
164        Lex.u = (temp27 & temp40);
165        temp46 = (Lex.DQuote | Lex.RSolidus);
166        temp47 = (temp13 & temp28);
167        temp48 = (temp25 & temp47);
168        temp49 = (temp46 | temp48);
169        temp50 = (temp26 & temp1);
170        temp51 = (temp50 & temp45);
171        temp52 = (temp49 | temp51);
172        temp53 = (temp16 & temp22);
173        temp54 = (temp50 & temp53);
174        temp55 = (temp52 | temp54);
175        temp56 = (temp50 & temp39);
176        temp57 = (temp55 | temp56);
177        temp58 = (temp27 & temp45);
178        temp59 = (temp57 | temp58);
179        temp60 = (temp27 & temp17);
180        temp61 = (temp59 | temp60);
181        Lex.Escape = (temp61 | Lex.u);
182        temp62 = (temp50 &~ bit[4]);
183        temp63 = (~temp28);
184        temp64 = ((bit[5] & temp63)|(~(bit[5]) & temp8));
185        temp65 = (temp62 & temp64);
186        temp66 = (Lex.Digit0_9 | temp65);
187        temp67 = (temp26 &~ temp3);
188        temp68 = (temp67 &~ bit[4]);
189        temp69 = (temp68 & temp64);
190        Lex.HexDigit = (temp66 | temp69);
191        temp70 = (temp15 | temp23);
192        temp71 = (temp70 | temp24);
193        temp72 = (temp71 &~ temp20);
194        Lex.WS = (temp72 | Ctrl.SP);
195        return (u8,Lex,Ctrl)
Note: See TracBrowser for help on using the repository browser.