114 ":": (15, ("rangepre", 15), ("range", 15), ("rangepost", 15)), |
114 ":": (15, ("rangepre", 15), ("range", 15), ("rangepost", 15)), |
115 "not": (10, ("not", 10)), |
115 "not": (10, ("not", 10)), |
116 "!": (10, ("not", 10)), |
116 "!": (10, ("not", 10)), |
117 "and": (5, None, ("and", 5)), |
117 "and": (5, None, ("and", 5)), |
118 "&": (5, None, ("and", 5)), |
118 "&": (5, None, ("and", 5)), |
|
119 "%": (5, None, ("only", 5), ("onlypost", 5)), |
119 "or": (4, None, ("or", 4)), |
120 "or": (4, None, ("or", 4)), |
120 "|": (4, None, ("or", 4)), |
121 "|": (4, None, ("or", 4)), |
121 "+": (4, None, ("or", 4)), |
122 "+": (4, None, ("or", 4)), |
122 ",": (2, None, ("list", 2)), |
123 ",": (2, None, ("list", 2)), |
123 ")": (0, None, None), |
124 ")": (0, None, None), |
150 yield ('..', None, pos) |
151 yield ('..', None, pos) |
151 pos += 1 # skip ahead |
152 pos += 1 # skip ahead |
152 elif c == '#' and program[pos:pos + 2] == '##': # look ahead carefully |
153 elif c == '#' and program[pos:pos + 2] == '##': # look ahead carefully |
153 yield ('##', None, pos) |
154 yield ('##', None, pos) |
154 pos += 1 # skip ahead |
155 pos += 1 # skip ahead |
155 elif c in "():,-|&+!~^": # handle simple operators |
156 elif c in "():,-|&+!~^%": # handle simple operators |
156 yield (c, None, pos) |
157 yield (c, None, pos) |
157 elif (c in '"\'' or c == 'r' and |
158 elif (c in '"\'' or c == 'r' and |
158 program[pos:pos + 2] in ("r'", 'r"')): # handle quoted strings |
159 program[pos:pos + 2] in ("r'", 'r"')): # handle quoted strings |
159 if c == 'r': |
160 if c == 'r': |
160 pos += 1 |
161 pos += 1 |
1933 smallbonus = .5 |
1936 smallbonus = .5 |
1934 |
1937 |
1935 op = x[0] |
1938 op = x[0] |
1936 if op == 'minus': |
1939 if op == 'minus': |
1937 return optimize(('and', x[1], ('not', x[2])), small) |
1940 return optimize(('and', x[1], ('not', x[2])), small) |
|
1941 elif op == 'only': |
|
1942 return optimize(('func', ('symbol', 'only'), |
|
1943 ('list', x[1], x[2])), small) |
1938 elif op == 'dagrangepre': |
1944 elif op == 'dagrangepre': |
1939 return optimize(('func', ('symbol', 'ancestors'), x[1]), small) |
1945 return optimize(('func', ('symbol', 'ancestors'), x[1]), small) |
1940 elif op == 'dagrangepost': |
1946 elif op == 'dagrangepost': |
1941 return optimize(('func', ('symbol', 'descendants'), x[1]), small) |
1947 return optimize(('func', ('symbol', 'descendants'), x[1]), small) |
1942 elif op == 'rangepre': |
1948 elif op == 'rangepre': |