source: proto/JSON/byteclass.py @ 674

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

Add initial JSON protoype implementation files.

File size: 2.3 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
28def classify_bytes(bit) :
29  lex = lexical_streams()
30  temp1 = (bit[1] &~ bit[0]);
31  temp2 = (bit[2] & bit[3]);
32  temp3 = (temp1 & temp2);
33  temp4 = (bit[4] &~ bit[5]);
34  temp5 = (bit[6] & bit[7]);
35  temp6 = (temp4 & temp5);
36  lex.Left_Curly_Brace = (temp3 & temp6);
37  temp7 = (bit[0] | bit[1]);
38  temp8 = (temp2 &~ temp7);
39  temp9 = (bit[6] &~ bit[7]);
40  temp10 = (temp4 & temp9);
41  lex.Colon = (temp8 & temp10);
42  temp11 = (bit[2] &~ bit[3]);
43  temp12 = (temp11 &~ temp7);
44  temp13 = (bit[4] & bit[5]);
45  temp14 = (bit[6] | bit[7]);
46  temp15 = (temp13 &~ temp14);
47  lex.Comma = (temp12 & temp15);
48  temp16 = (bit[7] &~ bit[6]);
49  temp17 = (temp13 & temp16);
50  lex.Right_Curly_Brace = (temp3 & temp17);
51  temp18 = (bit[3] &~ bit[2]);
52  temp19 = (temp1 & temp18);
53  lex.Left_Square_Bracket = (temp19 & temp6);
54  lex.Right_Square_Bracket = (temp19 & temp17);
55  lex.Minus = (temp12 & temp17);
56  temp20 = (bit[4] | bit[5]);
57  temp21 = (temp20 | temp14);
58  lex.Zero = (temp8 &~ temp21);
59  temp22 = (bit[5] | bit[6]);
60  temp23 = (~temp22);
61  temp24 = (bit[5] | temp14);
62  temp25 = ((bit[4] & temp23)|(~(bit[4]) & temp24));
63  lex.Digit_1_9 = (temp8 & temp25);
64  temp26 = (bit[4] & temp22);
65  lex.Digit_0_9 = (temp8 &~ temp26);
66  temp27 = (temp13 & temp9);
67  lex.Decimal_Point = (temp12 & temp27);
68  temp28 = (bit[5] &~ bit[4]);
69  temp29 = (temp28 & temp16);
70  temp30 = (bit[2] | bit[3]);
71  temp31 = (temp30 &~ temp11);
72  temp32 = (temp1 &~ temp31);
73  lex.E_e = (temp29 & temp32);
74  temp33 = (temp6 | temp17);
75  lex.Plus_Minus = (temp12 & temp33);
76  temp34 = (lex.Comma | lex.Right_Curly_Brace);
77  lex.Number_Follow_Set = (temp34 | lex.Right_Square_Bracket);
78  return (lex)
79
Note: See TracBrowser for help on using the repository browser.