source: docs/Working/icGrep/scripts/streams.py @ 4493

Last change on this file since 4493 was 4484, checked in by lindanl, 5 years ago

Add script that generate the example used in Unicode section.

File size: 5.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        CRLF = 0
22        LineFeed = 0
23        Initial = 0
24        NonFinal = 0
25        UnicodeLineBreak = 0
26
27
28
29def do_lex(basis_bits):
30        temp1 = (basis_bits.bit_0 | basis_bits.bit_1)
31        temp2 = (basis_bits.bit_2 | basis_bits.bit_3)
32        temp3 = (temp1 | temp2)
33        temp4 = (basis_bits.bit_4 &~ basis_bits.bit_5)
34        temp5 = (basis_bits.bit_6 &~ basis_bits.bit_7)
35        temp6 = (temp4 & temp5)
36        LF = (temp6 &~ temp3)
37        temp7 = (basis_bits.bit_4 & basis_bits.bit_5)
38        temp8 = (basis_bits.bit_7 &~ basis_bits.bit_6)
39        temp9 = (temp7 & temp8)
40        CR = (temp9 &~ temp3)
41        temp10 = (basis_bits.bit_4 &~ temp3)
42        temp11 = (basis_bits.bit_5 ^ basis_bits.bit_6)
43        LF_VT_FF_CR = (temp10 & temp11)
44        u8pfx = (basis_bits.bit_0 & basis_bits.bit_1)
45        temp12 = (u8pfx &~ basis_bits.bit_2)
46        temp13 = (basis_bits.bit_4 | basis_bits.bit_5)
47        temp14 = (temp13 | basis_bits.bit_6)
48        temp15 = (basis_bits.bit_3 | temp14)
49        u8pfx2 = (temp12 & temp15)
50        temp16 = (basis_bits.bit_2 &~ basis_bits.bit_3)
51        u8pfx3 = (u8pfx & temp16)
52        temp17 = (basis_bits.bit_2 & basis_bits.bit_3)
53        temp18 = (u8pfx & temp17)
54        temp19 = (temp18 &~ basis_bits.bit_4)
55        temp20 = (basis_bits.bit_6 | basis_bits.bit_7)
56        temp21 = (basis_bits.bit_5 & temp20)
57        u8pfx4 = (temp19 &~ temp21)
58        u8single = (~basis_bits.bit_0)
59        temp22 = (u8pfx &~ temp2)
60        temp23 = (temp5 &~ temp13)
61        xC2 = (temp22 & temp23)
62        temp24 = (basis_bits.bit_0 &~ basis_bits.bit_1)
63        temp25 = (temp24 &~ temp2)
64        temp26 = (basis_bits.bit_5 &~ basis_bits.bit_4)
65        temp27 = (temp26 & temp8)
66        x85 = (temp25 & temp27)
67        xE2 = (u8pfx3 & temp23)
68        temp28 = (temp13 | temp20)
69        x80 = (temp25 &~ temp28)
70        temp29 = (temp24 & temp16)
71        temp30 = (temp4 &~ basis_bits.bit_6)
72        xA8A9 = (temp29 & temp30)
73        temp31 = (temp26 &~ temp20)
74        basis_bits.xE4 = (u8pfx3 & temp31)
75        temp32 = (temp24 & temp17)
76        basis_bits.xBD = (temp32 & temp9)
77        basis_bits.xA0 = (temp29 &~ temp28)
78        basis_bits.xE5 = (u8pfx3 & temp27)
79        basis_bits.xA5 = (temp29 & temp27)
80        temp33 = (basis_bits.bit_6 & basis_bits.bit_7)
81        temp34 = (basis_bits.bit_5 | temp33)
82        temp35 = (basis_bits.bit_4 & temp34)
83        temp36 = (~temp35)
84        temp37 = ((basis_bits.bit_3 & temp36)|(~(basis_bits.bit_3) & temp28))
85        temp38 = (basis_bits.bit_1 &~ basis_bits.bit_0)
86        basis_bits.letter = (temp37 & temp38)
87        basis_bits.LineFeed = LF
88        valid_pfx = 0
89        NEL_LS_PS = 0
90        basis_bits.CRLF = 0
91        basis_bits.NonFinal = 0
92        if CR:
93                basis_bits.CRLF = pablo.Advance(CR) & basis_bits.LineFeed
94        if u8pfx:
95                valid_pfx = u8pfx2 | u8pfx3 | u8pfx4
96                u8scope32 = pablo.Advance(u8pfx3)
97                u8scope42 = pablo.Advance(u8pfx4)
98                u8scope43 = pablo.Advance(u8scope42)
99                basis_bits.NonFinal = u8pfx | u8scope32 | u8scope42 | u8scope43
100                NEL = pablo.Advance(xC2) & pablo.Advance(x85)
101                E2_80 = pablo.Advance(xE2) & pablo.Advance(x80)
102                LS_PS = pablo.Advance(E2_80) & pablo.Advance(xA8A9)
103                NEL_LS_PS = NEL | LS_PS
104        LB_chars = LF_VT_FF_CR | NEL_LS_PS
105        basis_bits.Initial = u8single | valid_pfx
106        basis_bits.UnicodeLineBreak = LB_chars & ~ basis_bits.CRLF
107
108
109
110def latex_streams(chardata):
111        lgth = len(chardata)
112        basis_bits = Basis_bits()
113        pablo.EOF_mask = pablo.transpose_streams(chardata, basis_bits)
114        do_lex(basis_bits)
115        M_1 = pablo.ScanThru(basis_bits.Initial, basis_bits.NonFinal)
116        CC_ni = pablo.Advance(pablo.Advance(basis_bits.xE4) & basis_bits.xBD) &  basis_bits.xA0
117        Adv = pablo.Advance(M_1 & CC_ni)
118        M_2 = pablo.ScanThru(basis_bits.Initial & Adv, basis_bits.NonFinal)
119        CC_hao = pablo.Advance(pablo.Advance(basis_bits.xE5) & basis_bits.xA5) &  basis_bits.xBD
120        match = M_2 & CC_hao
121        return pablo.latex_streams([('input data ', chardata), 
122                                ('$CC_{\mbox{ni3}}$', pablo.bitstream2string(CC_ni, lgth, zero_ch)),
123                                ('$CC_{\mbox{hao}}$', pablo.bitstream2string(CC_hao, lgth, zero_ch)),
124                                ('$Initial$', pablo.bitstream2string(basis_bits.Initial, lgth, zero_ch)),
125                                ('$NonFinal$', pablo.bitstream2string(basis_bits.NonFinal, lgth, zero_ch)),
126                                ('$M_1 = ScanThru(Initial, NonFinal)$', pablo.bitstream2string(M_1, lgth, zero_ch)),
127                                ('$Adv = Advance(M_1 \land CC_{\mbox{ni3}})$', pablo.bitstream2string(Adv, lgth, zero_ch)),
128                            ('$M_2 = ScanThru(Initial \land Adv, NonFinal)$', pablo.bitstream2string(M_2, lgth, zero_ch)),
129                                ('$match = M_2 \land CC_{\mbox{hao}}$', pablo.bitstream2string(match, lgth, zero_ch))])
130
131# def latex_streams3(chardata):
132#       lgth = len(chardata)
133#       basis_bits = Basis_bits()
134#       lex = Lex()
135#       pablo.EOF_mask = pablo.transpose_streams(chardata, basis_bits)
136#       do_lex(basis_bits)
137#     M1 = pablo.Advance(lex.a)
138#     T0 = M1 & lex.digit
139#       T1 = T0 + lex.digit
140#       T2 = T1 ^ lex.digit
141#     #M2 = pablo.MatchStar(m1, lex.digit)
142#       M2 = T2 | M1
143#       return pablo.latex_streams([('input data ', chardata),
144#                             ('$M_1$', pablo.bitstream2string(M1, lgth, zero_ch)),
145#                             ('$D = \\text{\\tt [0-9]}$', pablo.bitstream2string(lex.digit, lgth, zero_ch)),
146#                             ('$T_0 = M_1 \wedge D$', pablo.bitstream2string(T0, lgth, zero_ch)),
147#                             ('$T_1 = T_0 + D$', pablo.bitstream2string(T1, lgth, zero_ch)),
148#                             ('$T_2 = T_1 \oplus D$', pablo.bitstream2string(T2, lgth, zero_ch)),
149#                             ('$M_2 = T_2 \, | \, M_1$', pablo.bitstream2string(M2, lgth, zero_ch))])
150
151
152
153
154if __name__ == "__main__":
155       
156        data = "E4BDA0E5A5BD".decode("hex")+"(Hello),"+"E4BDA0E4BBAC".decode("hex")+"(You),"
157        print latex_streams(data)
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
Note: See TracBrowser for help on using the repository browser.