source: proto/JSON/byteclass.py @ 675

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

Implement escape and parallel_prefix_parity defs and demos.

File size: 3.0 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# byteclass.py
4#
5# Bitstream character class definitions for JSON character classes.
6#
7
8class lexical_streams ():
9        """
10        RFC 4627 - JavaScript Object Notation (JSON) 
11        RFC 5234 - Augmented BNF for Syntax Specifications: ABNF
12       
13        number = [ minus ] int [ frac ] [ exp ]
14        decimal-point = %x2E       ; .
15        digit1-9 = %x31-39         ; 1-9
16        e = %x65 / %x45            ; e E
17        exp = e [ minus / plus ] 1*DIGIT
18        frac = decimal-point 1*DIGIT
19        int = zero / ( digit1-9 *DIGIT )
20        minus = %x2D               ; -
21        plus = %x2B                ; +
22        zero = %x30                ; 0
23       
24        Any single character alternative can be combined into a single character class.
25       
26        """
27        #Object
28        LCurlyBrace = 0
29        Colon = 0
30        Comma = 0
31        RCurlyBrace = 0
32        #Array
33        LSquareBracket = 0
34        RSquareBracket = 0
35        #Number
36        Minus = 0
37        Zero = 0
38        Digit1_9 = 0
39        Digit0_9 = 0
40        DecimalPoint = 0
41        Ee = 0
42        PlusMinus = 0
43        NumberFollowSet = 0
44        #String
45        DQuotes = 0
46        RSolidus = 0
47        Solidus = 0
48        b = 0
49        f = 0
50        n = 0
51        t = 0
52        u = 0
53        Digit0_ = 0
54
55def classify_bytes(bit) :
56  lex = lexical_streams()
57  temp1 = (bit[1] &~ bit[0]);
58  temp2 = (bit[2] & bit[3]);
59  temp3 = (temp1 & temp2);
60  temp4 = (bit[4] &~ bit[5]);
61  temp5 = (bit[6] & bit[7]);
62  temp6 = (temp4 & temp5);
63  lex.LCurlyBrace = (temp3 & temp6);
64  temp7 = (bit[0] | bit[1]);
65  temp8 = (temp2 &~ temp7);
66  temp9 = (bit[6] &~ bit[7]);
67  temp10 = (temp4 & temp9);
68  lex.Colon = (temp8 & temp10);
69  temp11 = (bit[2] &~ bit[3]);
70  temp12 = (temp11 &~ temp7);
71  temp13 = (bit[4] & bit[5]);
72  temp14 = (bit[6] | bit[7]);
73  temp15 = (temp13 &~ temp14);
74  lex.Comma = (temp12 & temp15);
75  temp16 = (bit[7] &~ bit[6]);
76  temp17 = (temp13 & temp16);
77  lex.RCurlyBrace = (temp3 & temp17);
78  temp18 = (bit[3] &~ bit[2]);
79  temp19 = (temp1 & temp18);
80  lex.LSquareBracket = (temp19 & temp6);
81  lex.RSquareBracket = (temp19 & temp17);
82  lex.Minus = (temp12 & temp17);
83  temp20 = (bit[4] | bit[5]);
84  temp21 = (temp20 | temp14);
85  lex.Zero = (temp8 &~ temp21);
86  temp22 = (bit[5] | bit[6]);
87  temp23 = (~temp22);
88  temp24 = (bit[5] | temp14);
89  temp25 = ((bit[4] & temp23)|(~(bit[4]) & temp24));
90  lex.Digit1_9 = (temp8 & temp25);
91  temp26 = (bit[4] & temp22);
92  lex.Digit0_9 = (temp8 &~ temp26);
93  temp27 = (temp13 & temp9);
94  lex.DecimalPoint = (temp12 & temp27);
95  temp28 = (bit[5] &~ bit[4]);
96  temp29 = (temp28 & temp16);
97  temp30 = (bit[2] | bit[3]);
98  temp31 = (temp30 &~ temp11);
99  temp32 = (temp1 &~ temp31);
100  lex.Ee = (temp29 & temp32);
101  temp33 = (temp6 | temp17);
102  lex.PlusMinus = (temp12 & temp33);
103  temp34 = (lex.Comma | lex.RCurlyBrace);
104  lex.NumberFollowSet = (temp34 | lex.RSquareBracket);
105  lex.DQuote = (temp19 & temp15);
106  lex.RSolidus = (temp19 & temp15);
107  lex.Solidus = (temp19 & temp15);
108  lex.b = (temp19 & temp15);
109  lex.f = (temp19 & temp15);
110  lex.n = (temp19 & temp15);
111  lex.t = (temp19 & temp15);
112  lex.u = (temp19 & temp15);
113  temp35 = (temp1 &~ temp30);
114  temp36 = (temp35 &~ bit[4]);
115  temp37 = (~temp5);
116  temp38 = ((bit[5] & temp37)|(~(bit[5]) & temp14));
117  temp39 = (temp36 & temp38);
118  lex.Digit0_9 = (lex.Digit0_9 | temp39);
119  return (lex)
120
Note: See TracBrowser for help on using the repository browser.