source: proto/RE2PBS/prototype.py @ 2142

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

Refactor. Remove utility code from grammar.

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