source: proto/RE/demo/grep.py @ 3414

Last change on this file since 3414 was 3414, checked in by ksherdy, 6 years ago

Initial grep Pablo demo.

File size: 2.1 KB
Line 
1#
2# grep - A very simple 'streams' language example to match lines containing the fixed string 'apple'.
3#
4# grep Program flow.
5#
6# <STDIN> -> Transpose -> ClassifyBytes -> Match -> Matchlines -> STDOUT
7#                                                                     
8#
9# Ken Herdy
10# July 29, 2013
11#
12import sys
13import pablo
14
15class Basis(): 
16        bit_0 = 0
17        bit_1 = 0
18        bit_2 = 0
19        bit_3 = 0
20        bit_4 = 0
21        bit_5 = 0
22        bit_6 = 0
23        bit_7 = 0
24
25class Lex():
26        a  = 0
27        p  = 0
28        l  = 0
29        e  = 0
30        LF = 0
31       
32class Matches():
33        m = 0
34
35def ClassifyBytes(basis, lex): 
36        temp1 = (basis.bit_1 &~ basis.bit_0)
37        temp2 = (basis.bit_2 &~ basis.bit_3)
38        temp3 = (temp1 & temp2)
39        temp4 = (basis.bit_4 | basis.bit_5)
40        temp5 = (basis.bit_7 &~ basis.bit_6)
41        temp6 = (temp5 &~ temp4)
42        lex.a = (temp3 & temp6)
43        temp7 = (basis.bit_2 & basis.bit_3)
44        temp8 = (temp1 & temp7)
45        temp9 = (basis.bit_6 | basis.bit_7)
46        temp10 = (temp4 | temp9)
47        lex.p = (temp8 &~ temp10)
48        temp11 = (basis.bit_4 & basis.bit_5)
49        temp12 = (temp11 &~ temp9)
50        lex.l = (temp3 & temp12)
51        temp13 = (basis.bit_5 &~ basis.bit_4)
52        temp14 = (temp13 & temp5)
53        lex.e = (temp3 & temp14)
54        temp15 = (basis.bit_0 | basis.bit_1)
55        temp16 = (temp2 &~ temp15)
56        temp17 = (basis.bit_6 & basis.bit_7)
57        temp18 = (temp17 &~ temp4)
58        lex.LF = (temp16 & temp18)
59       
60def Match(lex, matches):
61        m0 = lex.a
62        m1 = pablo.Advance(m0) & lex.p
63        m2 = pablo.Advance(m1) & lex.p
64        m3 = pablo.Advance(m2) & lex.l
65        m4 = pablo.Advance(m3) & lex.e
66        matches.m = m4
67
68def
69
70basis = Basis()
71lex = Lex()
72matches = Matches()
73
74if __name__ == "__main__":
75        #print "Starting ..."
76        if len(sys.argv) > 1:
77                u8data = pablo.readfile(sys.argv[1]) 
78                pablo.EOF_mask = pablo.transpose_streams(u8data, basis)
79                ClassifyBytes(basis, lex)
80                Match(lex, matches)
81                lgth = len(u8data)
82                print "source data: " + u8data
83                print "lex.a        " + pablo.bitstream2string(lex.a, lgth)
84                print "lex.p        " + pablo.bitstream2string(lex.p, lgth)
85                print "lex.l        " + pablo.bitstream2string(lex.l, lgth)
86                print "lex.e        " + pablo.bitstream2string(lex.e, lgth)
87                print "lex.LF       " + pablo.bitstream2string(lex.LF, lgth)
88                print "matche.m     " + pablo.bitstream2string(matches.m, lgth)
89               
90        else:
91                print("Usage: python grep.py <file>")
92       
93
94
Note: See TracBrowser for help on using the repository browser.