source: proto/RE2PBS/prototype.py @ 1154

Last change on this file since 1154 was 1154, checked in by ksherdy, 8 years ago

Minor template fixes.

File size: 6.5 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# prototype.py template
4#
5# Ken Herdy
6# April 20, 2010
7#
8#----------------------------------------------------------------------------
9#
10# (at)lex_strms - Lexical Item Streams.
11# (at)cc_code   - Character Class compiler equations.
12# (at)pbs_code  - Parallel bit stream equations.
13#
14#----------------------------------------------------------------------------
15
16import sys
17import bitutil
18
19u8data = ""
20lgth = 0
21
22class Basis_bits():
23        bit_0 = 0
24        bit_1 = 0
25        bit_2 = 0
26        bit_3 = 0 
27        bit_4 = 0
28        bit_5 = 0
29        bit_6 = 0
30        bit_7 = 0 
31 
32class Lex():
33        s35 = (0)
34        s48__57 = (0)
35        s120 = (0)
36        s38 = (0)
37        s59 = (0)
38
39
40def classify_bytes(basis_bits):
41        lex = Lex()
42
43        temp1 = (basis_bits.bit_0 | basis_bits.bit_1)
44        temp2 = (basis_bits.bit_2 &~ basis_bits.bit_3)
45        temp3 = (temp2 &~ temp1)
46        temp4 = (basis_bits.bit_4 | basis_bits.bit_5)
47        temp5 = (basis_bits.bit_6 & basis_bits.bit_7)
48        temp6 = (temp5 &~ temp4)
49        lex.s35 = (temp3 & temp6)
50        temp7 = (basis_bits.bit_2 & basis_bits.bit_3)
51        temp8 = (temp7 &~ temp1)
52        temp9 = (basis_bits.bit_5 | basis_bits.bit_6)
53        temp10 = (basis_bits.bit_4 & temp9)
54        lex.s48__57 = (temp8 &~ temp10)
55        temp11 = (basis_bits.bit_1 &~ basis_bits.bit_0)
56        temp12 = (temp11 & temp7)
57        temp13 = (basis_bits.bit_4 &~ basis_bits.bit_5)
58        temp14 = (basis_bits.bit_6 | basis_bits.bit_7)
59        temp15 = (temp13 &~ temp14)
60        lex.s120 = (temp12 & temp15)
61        temp16 = (basis_bits.bit_5 &~ basis_bits.bit_4)
62        temp17 = (basis_bits.bit_6 &~ basis_bits.bit_7)
63        temp18 = (temp16 & temp17)
64        lex.s38 = (temp3 & temp18)
65        temp19 = (temp13 & temp5)
66        lex.s59 = (temp8 & temp19)
67
68        return lex
69
70def demo(u8data, lex):
71        global lgth
72        lgth = len(u8data)
73       
74        error_1_0 = (0)
75        cursor_1_0 = ((lex.s38) &~ (bitutil.Advance(lex.s38)))
76        error_1_1 = ((cursor_1_0) &~ (lex.s38))
77        cursor_1_1 = ((cursor_1_0) &~ (error_1_1))
78        cursor_1_2 = (bitutil.Advance(cursor_1_1))
79        error_1_2 = ((cursor_1_2) &~ (lex.s35))
80        cursor_1_3 = ((cursor_1_2) &~ (error_1_2))
81        cursor_1_4 = (bitutil.Advance(cursor_1_3))
82        error_1_3 = ((cursor_1_4) &~ (lex.s120))
83        cursor_1_5 = ((cursor_1_4) &~ (error_1_3))
84        cursor_1_6 = (bitutil.Advance(cursor_1_5))
85        error_1_4 = ((cursor_1_6) &~ (lex.s48__57))
86        cursor_1_7 = ((cursor_1_6) &~ (error_1_4))
87        cursor_1_8 = (bitutil.Advance(cursor_1_7))
88        cursor_1_9 = (bitutil.ScanThru(cursor_1_8,lex.s48__57))
89        error_1_5 = ((cursor_1_9) &~ (lex.s59))
90        cursor_1_10 = ((cursor_1_9) &~ (error_1_5))
91        cursor_1_11 = (bitutil.Advance(cursor_1_10))
92        error_1_6 = (error_1_0)
93        error_1_6 |= (error_1_1)
94        error_1_6 |= (error_1_2)
95        error_1_6 |= (error_1_3)
96        error_1_6 |= (error_1_4)
97        error_1_6 |= (error_1_5)
98
99        bitutil.print_aligned_streams([('       Input Data', u8data), 
100        ('      Init', bitutil.bitstream2string(0, lgth+1)),
101        ('      error_1_0', bitutil.bitstream2string(error_1_0, lgth+1)),
102        ('      lex.s38', bitutil.bitstream2string(lex.s38, lgth+1)),
103        ('      cursor_1_0 = ((lex.s38) &~ (bitutil.Advance(lex.s38)))', bitutil.bitstream2string(cursor_1_0, lgth+1)),
104        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
105        ('      cursor_1_0', bitutil.bitstream2string(cursor_1_0, lgth+1)),
106        ('      lex.s38', bitutil.bitstream2string(lex.s38, lgth+1)),
107        ('      error_1_1 = ((cursor_1_0) &~ (lex.s38))', bitutil.bitstream2string(error_1_1, lgth+1)),
108        ('      cursor_1_1 = ((cursor_1_0) &~ (error_1_1))', bitutil.bitstream2string(cursor_1_1, lgth+1)),
109        ('      cursor_1_2 = (bitutil.Advance(cursor_1_1))', bitutil.bitstream2string(cursor_1_2, lgth+1)),
110        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
111        ('      cursor_1_2', bitutil.bitstream2string(cursor_1_2, lgth+1)),
112        ('      lex.s35', bitutil.bitstream2string(lex.s35, lgth+1)),
113        ('      error_1_2 = ((cursor_1_2) &~ (lex.s35))', bitutil.bitstream2string(error_1_2, lgth+1)),
114        ('      cursor_1_3 = ((cursor_1_2) &~ (error_1_2))', bitutil.bitstream2string(cursor_1_3, lgth+1)),
115        ('      cursor_1_4 = (bitutil.Advance(cursor_1_3))', bitutil.bitstream2string(cursor_1_4, lgth+1)),
116        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
117        ('      cursor_1_4', bitutil.bitstream2string(cursor_1_4, lgth+1)),
118        ('      lex.s120', bitutil.bitstream2string(lex.s120, lgth+1)),
119        ('      error_1_3 = ((cursor_1_4) &~ (lex.s120))', bitutil.bitstream2string(error_1_3, lgth+1)),
120        ('      cursor_1_5 = ((cursor_1_4) &~ (error_1_3))', bitutil.bitstream2string(cursor_1_5, lgth+1)),
121        ('      cursor_1_6 = (bitutil.Advance(cursor_1_5))', bitutil.bitstream2string(cursor_1_6, lgth+1)),
122        ('      Kleene Cross', bitutil.bitstream2string(0, lgth+1)),
123        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
124        ('      cursor_1_6', bitutil.bitstream2string(cursor_1_6, lgth+1)),
125        ('      lex.s48__57', bitutil.bitstream2string(lex.s48__57, lgth+1)),
126        ('      error_1_4 = ((cursor_1_6) &~ (lex.s48__57))', bitutil.bitstream2string(error_1_4, lgth+1)),
127        ('      cursor_1_7 = ((cursor_1_6) &~ (error_1_4))', bitutil.bitstream2string(cursor_1_7, lgth+1)),
128        ('      cursor_1_8 = (bitutil.Advance(cursor_1_7))', bitutil.bitstream2string(cursor_1_8, lgth+1)),
129        ('      Kleene Star', bitutil.bitstream2string(0, lgth+1)),
130        ('      cursor_1_8', bitutil.bitstream2string(cursor_1_8, lgth+1)),
131        ('      lex.s48__57', bitutil.bitstream2string(lex.s48__57, lgth+1)),
132        ('      cursor_1_9 = (bitutil.ScanThru(cursor_1_8,lex.s48__57))', bitutil.bitstream2string(cursor_1_9, lgth+1)),
133        ('      Single Character', bitutil.bitstream2string(0, lgth+1)),
134        ('      cursor_1_9', bitutil.bitstream2string(cursor_1_9, lgth+1)),
135        ('      lex.s59', bitutil.bitstream2string(lex.s59, lgth+1)),
136        ('      error_1_5 = ((cursor_1_9) &~ (lex.s59))', bitutil.bitstream2string(error_1_5, lgth+1)),
137        ('      cursor_1_10 = ((cursor_1_9) &~ (error_1_5))', bitutil.bitstream2string(cursor_1_10, lgth+1)),
138        ('      cursor_1_11 = (bitutil.Advance(cursor_1_10))', bitutil.bitstream2string(cursor_1_11, lgth+1)),
139        ('      error_1_6 = (error_1_0)', bitutil.bitstream2string(error_1_6, lgth+1)),
140        ('      error_1_6 |= (error_1_1)', bitutil.bitstream2string(error_1_6, lgth+1)),
141        ('      error_1_6 |= (error_1_2)', bitutil.bitstream2string(error_1_6, lgth+1)),
142        ('      error_1_6 |= (error_1_3)', bitutil.bitstream2string(error_1_6, lgth+1)),
143        ('      error_1_6 |= (error_1_4)', bitutil.bitstream2string(error_1_6, lgth+1)),
144        ('      error_1_6 |= (error_1_5)', bitutil.bitstream2string(error_1_6, lgth+1))])
145
146
147        return
148
149if __name__ == "__main__":
150        import doctest
151        doctest.testmod()
152
153        if len(sys.argv) < 2:
154                sys.stderr.write("Usage: python " + __file__ + " <filename>" "\n")
155                sys.exit(2)
156
157        u8data = bitutil.readfile(sys.argv[1])
158        (bits, EOF_mask) = bitutil.transpose_streams(u8data)
159       
160        basis_bits = Basis_bits()
161        basis_bits.bit_0 = bits[0]
162        basis_bits.bit_1 = bits[1]
163        basis_bits.bit_2 = bits[2]
164        basis_bits.bit_3 = bits[3]
165        basis_bits.bit_4 = bits[4]
166        basis_bits.bit_5 = bits[5]
167        basis_bits.bit_6 = bits[6]
168        basis_bits.bit_7 = bits[7]
169       
170        lex = classify_bytes(basis_bits)
171        demo(u8data, lex)
Note: See TracBrowser for help on using the repository browser.