diff options
author | Pearu Peterson <pearu.peterson@gmail.com> | 2007-01-18 10:25:55 +0000 |
---|---|---|
committer | Pearu Peterson <pearu.peterson@gmail.com> | 2007-01-18 10:25:55 +0000 |
commit | 1214839af24d8458e23f8edba7ed4375aff0ca3b (patch) | |
tree | d96f0763c00cf17c607487237af6072a8a5d8fff /numpy/f2py/lib/parser/pattern_tools.py | |
parent | d84df7beb09f4a3a80b721102d9705e9661fc47a (diff) | |
download | numpy-1214839af24d8458e23f8edba7ed4375aff0ca3b.tar.gz |
G3 F2PY: Fixed parsing a*b**c expression.
Diffstat (limited to 'numpy/f2py/lib/parser/pattern_tools.py')
-rw-r--r-- | numpy/f2py/lib/parser/pattern_tools.py | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/numpy/f2py/lib/parser/pattern_tools.py b/numpy/f2py/lib/parser/pattern_tools.py index 9c840edd9..3c009a6a8 100644 --- a/numpy/f2py/lib/parser/pattern_tools.py +++ b/numpy/f2py/lib/parser/pattern_tools.py @@ -261,10 +261,10 @@ part_ref = name + ~((r'[(]' + name + r'[)]')) data_ref = part_ref + ~~~(r'[%]' + part_ref) primary = constant | name | data_ref | (r'[(]' + name + r'[)]') -power_op = Pattern('<power-op>','[*]{2}') -mult_op = Pattern('<mult-op>',r'[/*]') +power_op = Pattern('<power-op>',r'(?<![*])[*]{2}(?![*])') +mult_op = Pattern('<mult-op>',r'(?<![*])[*](?![*])|(?<![/])[/](?![/])') add_op = Pattern('<add-op>',r'[+-]') -concat_op = Pattern('<concat-op>',r'[/]{2}') +concat_op = Pattern('<concat-op>',r'(?<![/])[/]{2}(?![/])') rel_op = Pattern('<rel-op>','[.]EQ[.]|[.]NE[.]|[.]LT[.]|[.]LE[.]|[.]GT[.]|[.]GE[.]|[=]{2}|/[=]|[<][=]|[<]|[>][=]|[>]',flags=re.I) not_op = Pattern('<not-op>','[.]NOT[.]',flags=re.I) and_op = Pattern('<and-op>','[.]AND[.]',flags=re.I) @@ -372,6 +372,29 @@ def _test(): assert m.match('HEY_"adadfa"') assert m.match('HEY _ "ad\tadfa"') assert not m.match('adadfa') + + def assert_equal(result, expect): + try: + assert result==expect + except AssertionError, msg: + raise AssertionError,"Expected %r but got %r: %s" \ + % (expect, result, msg) + + m = mult_op.named() + assert m.rsplit('a * b') + assert_equal(m.lsplit('a * c* b'),('a','*','c* b')) + assert_equal(m.rsplit('a * c* b'),('a * c','*','b')) + assert_equal(m.lsplit('a * b ** c'),('a','*','b ** c')) + assert_equal(m.rsplit('a * b ** c'),('a','*','b ** c')) + assert_equal(m.lsplit('a * b ** c * d'),('a','*','b ** c * d')) + assert_equal(m.rsplit('a * b ** c * d'),('a * b ** c','*','d')) + + m = power_op.named() + assert m.rsplit('a ** b') + assert_equal(m.lsplit('a * b ** c'),('a * b','**','c')) + assert_equal(m.rsplit('a * b ** c'),('a * b','**','c')) + assert_equal(m.lsplit('a ** b ** c'),('a','**','b ** c')) + assert_equal(m.rsplit('a ** b ** c'),('a ** b','**','c')) print 'ok' if __name__ == '__main__': |