source: docs/Working/re/scripts/streams.py @ 3636

Last change on this file since 3636 was 3636, checked in by cameron, 5 years ago

Introduce ambiguity into MatchStar? examples

File size: 4.3 KB
Line 
1#
2# EuroPardemo.py
3
4
5import pablo
6
7import sys
8
9zero_ch = '.'
10
11
12class Basis_bits():     
13        bit_0 = 0
14        bit_1 = 0
15        bit_2 = 0
16        bit_3 = 0
17        bit_4 = 0
18        bit_5 = 0
19        bit_6 = 0
20        bit_7 = 0
21
22
23class Lex ():
24        CR = 0
25        LF = 0
26        HT = 0
27        SP = 0
28        CRLF = 0
29        RefStart = 0
30        Semicolon = 0 
31        Colon = 0
32        LAngle = 0
33        RAngle = 0
34        LBracket = 0
35        RBracket = 0
36        Exclam = 0
37        QMark = 0
38        Hyphen = 0
39        Equals = 0
40        SQuote = 0
41        DQuote = 0
42        Slash = 0
43        Hash = 0
44        Digit = 0
45        Hex = 0
46        WS = 0
47
48def do_lex(basis_bits, lex):
49        temp1 = (basis_bits.bit_1 &~ basis_bits.bit_0)
50        temp2 = (basis_bits.bit_2 | basis_bits.bit_3)
51        temp3 = (temp1 &~ temp2)
52        temp4 = (basis_bits.bit_4 | basis_bits.bit_5)
53        temp5 = (basis_bits.bit_6 | basis_bits.bit_7)
54        temp6 = (temp4 | temp5)
55        lex.at = (temp3 &~ temp6)
56        temp7 = (basis_bits.bit_0 | basis_bits.bit_1)
57        temp8 = (basis_bits.bit_2 & basis_bits.bit_3)
58        temp9 = (temp8 &~ temp7)
59        temp10 = (basis_bits.bit_5 | basis_bits.bit_6)
60        temp11 = (basis_bits.bit_4 & temp10)
61        lex.digit = (temp9 &~ temp11)
62        temp12 = (temp1 & basis_bits.bit_2)
63        temp13 = (basis_bits.bit_6 & basis_bits.bit_7)
64        temp14 = (basis_bits.bit_5 | temp13)
65        temp15 = (basis_bits.bit_4 & temp14)
66        temp16 = (~temp15)
67        temp17 = ((basis_bits.bit_3 & temp16)|(~(basis_bits.bit_3) & temp6))
68        lex.alpha = (temp12 & temp17)
69        temp18 = (basis_bits.bit_2 &~ basis_bits.bit_3)
70        temp19 = (temp1 & temp18)
71        temp20 = (basis_bits.bit_7 &~ basis_bits.bit_6)
72        temp21 = (temp20 &~ temp4)
73        lex.a = (temp19 & temp21)
74        temp22 = (temp1 & temp8)
75        temp23 = (basis_bits.bit_4 &~ basis_bits.bit_5)
76        temp24 = (basis_bits.bit_6 &~ basis_bits.bit_7)
77        temp25 = (temp23 & temp24)
78        temp26 = (temp22 & temp25)
79        temp27 = (temp23 & temp20)
80        temp28 = (temp9 & temp27)
81        lex.z9 = (temp26 | temp28)
82
83
84def latex_streams1(chardata):
85        lgth = len(chardata)
86        basis_bits = Basis_bits()
87        lex = Lex()
88        pablo.EOF_mask = pablo.transpose_streams(chardata, basis_bits)
89        do_lex(basis_bits, lex)
90        return pablo.latex_streams([('input data ', chardata), 
91                              ('$B_7$', pablo.bitstream2string(basis_bits.bit_0, lgth, zero_ch)),
92                              ('$B_6$', pablo.bitstream2string(basis_bits.bit_1, lgth, zero_ch)),
93                              ('$B_5$', pablo.bitstream2string(basis_bits.bit_2, lgth, zero_ch)),
94                              ('$B_4$', pablo.bitstream2string(basis_bits.bit_3, lgth, zero_ch)),
95                              ('$B_3$', pablo.bitstream2string(basis_bits.bit_4, lgth, zero_ch)),
96                              ('$B_2$', pablo.bitstream2string(basis_bits.bit_5, lgth, zero_ch)),
97                              ('$B_1$', pablo.bitstream2string(basis_bits.bit_6, lgth, zero_ch)),
98                              ('$B_0$', pablo.bitstream2string(basis_bits.bit_7, lgth, zero_ch)),
99                              ('\\verb:[a]:', pablo.bitstream2string(lex.a, lgth, zero_ch)),
100                              ('\\verb:[z9]:', pablo.bitstream2string(lex.z9, lgth, zero_ch)),
101                              ('\\verb:[0-9]:', pablo.bitstream2string(lex.digit, lgth, zero_ch))])
102
103
104def latex_streams2(chardata):
105        lgth = len(chardata)
106        basis_bits = Basis_bits()
107        lex = Lex()
108        pablo.EOF_mask = pablo.transpose_streams(chardata, basis_bits)
109        do_lex(basis_bits, lex)
110        M1 = pablo.Advance(lex.a)
111        M2 = pablo.MatchStar(M1, lex.digit)
112        M3 = pablo.Advance(M2 & lex.z9)
113        return pablo.latex_streams([('input data ', chardata), 
114                              ('$M_1$', pablo.bitstream2string(M1, lgth, zero_ch)),
115                              ('$M_2$', pablo.bitstream2string(M2, lgth, zero_ch)),
116                              ('$M_3$', pablo.bitstream2string(M3, lgth, zero_ch))])
117
118def latex_streams3(chardata):
119        lgth = len(chardata)
120        basis_bits = Basis_bits()
121        lex = Lex()
122        pablo.EOF_mask = pablo.transpose_streams(chardata, basis_bits)
123        do_lex(basis_bits, lex)
124        M1 = pablo.Advance(lex.a)
125        T0 = M1 & lex.digit
126        T1 = T0 + lex.digit
127        T2 = T1 ^ lex.digit
128        #M2 = pablo.MatchStar(m1, lex.digit)
129        M2 = T2 | M1
130        return pablo.latex_streams([('input data ', chardata), 
131                              ('$M_1$', pablo.bitstream2string(M1, lgth, zero_ch)),
132                              ('$D = \\text{\\tt [0-9]}$', pablo.bitstream2string(lex.digit, lgth, zero_ch)),
133                              ('$T_0 = M_1 \wedge D$', pablo.bitstream2string(T0, lgth, zero_ch)),
134                              ('$T_1 = T_0 + D$', pablo.bitstream2string(T1, lgth, zero_ch)),
135                              ('$T_2 = T_1 \oplus D$', pablo.bitstream2string(T2, lgth, zero_ch)),
136                              ('$M_2 = T_2 \, | \, M_1$', pablo.bitstream2string(M2, lgth, zero_ch))])
137
138
139
140
141if __name__ == "__main__":
142        #data = r"""a4534q--b29z---az---a4q--bca22z--"""
143        data = r"""a453z--b3z--az--a12949z--ca22z7--"""
144        print latex_streams1(data)
145        print latex_streams2(data)
146        print latex_streams3(data)
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
Note: See TracBrowser for help on using the repository browser.